실제 코드를 보지 않아도 왜 업데이트가 느린 지 알 수있는 방법이 없습니다. 그러나 속도가 문제가되는 경우, 특히 많은 목록 항목이있는 경우 TListView
을 대신 가상 모드 (OwnerData
속성을 true로 설정)에 넣고 상태 정보를 TListView
자체가 아닌 다른 위치에 저장해야합니다 (2000 개 항목 가상이 아닌 ListView가 처리 할 수있는 오버 헤드가 많음). 그런 다음 ListView의 Invalidate()
또는 UpdateItems()
메서드를 호출하여 다시 칠할 필요가있을 때 호출하고 이벤트를 사용하여 요청할 때마다 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;
...
}
begin/endupdate에 대한 호출을 보여주는 업데이트 코드를 게시하십시오! 그리고 그들이 * 외부 * 귀하의 1..2000 루프에 있는지 확인하십시오 ... – Roddy