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

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

Коллеги , когда при работе с 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?


Наверх

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