我正在使用Delphi XE5,并试图根据每个单元格的内容来格式化TGrid。 对于数字,我希望它们在单元格中右对齐,负号以红色字体显示。 所有其他数据应在单元格中左对齐。 当我向上或向下滚动网格时,以下代码实现了此功能,即颜色/对齐方式出错。

type
  TMyColumn = class( TStringColumn )
end;

procedure TForm1.Grid1GetValue(Sender: TObject; const Col, Row: Integer;
  var Value: TValue);
var
  vMyCell : TStyledControl;
  i : Integer;
  s : String;
begin

  s := gHoldingGrid.Cells[ Col, Row ];

  vMyCell := TMyColumn( Grid1.Columns[ Col ] ).CellControlByRow( Row );

  if ( ( vMyCell <> nil ) AND ( vMyCell is TTextCell ) )
  then begin
    TTextCell( vMyCell ).StyledSettings := [];

    if TryStrToInt( s, i )
    then begin
      if StrToInt( s ) < 0
      then TTextCell( vMyCell ).FontColor := claRed
      else TTextCell( vMyCell ).FontColor := claBlue;

      TTextCell( vMyCell ).TextAlign := TTextAlign.taTrailing;
    end  { if TryStrToInt( s, i ) }
    else begin
      TTextCell( vMyCell ).TextAlign := TTextAlign.taLeading;
      TTextCell( vMyCell ).FontColor := claGreen;
    end;  { else .... if TryStrToInt( s, i ) }

    vMyCell.ApplyStyleLookup;
  end;  { if ( ( vMyCell <> nil ) AND ( vMyCell is TTextCell ) ) }

  Value := s;

end;

有人可以帮我解决这个问题吗? 我在该论坛上尝试了许多示例,但无法使它们正常工作,并且运行良好且确实存在问题。

非常感谢您的期待。

#1楼 票数:0 已采纳

滚动FireMonkey网格时,单元将被回收。 新值通过SetData方法传递到单元格中。 因此,您需要一个自定义组件用作单元,该单元将覆盖SetData以应用格式。

因此,您需要将TTextCell子类化(它本身只是TEdit的子类),还需要一个新的列类来创建新类的单元格。

这比您理解时听起来要简单得多。 我在http://monkeystyler.com/guide/Formatting-a-Column-as-Currency上有一个带有示例的文章,从那里链接的其他文章也将对您有用。

  ask by Ian Francis translate from so

未解决问题?本站智能推荐:

1回复

如何在C ++ Builder或Delphi中将数据输入TGrid单元格

我在向TGrid单元格输入一些数据时遇到了一些困难,有人可以给我一些代码示例以及如何将数据插入TGrid单元格的注释吗? 更准确地说,当我使用StringGrid时,我可以使用C ++ Builder 这将在第一行的第二列的单元格中插入“hello world”消息。 我怎样才能对T
2回复

如何在 TGrid 的单元格中渲染 TBitmap 图像?

我正在TGrid呈现数据库表的内容,效果很好。 现在我想在每一行上显示一个垃圾桶的图像作为删除该行的按钮。 如何才能做到这一点?
1回复

Firemonkey:设置tGrid或替代的Grid / List组件的样式(虚拟)

我试图基于FireMonkey创建我的第一个应用程序,但是遇到了麻烦。 我可以找到的唯一虚拟列表控件是tGrid。 这个组件非常好,但是我不知道如何扩展或定制它。 我知道有tCheckbox列,tImage列等,但是如果我需要ButtonColumn或类似的东西怎么办? 我也想根
1回复

如何更改FMX.TGrid行的背景颜色取决于XE4中的值

我想知道如何在Firemonkey TGrid / TColumn更改整行的背景颜色。 看到一堆类似的问题,但没有一个帮助我。 我正在使用Delphi XE4。 TGrid可能包含TCheckColumn和TStringColumn 。
2回复

删除对象,在TGrid上禁用水平滚动(Delphi XE5 + iPad)

我目前正在iPad应用程序上工作,该应用程序使用带有动态创建内容的TGrid。 但这给我带来了一些问题:由于某种原因,我无法释放和释放添加到TGrid的对象(再次删除它们)。 在Windows中,FreeAndNil可以解决此问题,但是FreeAndNil在Mac Simulator或i
3回复

如何使用Delphi XE7更改stringgrid特定单元格的颜色

我正在使用Delphi XE7开发Android应用程序。 在我已经使用TStringGrid组件,然后我已经使用StringGrid.cells[0, 0] := 'Test'和如何我可以改变我在代码已经表明,特定小区的字体颜色。 我也有此示例代码,但无法更改特定单元格的字体颜色。 请任
1回复

如何在与LiveBindings和数据集一起使用时使TProgressColumn工作

我的目标是拥有一个包含多个列的TGrid,通过LiveBindings连接到TClientDataSet。 其中一列是TProgressColumn类型。 网格显示数据,但进度条列不显示任何内容(即0%进度)。 TProgressColumn连接到ftInteger类型的字段。
1回复

fmx delphi berlin如何更改Tgrid行中的字体颜色

需要帮助..我正在使用delphi 10.1柏林。 与其他先前版本的Embarcadero Delphy Code Gear有所不同。 我需要更改TGrid行中的字体颜色。 下一个代码我将更改背景色,但我只需要更改字体颜色: