【问题标题】:Firemonkey XE5 TGrid scrolling issue using formatted cells使用格式化单元格的 Firemonkey XE5 TGrid 滚动问题
【发布时间】:2015-01-14 19:57:27
【问题描述】:

我正在使用 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;

有人可以帮我解决这个问题吗?我在这个论坛上尝试了许多示例,但无法让它们正常工作,而且我真的被卡住了。

非常感谢期待。

【问题讨论】:

    标签: delphi scroll cell firemonkey tgrid


    【解决方案1】:

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

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

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

    【讨论】:

    • 谢谢迈克。我以为我的代码至少朝着正确的方向前进,但似乎不是!
    猜你喜欢
    • 1970-01-01
    • 2021-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-27
    • 2020-02-14
    相关资源
    最近更新 更多