お知らせ

電子会議

ライブラリ

パレット

Delphi FAQ検索

Delphi FAQ一覧

サンプル蔵





FDelphi FAQ
16番会議室「玉石混淆みんなで作るSample蔵」に寄せられたサンプル

"仮想リストボックスの使用例(表示高速化)"




D3.1からD6へ移行して、新機能をいろいろ遊んでいます。



配列やTListなどに、データを持っていて、それをTListBoxに表示するとき、
Items.Add で文字列を追加していくと、件数が多いと、結構時間がかかります。
また、メモリも文字列分余分消費します。

nifty:FDELPHI/MES/16/1383 で、TStringGrid の代わりに TDrawGrid を使って高速
化する例を挙げましたが、TListBox でも高速化できる方法がありました。


TListBox.Style を lbVirtual(仮想リストボックス)にすると、Add する必要が無
く、文字列を持つ必要もなくなるので、表示が高速かつ、メモリ消費も節約できます。

Type
  TMyRec = packed record
    Key1 : Integer;
    Key2 : Byte;
    Data1: Byte;
    Data2: Cardinal;
  end;


  FData: array of TMyRec;

とうい配列を表示するとき、
TListBox.Style が lbStandard の場合の表示法

procedure TForm1.DataShow;
var
  IDX:Integer;
begin
  ListBox1.Items.BeginUpdate;
  try
    ListBox1.Items.Clear;
    for IDX := 0 to High(FData) do
      ListBox1.Items.Add(Format('%10d %3d %3d %10d', [FData[IDX].Key1,
                                             FData[IDX].Key2,
                                             FData[IDX].Data1,
                                             FData[IDX].Data2]));
  finally
    ListBox1.Items.EndUpdate;
  end;
end;



TListBox.Style の lbVirtual の場合の表示法
項目はイベントハンドラで動的に設定する。

ListBox の OnData イベントのハンドラー

procedure TForm1.ListBox1Data(Control: TWinControl; Index: Integer;
  var Data: String);
begin
  
  Data := Format('%10d %3d %3d %10d', [ FData[Index].Key1,
                                        FData[Index].Key2,
                                        FData[Index].Data1,
                                        FData[Index].Data2 ]));
end;


procedure TForm1.DataShow;
begin
  ListBox1.Count := Length(FData); //Countは、自分で設定する必要有り
end;


                                     01/10/05(金) 23:49 HATENA(GFC03235)
 


- FDELPHI  MES(16):玉石混淆みんなで作るSample蔵【見本蓄積】 01/10/07 -

Original document by HATENA          氏 ID:(GFC03235)


ここにあるドキュメントは NIFTY SERVEの Delphi Users' Forum の16番会議室「玉石混淆みんなで作るSample蔵」に投稿されたサンプルです。これらのサンプルはボーランド株式会社がサポートする公式のものではありません。また、必ずしも動作が検証されているものではありません。これらのサンプルを使用したことに起因するいかなる損害も投稿者、およびフォーラムスタッフはその責めを負いません。使用者のリスクの範疇でご使用下さい。

Copyright 1996-2002 Delphi Users' Forum