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
;


Плохиш   (2006-11-17 12:09:00) [21]


> procedure TForm3. StringGrid2DrawCell(Sender: TObject; ACol,
>  ARow: Integer;


>    for X := 1 to stringgrid1.colcount do
>   for y := 1 to stringgrid1.rowcount do

А я - Папа Римский. Спокойно дети мои, спокойно. Там со всеми разберутся...


Elen   (2006-11-17 12:08:00) [22]


> alex810

Так. Давай спочатку - тебе нужно проверить цифру в ячейке, найти соответствующий ей цвет и отрисовать в такой же ячейке по позиции в другом гриде. Так?


Плохиш   (2006-11-17 12:07:00) [23]


> alex810 ©   (17.11.06 12:02) [131]

Враньё, этот код компилятор делфи даже не пропустит.


Elen   (2006-11-17 12:06:00) [24]


> alex810

Когда я говорю Вот это if Stringgrid1.Cells[x,y] = '1' then лучше перенести
> в OnDrawCell
имеется только это, а тоы весь цикель дтуда зафигачил. Совет : попробовать на более простых задачах и примерах понять механизм отрисовки.


KilkennyCat   (2006-11-17 12:05:00) [25]

тайнопись.


ASoft   (2006-11-17 12:04:00) [26]

та
> alex810 ©   (17.11.06 12:02) [131]
>
>


>  FillRect(Rect);

так и хочется сказать известную здесь фразу "чукча писатель..." :(


alex810   (2006-11-17 12:02:00) [27]


> Вот это if Stringgrid1.Cells[x,y] = '1' then лучше перенести
> в OnDrawCell


Я так и сделал не получается
procedure TForm3.StringGrid2DrawCell(Sender: TObject; ACol, ARow: Integer;
 Rect: TRect; State: TGridDrawState);
var x,y:integer;
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
 else
   for X := 1 to stringgrid1.colcount do
  for y := 1 to stringgrid1.rowcount do
   begin
     if Stringgrid1.Cells[x,y] = '1' then
    begin
      if (state = [gdSelected]) then
   with TStringGrid(Sender), Canvas do
   begin
     Brush.Color := Edit2.Color;
     TextRect(Rect, Rect.Left + 2, Rect.Top + 2, Cells[aCol, aRow]);
     FillRect(Rect);
   end
    end;
end;
end;


Elen   (2006-11-17 12:01:00) [28]

Удалено модератором


ASoft   (2006-11-17 11:58:00) [29]

так.. на чем остановились? :)
>alex810 ©
автор, пока ты не поймешь где, как и что рисуется в принципе вообще  и не сделаешь, простенький пример окрашивания столбца/строки СтрингГрида, тебе будет сложно сваять что-то серьезное!


Elen   (2006-11-17 11:56:00) [30]

Удалено модератором


Плохиш   (2006-11-17 11:52:00) [31]


> Elen ©   (17.11.06 11:41) [112]
>
> > А что он нарисует???????
>
> То что ты пропишеш в OnDrawCell.
> Автор не обижайся - просто ты и сам не знаеш чего хочеш.

В данном случае, автор как раз знает что хочет :-) Только степень его знаний по теме не позволяет ему не только найти правильное решение, но, к сожалению, даже понять это решение уже нмогократно пережёванное здесь.


ЮЮ   (2006-11-17 11:51:00) [32]


> Только что попробовал не получается.


Код OnDrawCell - в студию!!!


alex810   (2006-11-17 11:50:00) [33]


> Это все что тебе нужно. Осталось в нужным местах заполнять
> и изменять массив цветов, вызывая после этого перерисовку
> всего грида StringGrid2.Invalidate

Только что попробовал не получается.


ЮЮ   (2006-11-17 11:50:00) [34]

Вынужден был кричать авторским неправильным кодом.

    Brush.Color := ЦВЕТА_ЯЧЕЕК[ARow, ACol];
    FillRect(Rect);
    TextRect(Rect, Rect.Left + 2, Rect.Top + 2, Cells[aCol, aRow]);

Естественно, сначала стереть с доски, а потом на ней написать :)


Elen   (2006-11-17 11:49:00) [35]


>  Как сделать чтобы она прорисовывалась опять так как была

.Invalidate. Все вычисления по колору помести в обработчик отрисовки.
> Та я понимаю что прийдется делать цикл он у меня уже есть
>
> for X := 1 to stringgrid1.colcount do
>   for y := 1 to stringgrid1.rowcount do
>    begin
>      if Stringgrid1.Cells[x,y] = '1' then
>      begin
> Сюда что надо написать

Ничего. Вместо этого цикла Stringgrid1.invalidate; Он сам организует прорисовку.
Вот это if Stringgrid1.Cells[x,y] = '1' then лучше перенести в OnDrawCell


Плохиш   (2006-11-17 11:49:00) [36]


> alex810 ©   (17.11.06 11:41) [114]

Чукча-писатель!
Товагищь, в oncreate формы читаешь из файла, сохранённый ранее, массив цветов и вариант, многократно озвученный ЮЮ, отрисует твой грид без каких-либо дополнительных телодвижений с твоей стороны.


ЮЮ   (2006-11-17 11:48:00) [37]

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 := ЦВЕТА_ЯЧЕЕК[ARow, ACol];
   TextRect(Rect, Rect.Left + 2, Rect.Top + 2, Cells[aCol, aRow]);
   FillRect(Rect);
end;
end;


Это все что тебе нужно. Осталось в нужным местах заполнять и изменять массив цветов, вызывая после этого перерисовку всего грида StringGrid2.Invalidate

Для невменяемого автора. Может заметит


ЮЮ   (2006-11-17 11:47:00) [38]

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 := ЦВЕТА_ЯЧЕЕК[ARow, ACol];
   TextRect(Rect, Rect.Left + 2, Rect.Top + 2, Cells[aCol, aRow]);
   FillRect(Rect);
end;
end;


Это все что тебе нужно. Осталось в нужным местах заполнять и изменять массив цветов, вызывая после этого перерисовку всего грида StringGrid2.Invalidate


alex810   (2006-11-17 11:46:00) [39]


> Когда ты выделяешь мышью грид рисует только ячейку с которой
> ты ушел и в которую ты пришел. Проведи над гридом после
> этого другой формой и удивись тому, как у тебя всё запущено.
>  :)

Вот моя проблема. Как сделать чтобы она прорисовывалась опять так как была


Сергей М.   (2006-11-17 11:45:00) [40]


> alex810 ©   (17.11.06 11:41) [114]



> Он рисует когда я выделяю мышью. А мне надо чтобы он рисовал
> еще и тогда когда создается форма.
>


Он рисует всегда, когда по тем или иным причинам требуется перерисовать ячейку. И одна из этих "причин" (в том числе и в первуюочередь) - создание грида в ходе создания формы


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

Наверх

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