我通过此处发布的示例作为我的起点:Change background of TTextCell in a Firemonkey TGrid
我创建了一个引用图像的textcellstyle,这个效果很好。当我运行程序时,所有单元格都按预期显示背景图像。
从上面的链接中,Mike Sutton(我希望你能读到这篇文章,如果没有你的意见我们会做什么!)写道(这里重复一下只是为了让它变得更容易):
"然后,您可以设置每个单元格StyleLookup属性以使用它,或者将StyleName样式设置为TextCellStyle,以便为每个TTextCell自动拾取它。"
关于更改字体颜色(Delphi XE4 Firemonkey Grid Control - Styling cells individually)的查询后,还可以动态设置背景颜色吗?
我创建单元格的代码:
Constructor TFinancialCell.Create(AOwner:TComponent);
begin
inherited;
StyleLookup:='textcellstyle';
StyledSettings:=StyledSettings-[TStyledSetting.ssStyle,TStyledSetting.ssFontColor];
TextAlign:=TTextAlign.taTrailing;
end;
这会将我的图片成功应用于TFinancialCell。
但是,根据字体颜色查询,我希望图像背景仅在达到某个值或其他值时显示:
Procedure TFinancialCell.ApplyStyling;
begin
Font.Style:=[TFontStyle.fsItalic];
If IsNegative then
FontColor:=claRed
else
FontColor:=claGreen;
If IsImportant then Font.Style:=[TFontStyle.fsItalic,TFontStyle.fsBold];
If Assigned(Font.OnChanged) then
Font.OnChanged(Font);
Repaint;
end;
任何有关如何做到这一点的帮助将不胜感激。
答案 0 :(得分:0)
谢谢迈克。我不得不摆弄一下,但根据你的建议让它工作。 我在stylecontainer中为我的textcellstyle添加了一个TRectangle,如下所示:
textcellstyle : TLayout
background: TSubImage
rectangle1: TRectangle
rectanimation: TRectAnimation
在TFinancialCell.ApplyStyle中,我尝试了FindStyleResource('background'),但这总是返回nil。我将它改为FindStyleResource('rectangle1'),这很有效。这是因为它在对象检查器中查找相关的StyleName属性(显然默认为矩形1的'Rectangle1')?仍然没有看到树木的木材,我相信你可以告诉......
工作代码:
Procedure TFinancialCell.ApplyStyle;
var
T : TFMXObject;
begin
inherited;
T:=FindStyleResource('Rectangle1');
If (T<>nil) and (T is TRectangle) then
begin
If TRectangle(T).Fill<>nil then
begin
If IsNegative then
begin
TRectangle(T).Fill.Color:=claRed;
Repaint;
end;
end;
end;
ApplyStyling;
end;
作为一项单独的练习,我还尝试将上面的代码放在TFinancialCell.ApplyStyling中,它也在那里工作,所以不确定哪个是更好的选择,为什么?
到目前为止,我对这些风格的理解总结(请在必要时更正/评论):