Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

StringGrid событие DrawCell [D2005, XP]


Страницы:   1 2 3 4 5 6 7 8

alex810 ©   (2006-11-17 09:10:00) 

Помогите пожалуйста как мне можно вызвать процедуру DrawCell щелчком по кнопке. Я думаю так но не знаю что такое Rect: TRect

procedure TForm1.Button1Click(Sender: TObject);
begin
TForm3.StringGrid2DrawCell(StringGrid2, X, Y, ?????, gdFixed);
end
;


Elen   (2006-11-17 10:20:00) [121]


> У меня TabSheet

А грид 4х7 сделать раз и навсегда мысль не приходила?


ЮЮ   (2006-11-17 10:19:00) [122]

Так в чем вопрос-то?
Если всё ещё subj-евый, то нигде этот метод в своем коде вызывать не надо. Это именно этот метод будет вызываться ВСЯКИЙ раз, когда нужно нарисовать ячейку.
А это нудно вовсе не толко, когда ты нажал кнопку, что-то персчитал и теперь хочешь перекрасить всё по другому. Это нужн и тогда, гогда другим окном над грдом пробежал, свернул/развернул окно. Поэтому все данные нужные для отрисовки, должнв быть поблизости и доступны в этом обработчике.

А вот в обработчике сур-пупер кнопки ты должен изменить эти даннные так, чтобы обработчик мог ими воспользоваться при отрисовке ячеек.

Чтобы заставить стринггрид перерисовать все ячейки, достаточно написать StringGrid.Invalidate;


Сергей М.   (2006-11-17 10:19:00) [123]


> alex810 ©   (17.11.06 10:17) [33]


> Так я и сделал один обработчик


Так а зачем в этом обработчике обращение к тегу и какому-то там массиву, если ид-р цвета можно получить из св-ва самого эдита ?

procedure TForm3. AnyEditClick(Sender: TObject);
begin
with TEdit(Sender) do
 SelectedColor:=Color;
end;

?


alex810   (2006-11-17 10:18:00) [124]


> Есть четыре тарифных зоны

У меня TabSheet для переключеня по зонам. Чтобы сделать все визуально.


alex810   (2006-11-17 10:17:00) [125]

Так я и сделал один обработчик

procedure TForm3.Edit1Click(Sender: TObject);
begin
with TEdit(Sender) do
begin
SelectedColor:=Colors[Tag];
end;
end;

и обращаюсь к нему с других эдитов. В таг прописан номер эдита и соответсвенно его цвет в массиве

const colors : array[0..23] of TColor =
(clWhite,clBlack,clMaroon,clGreen,clOlive,clNavy,clPurple,clTeal
,clGray,clSilver,clRed,clLime,clYellow,clBlue,clFuchsia,clAqua,clMoneyGreen
,clSkyBlue,clCream,clMedGray,clActiveBorder,clActiveCaption,clAppWorkSpace,clScr  ollBar);


Elen   (2006-11-17 10:16:00) [126]


> Есть четыре тарифных зоны

Есть RadioButton который может переключать по зонам, внатуре.


ASoft   (2006-11-17 10:16:00) [127]

>alex810 ©   (17.11.06 10:14) [30]
с этого надо было начинать..:)
а по сабжу ответ в [1] был


alex810   (2006-11-17 10:14:00) [128]

Есть четыре тарифных зоны. Зима, весна, лето и осень. Семь дней недели. Каждый эдит соответствует одному часу.


Сергей М.   (2006-11-17 10:13:00) [129]


> alex810 ©   (17.11.06 10:09) [25]


> эдитов уже 96 и для каждого делать обработку события Edit1Click


Ну а как же без обработки-то ? Никак)
Другой вопрос - нафига лепить кучу одинаковых обработчиков, если всем твоим эдитам можно назначить один и тот же обработчик ?


ASoft   (2006-11-17 10:12:00) [130]

>alex810 ©   (17.11.06 10:09) [25]
mamma mia! Может, правда, заменишь этиды таблицей, а? Ну, что ж ты, бедный, так страдаешь?!


Elen   (2006-11-17 10:12:00) [131]


> Он связан в DrawCell

Так это тебе весь грид в один колор распаинтит. Попрожнему не понимаю нафея столько эдитов? (Чето торможу наверно...)


alex810   (2006-11-17 10:11:00) [132]

Он связан в DrawCell

procedure TForm3.StringGrid2DrawCell(Sender: TObject; ACol, ARow: Integer;
 Rect: TRect; State: TGridDrawState);
begin
if (state = [gdSelected]) then
   with TStringGrid(Sender), Canvas do
   begin
     Brush.Color := SelectedColor;
     TextRect(Rect, Rect.Left + 2, Rect.Top + 2, Cells[aCol, aRow]);
     FillRect(Rect);
end;
end;


alex810   (2006-11-17 10:09:00) [133]

У меня эдитов уже 96 и для каждого делать обработку события Edit1Click. У меня и так уже более 2000 строк кода куда еще больше.


Elen   (2006-11-17 10:08:00) [134]


> SelectedColor

А дальше как он с гридом связан?


Сергей М.   (2006-11-17 10:07:00) [135]


> alex810 ©   (17.11.06 10:05) [22]


У тебя твои эдиты ужераскрашены ! Зачем нужен еще какой-то массив ?

У эдита, на который "кликнули", тут же получаешь значение его св-ва Color - вот тебе тот же самыйидентификатор)


alex810   (2006-11-17 10:05:00) [136]

Вот массив цветов.

const colors : array[0..23] of TColor =
(clWhite,clBlack,clMaroon,clGreen,clOlive,clNavy,clPurple,clTeal
,clGray,clSilver,clRed,clLime,clYellow,clBlue,clFuchsia,clAqua,clMoneyGreen
,clSkyBlue,clCream,clMedGray,clActiveBorder,clActiveCaption,clAppWorkSpace,clScr ollBar);

А вот зачем нужен идентификатор

procedure TForm3.Edit1Click(Sender: TObject);
begin
with TEdit(Sender) do
begin
 SelectedColor:=Colors[Tag];
end;
end;


Сергей М.   (2006-11-17 10:04:00) [137]


> alex810 ©   (17.11.06 10:02) [20]


> хочу сделать тарификацию


Да по барабану, какую "тарификацию" ты хочешь сделать)
К твоему вопросу это не имеет ни малейшего отношения.


> В эдитах я ввожу стоимость


Кому интересно, что ты туда "вводишь" ?
Лучше скажи, когда и каким образом ты раскрасил свои эдиты - в дизайн-тайм или в ран-тайм ?


alex810   (2006-11-17 10:02:00) [138]

Я хочу сделать тарификацию примерно такуюже как и MuxaSoft Dialer. В эдитах я ввожу стоимость.


Сергей М.   (2006-11-17 10:01:00) [139]


> При клике на эдит цвет во втором гриде меняется в соответствии
> с цветом эдита


Ну и зачем нужен еще какой-то дополнительный "идентификатор цвета" ?

Edit.Color - вот он, идентификатор ! Зачем плодить еще какие-то "идентификаторы"  ?


Elen   (2006-11-17 09:57:00) [140]


> если бы они хотя бы что нибудь подсказали а то сами не хр.
> . не знают.

Картинка знакома. Так. Попробуй рассуди по другому - замени 24 эдита гридом с 24 строками и во втором гриде обращайся к аналогичной строке. а после редактирования дай Репаинт или Рефреш


Страницы:   1 2 3 4 5 6 7 8

Наверх

Титульная страница Поиск, карта сайта Написать письмо