![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
PDirList и ListView [Delphi, Windows]
Bil Bal Dur © (2005-01-14 20:45:00)Мне нужно вывести список файлов из директории в 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 и более тысяч, то заметно тормозит. а если ещё иконки добавлять, то вообще мрак.
можно ли ускорить этот процесс?
SPeller (2005-01-19 10:52:00) [1]Для ускорения добавления большого числа итемов, чтобы после добавления каждого итема listview не перерисовывался, можно использовать WM_SETREDRAW.
Bil Bal Dur (2005-01-18 23:05:00) [2]Спасибо за участие!!!
Правда я уже и сам дошел до ответа. Сделал через CustomObj, OnLVData, lvoOwnerData, вобщем через "виртуальный" ListView. Правда перед этим 4 дня копался в коде, но зато теперь на всю жизнь запомню!!!
Begin Update и End UpDate мне не помогли.
ECM (2005-01-18 13:49:00) [3]З.Ы. Естественно тормоза пропадают относительно отображения в ListView - т.к. данные в этом случае НЕ ЗАКАЧИВАЮТСЯ ДОПОЛНИТЕЛЬНО в ListView
а берутся программно только для видимых в данный момент строк.
Тормоза по получению названий 10000 файлов - попрежнему остануться. Но их можно попытаться вынести в отдельный поток.
ECM (2005-01-18 13:28:00) [4]В таких случаях необходимо использовать ListView в режиме
"виртуального списка" - сам пользуюсь всегда - тормоза пропадают!
http://www.rsdn.ru/article/controls/virtlist.xml
Андрей (2005-01-18 12:51:00) [5]Возможно, несколько ускорит пара BeginUpdate - EndUpdate, обрамляющая цикл добавления в ListView.
form1.BeginUpdate;
for tmp:=0 to lFiles.Count-1 do
form1.ListView1.LVItemAdd(lFiles.Names[tmp]);
form1.EndUpdate;
А вообще-то ты пробовал зайти в подкаталог с 10000 файлов FARом или проводником (первый раз, когда инфо не в кэше)? Они тоже тормозят.