[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

pl.comp.programming

[C++ Builder] Wylaczenie odswiezania kontrolki

******************

6/29/2007 2:58:00 PM

Witam,

mam sobie TListView i do niego dodaje z 10000 linii. Trwa to strasznie
dlugo, gdy? za ka?dym razem jak dodaje now? linie (oraz kolumne), to
od?wie?ana jest ca3a kontrolka. Czy da sie jakim? sposobem wy3?czya
od?wie?anie kontrolki, aby przyspieszya ten proces? Mam na my?li co?
takiego:

a) wy3?czamy od?wie?anie;
b) wgrywamy te wszystkie linie;
c) ponownie zalaczamy od?wie?anie i od?wie?amy stan kontrolki.

Jak sie da, to jak?

Dzieki za informacje.

--
http://www.orino...
Unofficial ORiNOCO Support Page including ORiNOCO USB Classic Client
Simply the best!!!
4 Answers

Bogus

6/29/2007 7:43:00 PM

0

Dnia 29-06-2007 o 16:57:39 ****************** <orinoco@host.sk> napisaÅ?(a):

> Witam,
>
> mam sobie TListView i do niego dodaje z 10000 linii. Trwa to strasznie
> dlugo, gdyż za każdym razem jak dodaje nowÄ? linie (oraz kolumne), to
> odÅ?wieżana jest caÅ?a kontrolka. Czy da siÄ? jakimÅ? sposobem wyÅ?Ä?czyÄ?
> odÅ?wieżanie kontrolki, aby przyspieszyÄ? ten proces? Mam na myÅ?li coÅ?
> takiego:
>
> a) wyÅ?Ä?czamy odÅ?wieżanie;

Bodajze Items->BeginUpdate(),

> b) wgrywamy te wszystkie linie;
> c) ponownie zalaczamy odÅ?wieżanie i odÅ?wieżamy stan kontrolki.

EndUpdate()

>
> Jak siÄ? da, to jak?
>
> DziÄ?ki za informacje.
>


--
BoguÅ?
www.google.pl <-- to nie boli
http://bogu...

ionic

6/30/2007 9:43:00 AM

0

Spróbuj zablokowac jej odrysowywanie:
SendMessage(list.handle, WM_SETREDRAW, false, 0);
lub najpierw zaalokuj pamiec na wszystkie linie i pozniej dodawaj:
SendMessage(list.handle, LVM_SETITEMCOUNT, /*ilosc*/10000, LVSICF_NOINVALIDATEALL | LVSICF_NOSCROLL);
lub lepej uzyj virtual-list view (styl LVS_OWNERDATA), gdzie LVM_SETITEMCOUNT ustawia ilosc linii, a tekst dla kazdej z nich jest
odpytywany z Twojego WndProc, jesli tylko zajdzie potrzeba wyswietlenia owej linii.
W XP jest ograniczenie do 100e6 lini, co jest conajmniej dziwne.


Krzysiek M.

7/2/2007 2:48:00 PM

0

On 29 Cze, 16:57, ****************** <orin...@host.sk> wrote:
> [...]

Screen->Cursor = crHourglass; // ustawienie kursora (klepsydra)
ListView1->Items->BeginUpdate(); // wyl. odswiezania

// ladowanie danych do listy

ListView1->Items->EndUpdate(); // wl. odswiezania
Screen->Cursor = crDefault; // przywrocenie "normalnego" wygladu
kursora

--
Pozdrawiam,
Krzysiek

Bogus

7/2/2007 4:02:00 PM

0

Dnia 02-07-2007 o 16:47:59 Krzysiek Mortka <krzysztof.mortka@gmail.com> napisaÅ?(a):

> On 29 Cze, 16:57, ****************** <orin...@host.sk> wrote:
>> [...]
>
> Screen->Cursor = crHourglass; // ustawienie kursora (klepsydra)
> ListView1->Items->BeginUpdate(); // wyl. odswiezania
>
> // ladowanie danych do listy

ListView1->AllocBy = xyz; // przeczytaj w dokumentacji ;)

>
> ListView1->Items->EndUpdate(); // wl. odswiezania
> Screen->Cursor = crDefault; // przywrocenie "normalnego" wygladu
> kursora

IMHO, to takie sprzÄ?tanie jak EndUpdate() i Cursor = crDefault;
warto dawaÄ? w bloku __finally

>
> --
> Pozdrawiam,
> Krzysiek
>
>



--
BoguÅ?
www.google.pl <-- to nie boli
http://bogu...