![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Коллеги , когда при работе с StringGrid
smartleds © (2007-12-06 22:30:00)возникает событие OnDrawCell? которое прорисовывает ячейки.
smartleds (2007-12-07 15:19:00) [1]Спасибо, поставил внутрь TForm1.StringGrid1DrawCell печать и стало понятно
Anatoly Podgoretsky (2007-12-07 15:17:00) [2]Перерисовывается только недействительный регион. Никто не пытается перерисовывать миллионы ячеек, максимум только видимые, минимум одна ячейка.
smartleds (2007-12-07 15:14:00) [3]А как она работает?
Anatoly Podgoretsky (2007-12-07 15:11:00) [4]> smartleds (07.12.2007 15:09:16) [16]
Неправильно понял
smartleds (2007-12-07 15:09:00) [5]Коллеги еще вопрос, правильно ли я понял, процедура TForm1.StringGrid1DrawCell при прорисовке StringGrid, вызывается такое количество раз сколько ячеек в таблице? И вызывается каждый раз с новым Arow и Acol
Германн (2007-12-07 01:07:00) [6]
> {RASkov} © (07.12.07 01:03) [14]
>
...
> Как кому....
> ...гриду крашенному)
>
Ну тогда Елене Филипповой. Чтобы мы без неё делали? :)
{RASkov} (2007-12-07 01:03:00) [7]> [12] smartleds (07.12.07 00:49)
Здесь верно, но мне интересен был код, где у тебя не получалось :), теперь уже не важно)
ЗЫ Я бы в данном случае вместо TextOut использовал бы TextRect. Большой разницы не увидешь, но....(если знаешь чем они отличаются, то поймешь)
или DrawText(вообще-бы замечательно)...)
> [13] Германн © (07.12.07 01:01)
> (сам не знаю кому :)
:)
Как кому....
...гриду крашенному)
Германн (2007-12-07 01:01:00) [8]
> smartleds (07.12.07 00:49) [12]
>
> Большое спасибо вроде побарол.
> Сейчас краска не пропадает
Ну и слава (сам не знаю кому :)
А статьи, которые тут советуют прочитать, надо таки читать. Чтобы потом не было стыдно за бесцельно...
smartleds (2007-12-07 00:49:00) [9]Большое спасибо вроде побарол.
Сейчас краска не пропадает, крашу вот так:
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
var i:integer;
begin
if (Acol=1) and (Arow=1) then begin
with StringGrid1.Canvas do
begin
Brush.Color:=clRed;
Font.Color:=clWhite;
FillRect(Rect);
TextOut(Rect.Left+2,Rect.Top+2,StringGrid1.Cells[Acol,Arow]);
end;
end;
end; // end proc
Текстом ячейки заполнил при создании формы.
{RASkov} (2007-12-07 00:41:00) [10]> [10] smartleds (07.12.07 00:39)
Покажи как и где красишь...
smartleds (2007-12-07 00:39:00) [11]А как этот параметр учитывать? При помощи этого параметра я только могу узнать , что ячейка находится в выбранном диапазоне dgSelected, ячейка имеет фокус ввода dgFocused, ячейка находится в фиксированном диапазоне
IF gdSelected IN State
Then Begin
.................................
End;
Зачем мне это нужно знать при перерисовке?
Германн (2007-12-07 00:39:00) [12]
> smartleds (07.12.07 00:25) [5]
>
> Я почему спрашиваю. Вот я сделал таблицу , раскрасил красным
> цветом одну ячейку. Как только я кликаю мышкой на любое
> место этой таблицы у меня раскрашенная ячейка становится
> как все белой не раскрашеной.
> Вот я и думаю чтобы ее опять раскрасить я в событии StringGrid1Click
> , буду вызывать события прорисовки таблицы OnDrawCell.
>
Блин! Так ты статью прочитал? Или только сделал вид?
Всю прорисовкунужно реализовать в обработчике событияOnDrawCell. Для этого сей обработчик и предназначен.
{RASkov} (2007-12-07 00:34:00) [13]> [5] smartleds (07.12.07 00:25)
А лучше покажи как ты расскрасил одну ячейку, и в каком методе....
Вообщем давай подробнее.... а то что-то я боюсь, что мы о "разных вещах" говорим все тут....
{RASkov} (2007-12-07 00:32:00) [14]Во блин пока "нажимал ответ"....
> [5] smartleds (07.12.07 00:25)
>Зафиксировать никак. Но в OnDrawCell передается параметр State: TGridDrawState. Его можно и нужно учитывать при перерисовке.
{RASkov} (2007-12-07 00:30:00) [15]> [4] Германн © (07.12.07 00:17)
Что-то мне подсказывает, что этот Инвалидэйт найдет место в ОнДравКел в коде автора...
или на ОнКлик....
:о)
> smartleds
Лучше вместо вопросов [0,1], расскажи о своем желании.... т.е. твоей проблеме, только подробно но коротко, и главное понятно.... во как)
Подозреваю, что эта ветка - продолжение этой:
http://www.delphimaster.ru/cgi-bin/forum.pl?n=18&id=1196940482
тогда прочитай там пост №5 и внимательно посмотри хелп по "этому делу" или хотя бы примеры, коих по этому вопросу в инете навалом....
smartleds (2007-12-07 00:25:00) [16]Я почему спрашиваю. Вот я сделал таблицу , раскрасил красным цветом одну ячейку. Как только я кликаю мышкой на любое место этой таблицы у меня раскрашенная ячейка становится как все белой не раскрашеной.
Вот я и думаю чтобы ее опять раскрасить я в событии StringGrid1Click , буду вызывать события прорисовки таблицы OnDrawCell.
Германн (2007-12-07 00:17:00) [17]
> smartleds (06.12.07 22:44) [1]
>
> Или как мне самому вызвать процедуру TForm1.StringGrid1DrawCell?
>
>
Ну если уж приспичит перерисоваться самому (а такое иногда бывает), то для этого есть метод Invalidate.
{RASkov} (2007-12-06 23:55:00) [18]> [0] smartleds (06.12.07 22:30)
> когда при работе с StringGrid возникает событие OnDrawCell?
Когда ячейка становится Invalid для этой ячейки автоматом вызывается OnDrawCell,
например - "над гридом пронесли окно")
> [1] smartleds (06.12.07 22:44)
> Или как мне самому вызвать процедуру TForm1.StringGrid1DrawCell?
Нет надобности, т.е. не к чему это...
А вообще методы вызываются точно так же как и обычные процедуры <Имя(Параметры)>
boa_kaa (2007-12-06 23:21:00) [19]
> когда при работе с StringGrid возникает событие OnDrawCell?
При перерерисовке ячейки, когда же еще?
smartleds (2007-12-06 22:44:00) [20]Или как мне самому вызвать процедуру TForm1.StringGrid1DrawCell?