我想知道如何在 Firemonkey TGrid
/中更改整行的背景颜色TColumn
。看到一堆类似的问题,但没有一个对我有帮助。我正在使用德尔福 XE4。TGrid
可能包含TCheckColumn
和TStringColumn
。
问问题
2117 次
1 回答
0
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);
于 2014-02-28T18:48:30.607 回答