Как изменить цвет фона строки 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);