![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Можно ли разукрашивать StringGrid в событии отличном от DrawCell? [D7, WinXP]
Zheksik © (2007-12-07 11:18:00)Здравствуйте. Проблема в том, что после обработки и получения табличных результатов нужно выделить максимальный элемент в каждом столбце. Я знаю как выделяется ячейка с помощью события DrawCell, но оно мне не подходит, т.к. оно происходит в момент прорисовки таблицы, а мне нужно, чтобы после полного построения таблицы.
{RASkov} (2007-12-08 15:24:00) [1]> [49] Германн © (08.12.07 14:57)
>
> > А меня подталкивал на них.... не чесно :)
>
> Ты сам напросился {RASkov} © (07.12.07 14:53) [34]
> :)
Я никуда не напрашивался :( Я просто поинтересовался у автора - не сделал-ли он глупость
:)
Германн (2007-12-08 14:57:00) [2]
> А меня подталкивал на них.... не чесно :)
Ты сам напросился {RASkov} © (07.12.07 14:53) [34]
:)
{RASkov} (2007-12-08 14:04:00) [3]> [47] Германн © (08.12.07 13:51)
> Да я уже давно завязал :)
А меня подталкивал на них.... не чесно :)
Германн (2007-12-08 13:51:00) [4]
> Ну все, Сергей, нужно завязывать с этими экспериментами.
> .....)
Да я уже давно завязал :)
{RASkov} (2007-12-08 11:49:00) [5]> [45] Германн © (08.12.07 02:21)
:(
:)
Пострадал из набора (Грид, метка, кнопка, эдит) только эдит, остальные после первой полной перерисовки(свернуть-развернуть окно) нормолизовались
Ну все, Сергей, нужно завязывать с этими экспериментами......)
Одно скажу.... для автора вопроса и не только - Ни в коем случае не вызывайте Invalidate в OnDrawCell грида
это ужасно (
:о)
Германн (2007-12-08 02:21:00) [6]
> Германн © (08.12.07 02:18) [44]
>
>
> > {RASkov} © (07.12.07 22:18) [43]
> >
> > > [42] Германн © (07.12.07 22:05)
> >
> > Ага.... понял что есть бр :)
> > Но у меня и в этом случае все тип-топ :)
>
Тогда попробуй сначала кинуть на форму кнопочки и другие компоненты, а потом StringGrid.
Германн (2007-12-08 02:18:00) [7]
> {RASkov} © (07.12.07 22:18) [43]
>
> > [42] Германн © (07.12.07 22:05)
>
> Ага.... понял что есть бр :)
> Но у меня и в этом случае все тип-топ :)
{RASkov} (2007-12-07 22:18:00) [8]> [42] Германн © (07.12.07 22:05)
Ага.... понял что есть бр :)
Но у меня и в этом случае все тип-топ :)
Во:
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState);
begin
StringGrid1.Canvas.Brush.Color:=clRed;
StringGrid1.Canvas.TextRect(Rect,Rect.Left, Rect.Top, 'бр.бр.бр.бр.');
StringGrid1.Invalidate;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
ShowMessage('бр');
end;
procedure TForm1.Edit1Change(Sender: TObject);
begin
Label1.Caption:=Edit1.Text;
end;
end.
Кнопочки тыкаются, сообщения показываются, текст метки меняется..... а в это время по гриду полоски бегаютЪ
Анамалия :)
Германн (2007-12-07 22:05:00) [9]
> У меня это "бр." выглядит как мелькающие полоски по всему
> гриду)
> но грид читаем и как указано - красный.....
>
А ты добавь кроме грида еще что-нибудь. Кнопочки например. Тогда и увидишь последствия бесконечной рекурсии :)
{RASkov} (2007-12-07 22:01:00) [10]> [40] Германн © (07.12.07 21:54)
> Или сам попробуй вызвать Invalidate в OnDrawCell.
Легко:
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState);
begin
StringGrid1.Canvas.Brush.Color:=clRed;
StringGrid1.Canvas.TextRect(Rect,Rect.Left, Rect.Top, 'бр.бр.бр.бр.');
StringGrid1.Invalidate;
end;
:)
У меня это "бр." выглядит как мелькающие полоски по всему гриду)
но грид читаем и как указано - красный.....
Ладно.... я в шутку спросил впрочем как и этот пост....
:о)
Германн (2007-12-07 21:54:00) [11]
> А что такое "бр." ? )
>
Догадайся с трех раз :)
Или сам попробуй вызвать Invalidate в OnDrawCell.
{RASkov} (2007-12-07 21:49:00) [12]> [38] Германн © (07.12.07 21:43)
> встал на уши от бр.
А что такое "бр." ? )
Германн (2007-12-07 21:43:00) [13]
> {RASkov} © (07.12.07 14:53) [34]
>
> > не DrawCell
>
>
> > 4) AdvStringGrid1.Invalidate;
>
> Вот это случайно у тебя не в OnDrawCell?? )
>
Если бы он так сделал, то давно бы встал на уши от бр.
Zheksik (2007-12-07 15:06:00) [14]
> :) я рад за тебя)
я конечно туповат, но не до такой степени ;)
а вообще, в моём сучае тупость сродни невнимательности.
в общем вопрос разрешился... как всегда моя невнимательность... ключ не перевёл в нужное положение.
спасибо. такому терпению в пятницу можно только позавидовать ;)
{RASkov} (2007-12-07 14:58:00) [15]> [33] Zheksik © (07.12.07 14:53)
> AdvStringGrid1.Canvas.Brush.Color := clRed;
> AdvStringGrid1.Canvas.FillRect(Rect);
> AdvStringGrid1.Canvas.TextRect(Rect, Rect.Left, Rect.Top,
> AdvStringGrid1.Cells[ACol, ARow]);
Здесь практически верно, а вот здесь:
> if MArray[ACol] = ARow then
Проверять нужно....
Почему - практически?
потому как не красиво делать
> AdvStringGrid1.Canvas
У метода есть Сендер, вот его и нужно использовать. Это не требование, но так правильнее....
Так можно использовать один обработчик на всех и "не страшно" переименование грида....
> [35] Zheksik © (07.12.07 14:57)
:) я рад за тебя)
Zheksik (2007-12-07 14:57:00) [16]{RASkov} © (07.12.07 14:53) [34]
нет конечно
Это сразу после окончания процедуры, которая наполняет массив
Zheksik (2007-12-07 14:53:00) [17]Плохиш © (07.12.07 14:47) [30]
упс...
if MArray[ACol] = ARow then
begin
AdvStringGrid1.Canvas.Brush.Color := clRed;
AdvStringGrid1.Canvas.FillRect(Rect);
AdvStringGrid1.Canvas.TextRect(Rect, Rect.Left, Rect.Top, AdvStringGrid1.Cells[ACol, ARow]);
end;
по идее должны закрашиваться ечейки соответствующие индексам массива и их значениям.
{RASkov} (2007-12-07 14:53:00) [18]> не DrawCell
> 4) AdvStringGrid1.Invalidate;
Вот это случайноу тебя не в OnDrawCell?? )
{RASkov} (2007-12-07 14:52:00) [19]> [27] Zheksik © (07.12.07 14:41)
и 4 пункт случаем не DrawCell??? :)
{RASkov} (2007-12-07 14:51:00) [20]> [27] Zheksik © (07.12.07 14:41)
Вот ты кисточку мокнул в краску, а дальше хочешь что б забор автоматом стал тем же цветом...