実際のコードを見なければ、更新がそれほど遅い理由を確実に知る方法はありません。ただし、特にリストアイテムが多い場合に速度が問題になる場合は、TListView
代わりに仮想モードにして(OwnerData
プロパティをtrueに設定)、ステータス情報をそれ自体ではなく他の場所に保存する必要がありTListView
ます(2000アイテムが多い)非仮想ListViewが処理するオーバーヘッドの)。次に、必要に応じてListViewInvalidate()
またはUpdateItems()
メソッドを呼び出して再描画をトリガーし、イベントを使用して、要求されたときにOnData
ステータスデータを提供します。TListView
例えば:
struct MyStatusInfo
{
String Status;
...
};
MyStatusInfo StatusItems[2000];
__fastcall TForm1::TForm1(TComponent *Owner)
: TForm(Owner)
{
...
ListView1->Items->Count = 2000; // you don't use Add() with a virtual ListView
...
}
void __fastcalll TForm1::UpdateStatus(int Index, const String &Status, ...)
{
MyStatusInfo &Info = StatusItems[Item->Index];
Info.Status = Status;
...
ListView1->UpdateItems(Index, Index);
}
void __fastcall TForm1::ListView1Data(TObject *Sender, TListItem *Item)
{
MyStatusInfo &Info = StatusItems[Item->Index];
Item->Caption = Info.Status;
...
}