Space Base Space Base
+7 928 008-80-89
ru
  • en
  • es
  • Главная
  • Услуги
  • Портфолио
  • Библиотека
  • Контакты
  • Главная
  • Услуги
  • Портфолио
  • Библиотека
  • Контакты
  1. Библиотека
  2. Delphi
  3. Изменение цвета ячеек Delphi Stringgrid
logo

Изменение цвета ячеек Delphi Stringgrid

19.11.2014

В основном компонент Stringgrid, используется для вывода строковой информации в свои ячейки. Но при написании программ очень часто возникает желание сделать их более удобными, выделяя отдельные столбцы, строки или области ячеек разными цветами илидобавлением рисунков в ячейки StringGrid. Средствами инспектора объектов эту задачу не выполнить. Отдельной формы настроек для этого, в компоненте тоже не предусмотрено.

Однако, эта задача легко разрешается программно. Для этого используется событие компонента OnDrawCell, срабатывающее при отрисовке каждой отдельной ячейки таблицы. Таким образом, если использовать свои условия назначения того или иного цвета, можно «раскрасить» таблицу, нужным образом.

Для этого в установленном компонент Stringgridназначаем событие OnDrawCell. В созданную процедуру добавляем следующий код, назначающий цвет ячейки и цвет шрифта текста, а так же отрисовывающий их:

procedure TForm1.MyStringGridDrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState);
begin
    MyStringGrid.Canvas.Brush.Color := clBlue; // назначение цвета ячейки
    MyStringGrid.Canvas.FillRect(Rect); // закрашивание ячейки выбранным цветом
    MyStringGrid.Canvas.Font.Color := clWhite; // назначение цвета шрифта
    MyStringGrid.Canvas.TextOut(Rect.Left, Rect.Top, MyStringGrid.Cells[ACol, ARow]); // отрисовка текста в ячейки выбранным
end;

Данный код закрасит все ячейки одним цветом.

Для выделения отдельных строк, столбцов или ячеек, следует пользоваться условиями:

procedure TForm1.MyStringGridDrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState);
begin
  if (ACol > 0) and (ARow > 0) then begin // первый столбец и строку оставляем без изменений
      if (ACol = 1) or (ACol = 3) then
          MyStringGrid.Canvas.Brush.Color:=clBlue; // второй и четвертый столбец синим цветом

      if (ACol = 2) or (ACol = 4) then
          MyStringGrid.Canvas.Brush.Color:=clGreen; // третий и пятый - зеленым

      if ARow = MyStringGrid.RowCount-1 then
          MyStringGrid.Canvas.Brush.Color:=clRed; // последняя строка - красным

      if gdFocused in State then
          MyStringGrid.Canvas.Brush.Color:=clYellow; // текущая выделенная ячейка закрашивается желтым

      MyStringGrid.Canvas.FillRect(Rect);
      MyStringGrid.Canvas.Font.Color := clWhite;
      MyStringGrid.Canvas.TextOut(Rect.Left, Rect.Top, MyStringGrid.Cells[ACol, ARow]);
   end;
end;

В результате получим таблицу, ячейки которой будут иметь разные цвета. Следует отметить, что последовательность условий в данном случае перекрывает назначение цвета колонок последней строкой, поэтому она получается одного цвета.

Рисунок: «Раскрашенный» StringGrid

Если есть необходимость изменить цвет фиксированных ячеек, иногда может быть не удобно использовать условия проверки номеров строк и столбцов. Это может быть в случае, если фиксированными будут несколько строк или столбцов. Здесь стоит воспользоваться иным условием, проверяющим именно параметр фиксированности ячейки:

procedure TForm1.MyStringGridDrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState);
begin
   if gdFixed in State then
      MyStringGrid.Canvas.Brush.Color:=clBlue;
   MyStringGrid.Canvas.FillRect(Rect);
   MyStringGrid.Canvas.Font.Color := clWhite;
   MyStringGrid.Canvas.TextOut(Rect.Left, Rect.Top, MyStringGrid.Cells[ACol, ARow]);
end;

Аналогично можно выделить сразу всю строку:

procedure TForm1.MyStringGridDrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState);
begin
    if gdSelected in State then
        MyStringGrid.Canvas.Brush.Color:=clBlue;
    MyStringGrid.Canvas.FillRect(Rect);
    MyStringGrid.Canvas.Font.Color := clWhite;
    MyStringGrid.Canvas.TextOut(Rect.Left, Rect.Top, MyStringGrid.Cells[ACol, ARow]);
end;

Другие материалы:

Изменение цвета ячеек Delphi Stringgrid


Закрытие формы нажатием Escape в Delphi


Копирование, перемещение и переименование папки в Delphi


Написать комментарий

Комментарии

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


коммент.

Разработка сайтов

Корпоративный сайт
Интернет-магазин
Лендинг - одностраничный сайт
Сайт-визитка
Сайт-портфолио

Проектирование

Прототип, UX-дизайн

Дизайн

UI-дизайн
Логотип

+54 911 2801-4950

info@space-base.net
+7 928 008-80-89

Web-сайты для успешного бизнеса

Web-сайты для успешного бизнеса

Главная Услуги Портфолио События Библиотека Контакты
+7 928 008-80-89 Меню
Политика в отношении обработки персональных данных © Copyright 2014 - | Space-Base

Лучшее время начать свой проект - Сейчас!

Выбраны опции:

Отправить сообщение на:

Telegram WhatsApp

Отправляя сообщение, вы даете свое согласие на
обработку песональных данных