2016-04-07 4 views
1

私のDelphi XE7のFireMonkey TStringGridを使用すると、100万行もあります。数百万の文字列でTStringGridの内容を取り込むと、メモリが大量に消費されます。FireUIのTStringGrid - 塗りつぶしたままの値を設定します

どのように塗りつぶされたセルの値を設定しますか?

私のコードでは、セルがスクロールして表示されるため、巨大な一時ファイルからセルの内容が入力されます。

レガシーバージョンのTurboPower Orpheus TOvcTableコンポーネントは、OnGetCellData()というフックでこれを行いました。私はFireUIのTStringGridのようなものは見ません。

+0

は([FMX.Grid.TCustomGrid.OnGetValue]割り当てないhttp://docwiki.embarcadero.com/Libraries/enオブジェクトの 'TOnGetValue = procedure(送信者:TObject; const Col、行:整数、var値:System.Rtti.TValue) –

+0

TColumnには、オーバーライドできるOnBeforeDrawingイベントがあり、それを使用してオンザフライでコンテンツを供給することができます。 FMS.Gridをチェックすると、オーバーライドまたはフックできるメソッドを確認できます。 –

+0

@LURD OnGetValueはTStringGridには公開されておらず、ドキュメントでは値が取得されたときに呼び出されると書かれています。私は値が描画のために取得される前に呼び出された場合、それが動作すると思います。 –

答えて

4

TStringGridの代わりにTGridTColumnの列を使用してください。次に、OnGetValueイベントを使用して、グリッドに表示する値を取得します。これはVCLTDrawGridに最も近い値です。 10 MIO行のグリッドの

procedure TForm1.Grid1GetValue(Sender: TObject; const Col, Row: Integer; 
    var Value: TValue); 
begin 
    Value := inttostr(col)+', '+inttostr(row); 
end; 

サンプル結果:enter image description here