Copyright © 2010 Promsite. All Rights Reserved.
TStringGrid, часть II
Автор Деймон Чандлер перевод Виктор Алексеев aka prom
Управление процессом рендеринга
Одним из недостатков при установке значения свойства DefaultDrawing в false является то, что появляется много ручной работы по сравнению с тем, как если бы оно стояло в true. Однако преимущество проявляется в полном управлении выбранной ячейкой. Если у вас возникают опасения, как изменять фиксированные ячейки, то не стоит беспокоиться. Функция Frame3D() библиотеки VCL делает эту задачу тривиальной (описано в EXTCTRLS.HPP). Всё, что вам нужно сделать для этого - положиться на процесс прорисовки согласно информации в параметре State. Далее обработчик события OnDrawCell демонстрирует, как сделать грид "нормальным" когда DefaultDrawing установлено в false:
Есть несколько условий для проверки, что свойство Option содержит флаг goRowSelect. Тем не менее, мы написали 40 строк кода только для того, чтобы строка грида выглядела нормально. Какой в этом смысл? Пока свойство DefaultDrawing установлено в false, можно быть уверенным, что классы TCustomGrid и TSringGrid не будут прорисовывать ничего, что вы бы не хотели. В качестве бонуса, вы получаете полный контроль над ячейкой. Главным же конечно является эффективность.
Используя, событие OnDrawCell, можно изменить способ прорисовки каждой ячейки, который был определен в параметрах ACol, ARow, State. Например, можно использовать следующий подход для изменения внешнего вида выделенных ячеек и изменения фона невыделенных ячеек. Результат показан на Figure A: