0

我将此处发布的示例作为我的起点:Change background of TTextCell in a Firemonkey TGrid

我创建了一个引用图像的 textcellstyle,并且效果很好。当我运行程序时,所有单元格都按预期显示背景图像。

从上面的链接,迈克萨顿(我希望你正在阅读这篇文章,如果没有你的输入,我们会怎么做!)写道(在这里重复只是为了更容易):

“然后,您可以设置每个单元格的 StyleLookup 属性以使用它,或者将样式 StyleName 设置为 TextCellStyle 以便为每个 TTextCell 自动拾取它。”

继关于更改字体颜色的查询(Delphi XE4 Firemonkey Grid Control - Styling cells individual)之后,也可以动态设置背景颜色吗?

我创建单元格的代码:

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;

任何有关如何执行此操作的帮助将不胜感激。

4

1 回答 1

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 中,它也在那里工作,所以不确定哪个是更好的选择,为什么?

到目前为止我对这些风格的理解总结是(请根据需要更正/评论):

  1. 我创建了一个名为 textcellstyle 的样式,我在 TFinancialCell.Create 中将其应用于我的 TFinancialCell 类 [StyleLookup:='textcellstyle']。
  2. 当我调用 TFinancialCell.ApplyStyling 时,我可以直接访问 TFinancialCell 的 Font 和 FontColor 属性,因为这些属性是 TTextCell 的属性。
  3. 如果我想绘制单元格的背景,我必须显式调用我手动添加到 textcellstyle 'style' 的 TRectangle 组件,然后从那里访问 Fill 等属性。
于 2013-05-16T13:34:27.603 回答