Szybkie dodawanie do ListView

0

W jak najszybszy sposob dodac do ListViewa duza ilosc pozycji, ujecie poczatku procedury dodawajacej w BeginUpdate i EndUpdate nic nie daje, moze znacie jakis szybszy sposob.

0

a znam znam ... wienc:

caption to pierwsza kolumna
subitems.add(s:string) to dodaje do następnej kolumny "s"

całość wygląda tak:

var new:tlistitem;
begin
new:=listview1.items.add;
new.caption:=edit1.text <font color="blue">//obojentnie co :)</span>
new.subitems.add(edit2.text); <font color="blue">//tak samo</span>
new.subitems.add(edit3.text); <font color="blue">//j/w</span>
end;

żadne beginupdate i endupdate:D

0

żadne beginupdate i endupdate:D
Drajwer, pkapera ma racje - beginupdate i endupdate sluzy do przyspieszenia dodawania do listview albo memo.

pkapera: czy robisz to tak:

Listview1.Items.beginUpdate;
for i:=1 to 1000 do
begin
dodawanie
end;

Listview1.Items.Endupdate;

jesli nie, to zrob tak. Jesli tak, to pokaz kod, moze cos sie wymysli...

0

aaa tera wiem do czego to to służy :D teraz w pętli jak dodaje pare itemsów żeby przyśpieszyć daje :

var new:tlistitem;
begin
listview1.beginupdate;
...
new:=listview1.items.add;
new.caption:=edit1.text //obojentnie co
new.subitems.add(edit2.text); //tak samo
new.subitems.add(edit3.text); //j/w
...
listview1.endupdate;
end;

0

Zgadza się, jeno ListView.Items.BeginUpdate;

0

pkapera: czy robisz to tak:

Listview1.Items.beginUpdate;
for i:=1 to 1000 do
begin
dodawanie
end;

Listview1.Items.Endupdate;

jesli nie, to zrob tak. Jesli tak, to pokaz kod, moze cos sie wymysli...

Robię to tak:
[code]
ListView.Items.BeginUpdate;
for i:=0 to bardzo_duzo do
begin
ListItem := ListView.Items.Add;
ListItem.Caption := 'cos tam';
ListItem.SubItems.Add('cos tam');
ListItem.SubItems.Add('cos tam');
end;
ListView.Items.EndUpdate;
[/code]
To działa bardzo dobrze jak jest niewiele itemów,
jak chcę dodać np 5000 to listview przez pewien
czas pozostaje biały (to trwa chwilkę).
Jak temu zapobiec nie wiem.

Na marginesie:
BeginUpdate i EndUpdate zapobiega przerysowywaniu ekranu w czasie dodawania.

0

To działa bardzo dobrze jak jest niewiele itemów,
jak chcę dodać np 5000 to listview przez pewien
czas pozostaje biały (to trwa chwilkę).
Jak temu zapobiec nie wiem.

Obawiam się, że nic nie zrobisz. Po prostu program musi miec trochę czasu na dodanie tylu itemow.
Jesli chcesz zapobiec niepokojom u usera mozesz na poczatku wyrzucic mala forme z komunikatem 'Pracuje...' a po skonczeniu ja schowac.

Jesli cos wymyslisz lepszego, podziel sie, sam bym chetnie przyspieszyl dodawanie w moim ListView...

0

Można też w pętli umieścić Application.Processmessages; aby program nie przestał odpowiadać.

0

Jesli cos wymyslisz lepszego, podziel sie, sam bym chetnie przyspieszyl dodawanie w moim ListView...

Coś co by bardziej przyśpieszyło nie wymyśliłem, ale zreorganizowałem kod w sposób bardziej optymalny (chyba)
czyli moja procka wygląda teraz tak:

[code]
ListView.Items.BeginUpdate;
for i:=0 to bardzo_duzo do
begin
ListItem := ListView.Items.Add;
with ListItem do
begin
try
//tutaj kod obrabiający dane
finally
Caption := 'coś';
SubItems.Add('coś');
SubItems.Add('coś');
end;
end;
end;
ListView.Items.EndUpdate;
[/code]
Jakby się coś jeszcze dało zoptymalizować to powiedzcie.

0

[code]for I := 0 to ListView1.Items.Count -1 do[/code]<font color="blue">/Jeśli masz dużo wartości!!!</span>
poza tym ściągnij sobie żródło Adama Dane2 tam masz pokazane jak odczytywać i zapisywać dane z Listview http://www.4programmers.net/download.php?id=367

0

Jakby się coś jeszcze dało zoptymalizować to powiedzcie.

jak na mój gust tylko tu:
//tutaj kod obrabiający dane

:-)

1 użytkowników online, w tym zalogowanych: 0, gości: 1