ListViewを仮想モードで使う

ListView に大量のデータを表示させようとすると、書き込みに時間がかかり処理速度が落ちる。ListView で大量のデータを表示したい場合は、仮想モードで使うほうがいい。

ListView を仮想モードで使う最小限の手順は以下の通り

  1. データを保持するデータ構造を用意する。
  2. OwerData プロパティを True にセット。
  3. OnData イベントで表示するデータをセット。
  4. 表示するデータの数を Items.Count プロパティにセット。

以下に例を示す。この例を実行するには、フォームに 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.

Tips

ブログ

リンク