Как изменить цвет фона строки FMX.TGrid в зависимости от значения в XE4

Я хотел бы знать, как изменить цвет фона всей строки в Firemonkey TGrid/TColumn, Видел кучу похожих вопросов, но ни один из них мне не помог. Я использую Delphi XE4. TGrid может содержать TCheckColumn а также TStringColumn,

1 ответ

Цвет фона стиля строки TGrid разделен на две категории:

  • Цвет фокуса
  • Выбор цвета

Цвет фокуса относится к сфокусированной ячейке. Выбор цвета применяется к выбранной строке.

Изменение цвета фокуса - это простой процесс:

procedure ChangeGridCellFocusColor(Grid: FMX.Grid.TGrid; NewColor: TAlphaColor);
var
  T: TFmxObject;
begin
  T := Grid.FindStyleResource('focus');
  if (T <> nil) and (T is TRectangle) then
    if TRectangle(T).Fill <> nil then
      TRectangle(T).Fill.Color := NewColor;
  Grid.Repaint;
end;

Вы применяете это так:

ChangeGridCellFocusColor(MyGrid1, TAlphaColors.Red);

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


Было бы разумно предположить, что цвет выделения может быть изменен таким же образом, но это не так.

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

Чтобы изменить цвет выделения строки, сделайте следующее:

Interface

type
  TcustomGridHelper = class helper for FMX.Grid.TCustomGrid
  public
    function getSelections: TControlList;
  end;

{...}

Implementation

function TcustomGridHelper.getSelections: TControlList;
begin
  Result := Self.fSelections;
end;


procedure ChangeGridRowSelectionColor(Grid: FMX.Grid.TGrid;
  NewColor: TAlphaColor);
var
  aList: TControlList;
  Control: TControl;
begin
  aList := Grid.getSelections;
  if (aList <> nil) then
    for Control in aList do
      TRectangle(Control).Fill.Color := NewColor;
  Grid.Repaint;
end;

Вы применяете это так:

ChangeGridRowSelectionColor(MyGrid1, TalphaColors.Green);
Другие вопросы по тегам