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

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

Событие OnDrawCell у TStringGrid [D5, Win95/98, WinME, NT4, Win2k, WinXP]


QuickFinder ©   (2006-05-09 01:52:00) 

Как часто генерируется данное событие?
Дело в том, что в обработке события OnDrawCell я пишу текст в ячейках - на основе данных, которые динамически меняются.


Юрий Зотов   (2006-05-11 11:47:00) [1]

> Anatoly Podgoretsky ©   (11.05.06 09:52) [11]

Вот именно - должен, но не обязан. С точки зрения грамотного проектирования разделение функций, конечно, приветствуется (особенно, когда возможны потомки класса - объявляем методы виртуальными или динамическими и получаем гибкость) - но не столь же категорично?

> ЮЮ ©   (11.05.06 09:55) [12]
> А его ты мы и намеряны изменить в OnDrawCell.

Не обязательно именно его.

В вопросе сказано "я пишу текст в ячейках - на основе данных, которые динамически меняются". Такими данными могут быть, например, цвета, шрифт, какие-то иконки, отступы... в общем, любые атрибуты текста - но совершенно не обязательно сам текст.

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


ЮЮ   (2006-05-11 09:57:00) [2]

Это все равно, что в вычислимом поле, например использовать состояние чекбокса на форме и надеяться на перевычисление поля после изменения состояния чекбокса.


ЮЮ   (2006-05-11 09:55:00) [3]

>Почему?

Что заставляет перерисовываться ячеку StringGrid-а (перерекрытие другими окнами и изменение выделения ячейки нe в счет, ибо мы хотим реакции на программные вычисления, а не действия пользователя) и выполнить OnDrawCell? Изменение Cell . А его ты мы и намеряны изменить в OnDrawCell.


Anatoly Podgoretsky   (2006-05-11 09:52:00) [4]

Юрий Зотов ©   (11.05.06 09:37) [10]
Для разделения функций. Конечно не запрещено, но лучше отображение отделять от логики. Вроде и ты сам за подобное не раз ратовал. Правда не стоило так категорично - должны. Просто вспомним русскую поговорку, должен, но не обязан.


Юрий Зотов   (2006-05-11 09:37:00) [5]

> ЮЮ ©   (11.05.06 02:58) [9]

> В OnDrawCell они должны только перерисовываться, а не вычисляться.

?????????
Почему?


ЮЮ   (2006-05-11 02:58:00) [6]


> в обработке события OnDrawCell я пишу текст в ячейках -
> на основе данных, которые динамически меняются


В OnDrawCell они должны только перерисовываться, а не вычисляться. Перерасчеты вынеси в отдельный метод и вызывай когда надо, хоть в таймере. И вот когда изменится Cell[i, j] тогда и произойдет OnDrawCell


Leonid Troyanovsky   (2006-05-10 21:05:00) [7]


> Германн ©   (10.05.06 02:18) [7]

> > Что-то ты недоговариваешь.

> Код в студию! Сорри за "избитое выражение". :(


Кто кого должен sorry - в студию.
Извините за выражение.

--
Regards, LVT.


Германн   (2006-05-10 02:18:00) [8]


> Leonid Troyanovsky ©   (10.05.06 00:07) [6]
>
>
> > QuickFinder   (09.05.06 21:23) [4]
>
> > Invalidate тоже не помогает. Грид не обновляется, пока
> не
>
>
> Что-то ты недоговариваешь.
>
> --
> Regards, LVT.
>

Код в студию! Сорри за "избитое выражение". :(


Leonid Troyanovsky   (2006-05-10 00:07:00) [9]


> QuickFinder   (09.05.06 21:23) [4]

> Invalidate тоже не помогает. Грид не обновляется, пока не


Что-то ты недоговариваешь.

--
Regards, LVT.


KilkennyCat   (2006-05-09 21:38:00) [10]

Вызвать OnDrawCell


QuickFinder   (2006-05-09 21:23:00) [11]

Invalidate тоже не помогает. Грид не обновляется, пока не переключиться и вернуться в исходное приложение.


Leonid Troyanovsky   (2006-05-09 20:29:00) [12]


> QuickFinder   (09.05.06 20:26) [2]

> Как решить проблему?


Invalidate.
Хотя, конечно, это без большой разницы.

--
Regards, LVT.


QuickFinder   (2006-05-09 20:26:00) [13]

Repaint не помогает, грид не обновляется.
Пока не переключишься на другое приложение и не вернешься обратно, значения в ячейках старые и необновленные.

Как решить проблему?


Плохиш   (2006-05-09 01:57:00) [14]


> QuickFinder   (09.05.06 01:52)  
> Как часто генерируется данное событие?

Тогда, когда система посчитает, что грид нужно перерисовать, например, если часть грида была закрыта другим окном.
Попросить систему о перерисовке грида можно вызовом метода Repaint.


Наверх

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