
[英]Removing objects, disable horizontal scrolling on TGrid (Delphi XE5 + iPad)
[英]Firemonkey XE5 TGrid scrolling issue using formatted cells
我正在使用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;
有人可以帮我解决这个问题吗? 我在该论坛上尝试了许多示例,但无法使它们正常工作,并且运行良好且确实存在问题。
非常感谢您的期待。
滚动FireMonkey网格时,单元将被回收。 新值通过SetData方法传递到单元格中。 因此,您需要一个自定义组件用作单元,该单元将覆盖SetData以应用格式。
因此,您需要将TTextCell子类化(它本身只是TEdit的子类),还需要一个新的列类来创建新类的单元格。
这比您理解时听起来要简单得多。 我在http://monkeystyler.com/guide/Formatting-a-Column-as-Currency上有一个带有示例的文章,从那里链接的其他文章也将对您有用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.