![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Событие 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.