Вниз
Скачать: CL | DM;

PDirList и ListView   Найти похожие ветки 

 
Bil Bal Dur   (2005-01-14 20:45) [0]

Мне нужно вывести список файлов из директории в ListView. Делаю так:

...
lFiles:=NewDirList(lPath,"*.*",FILE_ATTRIBUTE_NORMAL+FILE_ATTRIBUTE_DIRECTORY)
...
for tmp:=0 to lFiles.Count-1 do
 form1.ListView1.LVItemAdd(lFiles.Names[tmp]);

если число файлов 5-10 и более тысяч, то заметно тормозит. а если ещё иконки добавлять, то вообще мрак.

можно ли ускорить этот процесс?


 
Андрей ©   (2005-01-18 12:51) [1]

Возможно, несколько ускорит пара BeginUpdate - EndUpdate, обрамляющая цикл добавления в ListView.


form1.BeginUpdate;
for tmp:=0 to lFiles.Count-1 do
 form1.ListView1.LVItemAdd(lFiles.Names[tmp]);
form1.EndUpdate;


А вообще-то ты пробовал зайти в подкаталог с 10000 файлов FARом или проводником (первый раз, когда инфо не в кэше)? Они тоже тормозят.


 
ECM ©   (2005-01-18 13:28) [2]

В таких случаях необходимо использовать ListView в режиме
"виртуального списка" - сам пользуюсь всегда - тормоза пропадают!
http://www.rsdn.ru/article/controls/virtlist.xml


 
ECM ©   (2005-01-18 13:49) [3]

З.Ы. Естественно тормоза пропадают относительно отображения в ListView - т.к. данные в этом случае НЕ ЗАКАЧИВАЮТСЯ ДОПОЛНИТЕЛЬНО в ListView
а берутся программно только для видимых в данный момент строк.
Тормоза по получению названий 10000 файлов - попрежнему остануться. Но их можно попытаться вынести в отдельный поток.


 
Bil Bal Dur   (2005-01-18 23:05) [4]

Спасибо за участие!!!
Правда я уже и сам дошел до ответа. Сделал через CustomObj, OnLVData, lvoOwnerData, вобщем через "виртуальный" ListView. Правда перед этим 4 дня копался в коде, но зато теперь на всю жизнь запомню!!!
Begin Update и End UpDate мне не помогли.


 
SPeller ©   (2005-01-19 10:52) [5]

Для ускорения добавления большого числа итемов, чтобы после добавления каждого итема listview не перерисовывался, можно использовать WM_SETREDRAW.



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.03 c
14-1123183483
Maxim_
2005-08-04 23:24
2005.08.28
Пользователи Оперы, помогите...


1-1123488332
***_Diman_***
2005-08-08 12:05
2005.08.28
Заставка - ход загрузки программы


3-1121768336
integery
2005-07-19 14:18
2005.08.28
Как вставить в таблицу значение Id из справочников ?


3-1121418058
Punch
2005-07-15 13:00
2005.08.28
Как закрыть все коннекты к базе?


1-1123490231
W0lfX
2005-08-08 12:37
2005.08.28
Иконка для расширения




   Наверх