在运行时XE4更改TTextCell背景颜色

时间:2013-05-14 10:12:11

标签: delphi colors grid firemonkey

我通过此处发布的示例作为我的起点: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;

任何有关如何做到这一点的帮助将不胜感激。

1 个答案:

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

到目前为止,我对这些风格的理解总结(请在必要时更正/评论):

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