В предыдущей статье «Разноцветные ячейки в DBGrid» я рассказывал о том, как раскрасить отдельные ячейки DBGrid в разные цвета в зависимости от значений, содержащихся в этих ячейках. Это удобно в том случае, когда нужно визуально проанализировать какие-то показатели. Давайте теперь посмотрим, как еще можно улучшить внешний вид таблицы, созданной объектом DBGrid.
Посмотрим для начала как можно изменить цвет фона сетки и цвет шрифта. Для это можно воспользоваться установкой свойств в окне свойств объектов или использовать событие onDrawColumnCell объекта DBGrid. Преимущество использования последнего заключается в том, что здесь мы можем менять цвета программно в режиме выполнения.
procedure TfrmTeacher.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); begin TDBGrid(Sender).Canvas.Brush.Color:=$000A6A04; TDBGrid(Sender).Canvas.Font.Color := clYellow; // Перерисовываем DBGrid TDBGrid(Sender).DefaultDrawColumnCell(Rect,DataCol,Column,State); end;
Вместо прямого указания имени DBGrid мы используем TDBGrid (Sender). Такой вариант является более профессиональным. Это дает возможность всегда ссылаться на тот объект, который вызвал данное событие.
Далее мы используем объект Canvas и его свойства Brush (Фон) и Font (Шрифт). В результате чего должна получиться такая таблица:
Давайте теперь к этому примеру добавим выделение строки, в которой находится курсор другим цветом. По умолчанию текущая строка выделяется маленьким треугольником слева. Но мы можем сделать так, чтобы вся строка выделялась другим цветом. Для этого перед объявлением класса формы следует объявить тип TPeekAtCustomDBGrid = class (TCustomDBGrid). О том, как это сделать показано в статье «Разноцветные ячейки DBGrib»
Type TPeekAtCustomDBGrid = class(TCustomDBGrid); ... procedure TfrmAnaliz.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); begin with TPeekAtCustomDBGrid(Sender) do begin if DataLink.ActiveRecord = Row - 1 then begin Canvas.Brush.Color := clBlue;//Цвет фона сетки текущей строки Canvas.Font.Color := clWhite;//Цвет шрифта текущей строки end else TDBGrid(Sender).Canvas.Brush.Color:=$000A6A04; TDBGrid(Sender).Canvas.Font.Color := clYellow; end; // Перерисовываем DBGrid TDBGrid(Sender).DefaultDrawColumnCell(Rect,DataCol,Column,State); end;
В результате получится такая таблица:
Теперь давайте сделаем так, чтобы цвет строк DBGrib чередовался. Для этого в диспетчере свойств в режиме разработки или программно на этапе выполнения, как описано выше нужно задать основной цвет ячеек сетки. А после этого раскрасить только, допустим, нечетные строки. Перерисовку DBGrid можно делать один раз в конце процедуры.
// Красим нечетные строки if TDBGrid(Sender).DataSource.DataSet.RecNo mod 2 = 1 then TDBGrid(Sender).Canvas.Brush.Color:=clGradientInactiveCaption; // Восстанавливаем выделение текущей позиции курсора if gdSelected in State then begin TDBGrid(Sender).Canvas.Brush.Color:= clHighLight; TDBGrid(Sender).Canvas.Font.Color := clHighLightText; end; // Перерисовываем DBGrid TDBGrid(Sender).DefaultDrawColumnCell(Rect,DataCol,Column,State);
Результат чередования цветовой гаммы строк будет выглядеть следующим образом:
Естественно, что все цвета можно менять по своему усмотрению.
Одна из интересных возможностей заключается в том, что можно убрать шапку и боковой маркер. Для этого следует в конструкторе форм выбрать нужный DBGrid и раскрыть его свойство Options.
Это достаточно интересное свойство. Рассмотрим некоторые из них:
dgEditing | Свойство позволяет разрешить или запретить редактирование в объекте DBGrid. Это не тот запрет на редактирование, который мы получаем через логическое свойство readonly. В случае с dbEditing вы не сможете выделять именно ячейки для редактирования. Это очень удобно, если вы хотите придать более эстетический вид таблице, которая должна только показывать результирующие значения, но не служить средством ввода данных. Попробуйте включить и выключить это свойство |
dgTitles | Это свойство как раз показывает или убирает заголовок таблицы. Убрав заголовок вы можете установить свой, например с помощью объекта TLabel |
dgIndicator | Данное свойство позволяет убрать индикатор в виде треугольника слева и его боковую панель. Например, если вы выделяете строку другим цветом, как было показано выше и не хотите использовать классический стиль оформления таблицы, вы можете убрать индикатор |
dgColLines | Показывает или убирает разделитель столбцов сетки |
dgRowLines | Показывает или убирает разделитель строк сетки |
dgMultiSelect | Позволяет сделать множественный выбор строк в таблице |
В следующей статье мы рассмотрим еще один прием оформления dbGrid, который может быть удобным для анализа результата запроса или просмотра содержимого таблицы.