Wątek zablokowany 2012-06-08 12:24 przez ŁF.

przyspieszanie listboxa...

0

Witam
mam do dodania do listboxa pare tysiecy linii,
niestety kazda musze dodac osobno a jak wiadomo dodanie linii
laczy sie z przepisaniem calej listy w nowe miejsce w pamieci:/
no wiec po pewnym czasie dodanie jednej linii trwa bardzo dlugo...

ma ktos moze pomysl jak ustawic na poczatku pozadany rozmiar listboxa?
tak aby nie bylo potrzeby przepisywania go.

pozdrawiam

0

Dopisz przed rozpoczeciem wypelniana linie:

ListBox1.Items.BeginUpdate

a po zakonczeniu dodawania nowych lini:

ListBox1.Items.EndUpdate
0

Możesz skorzystać z TStringList (jest o wiele bardziej szybszy).

Wykorzystanie:

var Lista : TStringList;
begin
 Lista : TStringList.Create; // tworzysz Listę 
 //...
 Lista.Add(//dodajesz...);
 //... 
 Lista.Free; // usuwasz z pamięci
end;

//na koniec dodawania mozna zrobic
ListBox1.Items := Lista;
i w listboxie bedzie to co w pamieci - pedros

0

zgadzam sie ze obie te metody przyspieszaja prace z listboxem/lista
ale
niestety zadna z tych metod nie pozwala ominac problemu z przepisywaniem calosci przy dodawaniu kolejnych linii...

jest to dla mnie spory poblem gdyz cala ta operacja zajmuje PONAD MINUTE!

0

Mnie się wydaje że Twoje (Wasze) podejscie nie zlikwiduje problemu z prostej przyczyny. Mianowicie obiekty wizualne musza działać wolniej przy dużej liczbie itemów (nie tylko listbox). Dlatego lepiej w sytuacji kiedy chcemy operować dużą liczbą danych (kilka(set) tysięcy) trzymać je na zewnatrz a listobowi podawac tylko kilka ,te , które maja byc widoczne. W tej sytuacji trzeba zrezygnowac ze scrollbara w listboxie i uzyc odrębnego (dostepnego w delphi) oprogramowując jego zdarzenia w których będzie następowało przepisywanie listy. Robiłem kiedys takie cos trzymajac dane na dysku i z dysku przepisujac po 30-50 w zaleznosci od wielkosci okna i dzialało to calkiem niezle nawet dla miliona itemow. Oczywiscie w przypadku az miliona itemow trudno o precyzję przy scrollowaniu ale to juz odrebny problem:-)

0
Opi napisał(a)

ListBox1.Items := Lista;

a fe :) a od czego jest Assign
ListBox.Items.Assign(Lista);

0
Misiekd napisał(a)
Opi napisał(a)

ListBox1.Items := Lista;

a fe :) a od czego jest Assign
ListBox.Items.Assign(Lista);

To nie moje, to Pedros dopisał :D

0
Opi napisał(a)
Misiekd napisał(a)
Opi napisał(a)

ListBox1.Items := Lista;

a fe :) a od czego jest Assign
ListBox.Items.Assign(Lista);

To nie moje, to Pedros dopisał :D

fakt :D
Pedros brutalu :P

0
Misiekd napisał(a):
Opi napisał(a)

ListBox1.Items := Lista;

a fe :) a od czego jest Assign
ListBox.Items.Assign(Lista);

Mam teraz taki sam problem i niestety Assign także w połączeniu z BeginUpdate zbytnio nie przyśpiesza. 800 000 wpisów ładuje sięi bardzo wolno do lsitboxa :(

0
anonimowy napisał(a):
Misiekd napisał(a):
Opi napisał(a)

ListBox1.Items := Lista;

a fe :) a od czego jest Assign
ListBox.Items.Assign(Lista);

Mam teraz taki sam problem i niestety Assign także w połączeniu z BeginUpdate zbytnio nie przyśpiesza. 800 000 wpisów ładuje sięi bardzo wolno do lsitboxa :(

Archeologu, ten temat ma 7 lat, zrób nowy i wytłumacz o co chodzi.

0

Użyj VirtualStringTree/VirtualDrawTree (nie sugeruj się nazwą, tak samo dobrze działa w trybie listy).

0

Archeologu, ten temat ma 7 lat, zrób nowy i wytłumacz o co chodzi.</quote>
Co z tego że ma 7 lat? to nie znaczy że nie można dopisać posta który bardzo ładnie pasuje i mieć wszystko ładnie w jednym poście a nie skakać po tematach jak mucha

0

Co z tego że ma 7 lat? to nie znaczy że nie można dopisać posta który bardzo ładnie pasuje i mieć wszystko ładnie w jednym poście a [błąd ortograficzny] skakać po tematach jak mucha

http://rtfm.killfile.pl/
Według tego podpinasz się pod temat TYLKO jeżeli chcesz aby WYŁĄCZNIE osoby które obserwowały ten wątek odpowiadały na twój problem. Ale ty wiesz lepiej co wypada a co nie, prawda?
Zapewne wiesz że wątki na wielu forach są blokowane np. po miesiącu, to nie jest bez powodu, tutaj po prostu nikt nie myślał że tacy debile wejdą. Cóż, mylili się.. I jeszcze się wykłóca że ma racje... zomg. Tutaj odkopywanie tematów NIE JEST tolerowane, dotarło? To teraz idź i załóż swój temat jeżeli masz problem.

2

Witam,

Opis gotowego rozwiązania znajduje się tu: http://www.delphi.opiumsoft.pl/wyswietlenie-duzej-ilosci-elementow-w-komponencie

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