Delphi FireUI';s TStringGrid-在绘制时设置值

Delphi FireUI';s TStringGrid-在绘制时设置值,delphi,firemonkey,Delphi,Firemonkey,我使用Delphi XE7的FireMonkey TStringGrid使它可以容纳一百万行。用数百万字符串填充TStringGrid的内容会消耗太多内存 绘制单元格时如何设置单元格的值? 当单元格滚动到视图中时,我的代码将从一个巨大的临时文件中填充单元格的内容 我的应用程序的旧版本中的TurboPower Orpheus TOvcTable组件通过一个名为OnGetCellData()的钩子实现了这一点。我在FireUI的TStringGrid中没有看到类似的内容。而不是TStringGrid

我使用Delphi XE7的FireMonkey TStringGrid使它可以容纳一百万行。用数百万字符串填充TStringGrid的内容会消耗太多内存

绘制单元格时如何设置单元格的值?

当单元格滚动到视图中时,我的代码将从一个巨大的临时文件中填充单元格的内容


我的应用程序的旧版本中的TurboPower Orpheus TOvcTable组件通过一个名为OnGetCellData()的钩子实现了这一点。我在FireUI的TStringGrid中没有看到类似的内容。

而不是
TStringGrid
TGrid
TColumn
列一起使用。然后使用
OnGetValue
事件获取要在网格中显示的值。这最接近于
VCL
s
TDrawGrid

procedure TForm1.Grid1GetValue(Sender: TObject; const Col, Row: Integer;
  var Value: TValue);
begin
  Value := inttostr(col)+', '+inttostr(row);
end;
1000万行网格的示例结果:


使用
TGrid
TColumn
列代替
TStringGrid
。然后使用
OnGetValue
事件获取要在网格中显示的值。这最接近于
VCL
s
TDrawGrid

procedure TForm1.Grid1GetValue(Sender: TObject; const Col, Row: Integer;
  var Value: TValue);
begin
  Value := inttostr(col)+', '+inttostr(row);
end;
1000万行网格的示例结果:


指定对象的事件方法
TOnGetValue=procedure(发送方:TObject;const-Col,Row:Integer;var-Value:System.Rtti.TValue)工作?我认为TColumn中有一个OnBeforeDrawing事件,可以重写它,您可以使用它动态提供内容。您可以检查FMS.Grid以查看哪些方法可以重写或挂钩。@LURD OnGetValue没有为TStringGrid公开,文档说明在检索值时会调用它。我想如果它是在为绘图检索值之前调用的,那么它就会工作。@JohnKouraklis我找不到关于OnBeforeDrawing的任何文档。我想我可以连接到OnPaint或OnPaint,但即使在那里,我也会设置一些值,随着时间的推移,当用户在数百万个绘制的单元格中滚动时,这些值会消耗内存。@MikeatBookup,我认为没有文档记录。您将在FMX.Grid单元中找到它,但您需要对TColumn进行子类化以利用它;然后将新类添加到网格中。是的,您可以使用OnPaint/Paint事件。是否分配对象的事件方法
TOnGetValue=procedure(发送方:TObject;const-Col,Row:Integer;var-Value:System.Rtti.TValue)工作?我认为TColumn中有一个OnBeforeDrawing事件,可以重写它,您可以使用它动态提供内容。您可以检查FMS.Grid以查看哪些方法可以重写或挂钩。@LURD OnGetValue没有为TStringGrid公开,文档说明在检索值时会调用它。我想如果它是在为绘图检索值之前调用的,那么它就会工作。@JohnKouraklis我找不到关于OnBeforeDrawing的任何文档。我想我可以连接到OnPaint或OnPaint,但即使在那里,我也会设置一些值,随着时间的推移,当用户在数百万个绘制的单元格中滚动时,这些值会消耗内存。@MikeatBookup,我认为没有文档记录。您将在FMX.Grid单元中找到它,但您需要对TColumn进行子类化以利用它;然后将新类添加到网格中。是,您可以使用OnPaint/Paint事件。