Как улучшить внешний вид DBGrid

Как улучшить внешний вид DBGrid

В предыдущей статье «Разноцветные ячейки в 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, который может быть удобным для анализа результата запроса или просмотра содержимого таблицы.

Понравилась статья? Поделиться с друзьями:
Блог Алексея Иванкова
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: