ListView に大量のデータを表示させようとすると、書き込みに時間がかかり処理速度が落ちる。ListView で大量のデータを表示したい場合は、仮想モードで使うほうがいい。
ListView を仮想モードで使う最小限の手順は以下の通り
以下に例を示す。この例を実行するには、フォームに ListView を貼り付け、ViewStyle プロパティを vsReport にセットし、カラムを2つ作成しておく。
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ComCtrls;
type
TDataRec = record
Name, Value: string;
end;
TDataRecArray = array[0..4] of TDataRec;
TForm1 = class(TForm)
ListView1: TListView;
procedure FormCreate(Sender: TObject);
procedure ListView1Data(Sender: TObject; Item: TListItem);
private
{ Private declarations }
FTestData: TDataRecArray;
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
FTestData[0].Name :='A';
FTestData[0].Value :='1st';
FTestData[1].Name :='B';
FTestData[1].Value :='2nd';
FTestData[2].Name :='C';
FTestData[2].Value :='3rd';
FTestData[3].Name :='D';
FTestData[3].Value :='4th';
FTestData[4].Name :='A';
FTestData[4].Value :='5th';
//表示するデータの数をItems.Countプロパティにセットする。
//これを設定しないとデータが表示されない。
ListView1.Items.Count := 5;
end;
procedure TForm1.ListView1Data(Sender: TObject; Item: TListItem);
begin
if Item.Index = -1 then
Exit;
Item.Caption := FTestData[Item.Index].Name;
Item.SubItems.Add(FTestData[Item.Index].Value);
end;
end.