Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.05.2010, 19:20   #1
akosh12345
Пользователь
 
Регистрация: 02.05.2010
Сообщений: 26
По умолчанию Файловый менеджер

Привет всем. Я начинающий программист. Моя дипломная работа - файловый менеджер. Тема такая. Хоту написать такой софт равносильно Total Commander. Первая трудность состоит в том, что отображение файлов происходит очень ме6дленно. Использую компонент ListView. Но очень медленно происходит заполнение файла. Пробывал грузить через потом, быстрее но все равно по полосе прокрутке видно что файлы еще грузятся. Пример. Создал на диске папку. Имя '1'. В этой папке создал 20 000 папок. При вхождении Totol Commandera заполнение и отображение занимает около 2 секунд, в то время как сам винда заходит в 2 раза медленнее. Хочу что бы мой софт был на таком уровне иначе не примут дипломку. Потом в нашел компонент SHellListView. Стандарстное отображение файлов. Но он слишком грамосткий и перерисовка не как в Total COmmander. Мне нужно что бы помогли мне сделать. Нужно как то использовать SHellListView и брать оттуда файлы, то есть именно заполнение происходило через SHellListView, а отображение на копмоненте, который я мог управлять на подобие ListViewю. Подскажите мне как это РЕАЛИЗВАТЬ?
akosh12345 вне форума Ответить с цитированием
Старый 06.05.2010, 09:59   #2
prizrak1390
-=PriZraK=-
Форумчанин
 
Аватар для prizrak1390
 
Регистрация: 12.12.2007
Сообщений: 399
По умолчанию

akosh12345, да все очень легко. Тебе нужно самому, ручками получать список файлов и передавать этот список в какой-нить компонент. Например в listbox. Делается это весьма просто, при помощи обычных функций дельфи:
Код:
Var SearchRec:TSearchRec;
...
If FindFirst('c:\Windows\*.*', faAnyFile, SearchRec)=0 then
repeat
{Вот здесь мы можем делать с найденным файлом что угодно
SearchRec.name - имя файла
ExpandFileName(SearchRec.name) - имя файла с полным путем} 
until FindNext(SearchRec) <> 0;
FindClose(SearchRec);
Я считаю данный подход более экономичным, чем юзание готовых визуальных компонентов для отображения содержимого директорий. Кстати SHellListView - есть великое зло. Лучше по мере возможного, обойтись без него. Для отображения директорий(списка папок) рекомендую использовать деревья, этот компонент штатно идет в дельфи. И кстати для более быстрой отрисовки, перед началом операции надо прятать компонент, а потом после окончания получения данных, показывать его (так намного быстрее будет происходить процесс прорисовки), да вообщем еще много нюансов.
Однако если мой вариант не устраивает, есть еще несколько альтернатив:
- Искать в инете готовый компонент, который будет Вас удовлетворять. Дешево и средито.
- Править уже имеющиеся компоненты или написать свои собственные.

Последний раз редактировалось prizrak1390; 06.05.2010 в 10:04.
prizrak1390 вне форума Ответить с цитированием
Старый 06.05.2010, 14:48   #3
akosh12345
Пользователь
 
Регистрация: 02.05.2010
Сообщений: 26
По умолчанию

Пробывал тот метод. Забивал в TListView. очень долго. Пробывал забивку заталкать в поток еще медленее, но компонентом могу упр. 20 000 папок в папке открывает 20 - 30 секунд. Это очень долго. Total открывает 1.5-2 секунды. Очень быстро как этого добиться?
akosh12345 вне форума Ответить с цитированием
Старый 06.05.2010, 15:39   #4
BARNEY
Участник клуба
 
Регистрация: 23.04.2009
Сообщений: 1,058
По умолчанию

может попросить гуру написать на asm эту функцию
Если вам человек помог, не стесняйтесь говорить спасибо (весы под аватаром)
BARNEY вне форума Ответить с цитированием
Старый 09.05.2010, 22:58   #5
akosh12345
Пользователь
 
Регистрация: 02.05.2010
Сообщений: 26
По умолчанию

Нам не обьяснили ассемблер. Так что нужно я думаю написать на Делфи. Наверника есть какой нибудь простой способ. Вот только нужно его найти
akosh12345 вне форума Ответить с цитированием
Старый 10.05.2010, 09:57   #6
BARNEY
Участник клуба
 
Регистрация: 23.04.2009
Сообщений: 1,058
По умолчанию

а сам цикл сколько по времени длиться? без забивания отображения куда либо? тут либо цикл оптимизировать либо компонент искать для отображения другой
Если вам человек помог, не стесняйтесь говорить спасибо (весы под аватаром)
BARNEY вне форума Ответить с цитированием
Старый 10.05.2010, 16:55   #7
akosh12345
Пользователь
 
Регистрация: 02.05.2010
Сообщений: 26
По умолчанию

сам цыкл около 10-12 секунд. Я не знаю что может быть быстрее цыкла. Это разве возможно?
akosh12345 вне форума Ответить с цитированием
Старый 10.05.2010, 21:37   #8
inndim
Пользователь
 
Регистрация: 08.06.2008
Сообщений: 74
По умолчанию

Крайне рекомендую почитать про VirtualTreeView и VirtualListView - это то, что вам надо для скорости.
inndim вне форума Ответить с цитированием
Старый 11.05.2010, 08:10   #9
TwiX
Участник клуба
 
Аватар для TwiX
 
Регистрация: 28.07.2009
Сообщений: 1,510
По умолчанию

Сейчас сам попробовал создать 10000 папок и отобразить их в listview. Заняло это порядка 2-3 секунд. У тотала на это уходит на 0.5-1 секунд поменьше. Но это и есть как раз отрисовка в listbox. Вы наверное неправильно поиск организовывали.
TwiX вне форума Ответить с цитированием
Старый 11.05.2010, 09:06   #10
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Если очень нужно могу кинуть свой компонент дерева папок и файлов, который я писал для замены ShellTreeView
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Файловый менеджер Яр|/||< (^_^) Общие вопросы Delphi 4 16.10.2011 00:55
файловый менеджер чижик-пыжик Общие вопросы .NET 1 05.03.2010 11:51
Файловый менеджер на C sht0p0r Помощь студентам 3 07.12.2008 16:47
файловый менеджер greyshadow Общие вопросы Delphi 3 16.09.2007 19:23