我以 TGrid 列中的单元格为例。组件选项中没有颜色属性。颜色只能通过代码访问。代码必须放在 Draw Column Cell 事件中,但它是什么代码呢?我尝试使用与 VCL 组件中相同的过程,但 FMX 中的 Tcanvas 不包含画笔属性。网站上的其他类似问题仅提供有关如何处理颜色的推测。
是否有人成功更改了单元格(或其他组件)中的背景颜色?
该FMX框架提供了几种方法来更改TGrid. 下面给出了两种方法,交替行颜色和每个单元格的颜色。
交替行颜色,可选择使用样式
这在TGrid.Options名为的属性中作为可预设的布尔项存在AlternateRowBackground。默认颜色是浅灰色 ($FFEEEEEE)。要更改此颜色,您可以添加TStyleBook或右键单击网格并选择Edit Custom Style ...或Edit Default Style ...然后更改 的Color属性gridstyle - alternatingrowbackground。这是颜色更改为 的示例Bisque:
OnDrawColumnCell事件中的代码
这甚至为网格的每个单元格调用,并提供对绘制单元格背景的完全控制。事件处理程序的标题如下所示:
procedure TForm11.Grid1DrawColumnCell(Sender: TObject; const Canvas: TCanvas;
const Column: TColumn; const Bounds: TRectF; const Row: Integer;
const Value: TValue; const State: TGridDrawStates);
Run Code Online (Sandbox Code Playgroud)
对于绘画,我们需要一个TBrush,因此我们将其声明为局部变量:
var
bgBrush: TBrush;
Run Code Online (Sandbox Code Playgroud)
我们现在准备应用一些特殊背景绘制的场景。首先是如何让默认绘图发生某些单元格状态。
if (TGridDrawState.Selected in State) or
(TGridDrawState.Focused in State) then
begin
Grid1.DefaultDrawColumnCell(Canvas, Column, Bounds, Row, Value, State);
Exit;
end;
Run Code Online (Sandbox Code Playgroud)
对于以下内容,我们将需要TBrush,因此我们创建它并管理其生命周期(在 Windows 平台上):
bgBrush:= TBrush.Create(TBrushKind.Solid, TAlphaColors.White); // default white color
try
//
// following code snippets go in here
//
finally
bgBrush.Free;
end;
Run Code Online (Sandbox Code Playgroud)
接下来,不使用样式绘制交替行背景的示例
if Odd(Row) then
bgBrush.Color := TAlphaColors.MoneyGreen+$202020; // a very light green color
Canvas.FillRect(Bounds, 0, 0, [], 1, bgBrush);
Run Code Online (Sandbox Code Playgroud)
然后是给定列的背景颜色示例
case Column.Index of
0: bgBrush.Color := TAlphaColors.lightBlue;
1: bgBrush.Color := TAlphaColors.MoneyGreen;
end;
Canvas.FillRect(Bounds, 0, 0, [], 1, bgBrush);
Run Code Online (Sandbox Code Playgroud)
最后是一个由数据值决定的背景颜色的例子
if Column.Index = 1 then
if Value.AsOrdinal < 0 then // negative
bgBrush.Color := TAlphaColors.Lightpink
else
bgBrush.Color := TAlphaColors.MoneyGreen;
Canvas.FillRect(Bounds, 0, 0, [], 1, bgBrush);
Run Code Online (Sandbox Code Playgroud)
和一个示例图像:
文本的颜色与此答案相同