Как я могу нарисовать все ячейки заголовка столбца TStringGrid разных цветов? - PullRequest
1 голос
/ 05 марта 2012

Я использую Lazarus 0.9.30.2.

У меня есть TForm, на котором есть TStringGrid.Заголовок каждого столбца является объектом TGridColumns, который я динамически добавлял в сетку во время выполнения.У каждого заголовка столбца есть связанный с ним объект (который я создал и сохранил в TList).Я хочу закрасить фон ячеек заголовка столбца сетки строк, но я не хочу, чтобы все ячейки были одного цвета.В зависимости от значения одного из свойств объекта, связанного с заголовком столбца, цвет будет отличаться.

Я знаю, что есть ответы относительно того, как рисовать ячейки TStringGrid в Stackoverflow ( пример ), в которых говорится об использовании события DrawCell для строковых сеток для рисования ячеек, но я не уверенкак вызвать эту процедуру.

Является ли правильный подход иметь другую процедуру, которая идентифицирует интересующую ячейку (т. Е. Идентифицирует свойство ячеек "Rect"), устанавливает желаемый цвет, который затем вызывает общую процедуру DrawCell сетки, чтобы сделатьактуальная расцветка?

1 Ответ

2 голосов
/ 05 марта 2012

Для этой цели есть лучшее событие: OnPrepareCanvas. Это событие вызывается всякий раз, когда ячейка готовится нарисовать себя, и на этом этапе вы можете изменить некоторые атрибуты холста, такие как цвет кисти для рисования фона. Так что вам нужно где-то хранить цвет:

type
  TTmColumnTitle = class(TTmObject)
  private
    FCellColor: TColor;
  public
    property CellColor: TColor read FCellColor write FCellColor;
  end;

И напишите обработчик для события OnPrepareCanvas:

procedure TForm1.StringGrid1PrepareCanvas(sender: TObject; aCol, aRow: Integer;
  aState: TGridDrawState);
var
  ColumnTitle: TTmColumnTitle;
begin
  if ARow = 0 then
  begin
    ColumnTitle := TTmColumnTitle(StringGrid1.Objects[ACol, ARow]);
    if Assigned(ColumnTitle) then
      StringGrid1.Canvas.Brush.Color := ColumnTitle.CellColor;
  end;
end;  

Инспектор объектов с OnPrepareCanvas показанным событием:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...