使用格式化单元格的 Firemonkey XE5 TGrid 滚动问题
Firemonkey XE5 TGrid scrolling issue using formatted cells
我正在使用 Delphi XE5 并尝试根据每个单元格的内容格式化 TGrid。对于数字,我希望它们在单元格中右对齐,负数以红色字体显示。所有其他数据应在单元格中左对齐。下面的代码实现了这个,除了当我向上或向下滚动网格 colour/alignment 出错时。
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 以应用格式的单元格。
因此您需要子class TTextCell(它本身只是子classes TEdit)并且您还需要一个新列class,它将创建新class.
当你理解它时,这一切比听起来简单得多。我在 http://monkeystyler.com/guide/Formatting-a-Column-as-Currency 上有一篇带有示例的文章,并且从那里链接了其他对您有用的文章。
我正在使用 Delphi XE5 并尝试根据每个单元格的内容格式化 TGrid。对于数字,我希望它们在单元格中右对齐,负数以红色字体显示。所有其他数据应在单元格中左对齐。下面的代码实现了这个,除了当我向上或向下滚动网格 colour/alignment 出错时。
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 以应用格式的单元格。
因此您需要子class TTextCell(它本身只是子classes TEdit)并且您还需要一个新列class,它将创建新class.
当你理解它时,这一切比听起来简单得多。我在 http://monkeystyler.com/guide/Formatting-a-Column-as-Currency 上有一篇带有示例的文章,并且从那里链接了其他对您有用的文章。