Bardzo dziękuję za zainteresowanie tematem. Jak się okazało faktycznie ListBox jest wolniejszy od ListView. Dotyczy to jednak projektów "Multi-Device Application" ponieważ w zwykłym VCL i pętli listbox1.items.add(''); trwa to ułamki sekundy nawet przy 5000 elementów. Gdy tylko kAzek uświadomił mi co jest napisane w tym tutku to praca nabrała sensu a efekty są bardzo dobre. Tak to bym pewnie siedział tydzień nad ListBox i nic nie wyczarował ;)
@furious programming - Różnica w budownie wynika właśnie z tego, że to jest projekt FMX i tam kontrolki mają inne właściwości.
procedure TMainForm.Button2Click(Sender: TObject);
var
item: TListboxItem;
i: integer;
begin
listbox2.Items.Clear;
for i:=0 to strtoint(edit1.Text) do begin
item := TListBoxItem.Create(listbox2);
item.Text := 'item';
item.StyleLookup := 'listboxitembottomdetail';
item.ItemData.Detail := 'detal ' + inttostr(i);
item.ItemData.Accessory := TListBoxItemData.TAccessory(1);
listbox2.AddObject( item );
Label_Main.Text := inttostr(i);
application.ProcessMessages;
end;
end;
procedure TMainForm.Button4Click(Sender: TObject);
var
Item: TListViewItem;
i: integer;
begin
listview1.Items.Clear;
for i:=0 to strtoint(edit2.Text) do begin
item := listview1.Items.Add;
Item.Text := 'item';
Item.Data[TMultiDetailAppearanceNames.Detail1] := 'detal ' + inttostr(i);
Item.Objects.AccessoryObject.AccessoryType := TAccessoryType(2);
Label_Main.Text := inttostr(i);
application.ProcessMessages;
end;
end;
A oto porównanie przybliżonych czasów ładowania:
ListBox 100 elementów: 15s(Tel) - <2s(PC)
ListBox 500 elementów: 4m20s(Tel) - 15s(PC)
ListBox 1000 elementów: 30s(PC)
ListView 100 elementów: 2s(Tel) <1s(PC)
ListView 500 elementów: 8s(Tel) <1s(PC)
ListView 1000 elementów: 18s(Tel) <2s(PC)
ListView 5000 elementów: 7s(PC)