Аналог WinCMD

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
PUNK-GRUNGER
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 145
Зарегистрирован: 10.06.2004 (Чт) 14:22
Откуда: Украина, Николаев

Аналог WinCMD

Сообщение PUNK-GRUNGER » 10.06.2004 (Чт) 14:34

Привет,
Раньше практически никогда не использовал ни форумы, ни гесты. Учился на исходниках и статьях. С "улицами" знаком практически с самого рождения - когда еще проект был у Дарлока и помню самый первый дизайн :) Ну вот, прижало... и ...

В последнее время занялся писаниной своего Commander'а. В принципе ядро написано, но есть одно "но". Скорость... Допустим открытие какого-либо каталога с 10 папками и 20 файлами - не считается. Работает нормально... Но когда открываешь, к примеру Windows\System, приходится ждать секунд 15...

* Компилятор VB 6.0;
* Я использую MSCOMCTL;
* Инфу о каталогах и файлах получаю из FSO;
* Закидываю ассоциированные иконки в ImageList, а потом оттедава вставляю в ListView.

Пожалуйста, помоги кто чем может :) Если у кого-то есть исходные коды каких-либо шустрых Commander'ов - пришлите мне на mailto:punk-grunger@mail.ru

Или же кто-то знает как увеличить скорость... Или просто что либо посоветуйте. Я уже все перепробовал...
«Каждому программисту ЭВМ выдает то, что он заслуживает» (c)

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 10.06.2004 (Чт) 14:49

Пробуй API. Быстрее чем через него все-равно не получится.
Код: Выделить всё
Private Declare Function FindFirstFile Lib "kernel32" Alias "FindFirstFileA" (ByVal lpFileName As String, lpFindFileData As WIN32_FIND_DATA) As Long
Private Declare Function FindNextFile Lib "kernel32" Alias "FindNextFileA" (ByVal hFindFile As Long, lpFindFileData As WIN32_FIND_DATA) As Long
Private Declare Function FindClose Lib "kernel32" (ByVal hFindFile As Long) As Long
Lasciate ogni speranza, voi ch'entrate.

Alexanbar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1727
Зарегистрирован: 13.04.2004 (Вт) 23:04
Откуда: Волгоградская обл.

Сообщение Alexanbar » 10.06.2004 (Чт) 16:22

Из собственного опыта знаю, что значительная доля времени расходуется на извлечение иконок. ПОэтому можно прежпринять следующее:

1) для всех файлов использовать одну иконку
2) извлекать иконки по мере того, как нужный файл появляется в видимой области Listview. Поскольку прокручивание в Listview не порождает никакого события, придётся перехватывать сообщения.
3) есть ещё вариант заполнения Listview с помощью API , т.е. заранее задаётся количество элементов и используется функция обратного вызова. Этот вариант мною не изучен, а скорее всего, именно он позволяет увеличить скорость (догадываюсь, что по мере прокрутки в Listview вносятся нужные элементы)

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 10.06.2004 (Чт) 16:39

Alexanbar, это называется виртуальный список.
Строки при этом не загруэаются, просто при прокрутке списка вызывается Callback-функция, которая возвращает элемент списка.
Удобно это тем, что можно без особых напрягов и очень быстро загрузить хоть пару миллионов элементов. Неудобно тем, что их придется извлекать (из БД или откуда еще) при прокрутке.

Думаю, в данном случае тормозит именно FSO, возможно там встроена сортировка, а отсортировать две-три тысячи элементов занимает некоторое время, у меня и WinCmd тормозит, не 15 секунд конечно, но секунд пять подождать приходится.
Lasciate ogni speranza, voi ch'entrate.

PUNK-GRUNGER
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 145
Зарегистрирован: 10.06.2004 (Чт) 14:22
Откуда: Украина, Николаев

А все таки

Сообщение PUNK-GRUNGER » 10.06.2004 (Чт) 16:47

Ладно, идею понял. Будем реализовать.

Я тоже думаю "скорость" зависит от вытаскивания иконок. Просто, я тут паралельно создал пустой проект и разместил на нем ListView+подключил FSO. Так файлы (без иконок) быстро отображаются.

А одну иконку использовать не хочется ;) Не красиво это. Хочется сделать достойный заменитель WinCMD. Ведь программа не сложная, а вон сколько денег дерет. А я сделаю бесплатную ;) И, надеюсь, не хуже. Главное - в скорости выиграть. За остальное я не переживаю.

А что насчет исходников ? Ни у кого нет каких-либо commander'ов?
«Каждому программисту ЭВМ выдает то, что он заслуживает» (c)

Alexanbar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1727
Зарегистрирован: 13.04.2004 (Вт) 23:04
Откуда: Волгоградская обл.

Сообщение Alexanbar » 10.06.2004 (Чт) 23:44

Главное достоинство Wincmd- все файловые операции + FTP и прочие и это всё помещается на дискету. На вид вроде просто, но не зря он делается несколько лет. Лично я начал делать свой вариант файл-менеждера, поскольку хотел добавить свои функции.

Ennor
Конструктивный критик
Конструктивный критик
 
Сообщения: 2504
Зарегистрирован: 18.12.2001 (Вт) 3:58
Откуда: Калуга -> Москва

Сообщение Ennor » 11.06.2004 (Пт) 10:19

А плагин для FAR'a написать - не проще ли?..

PUNK-GRUNGER
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 145
Зарегистрирован: 10.06.2004 (Чт) 14:22
Откуда: Украина, Николаев

Свое приятней

Сообщение PUNK-GRUNGER » 11.06.2004 (Пт) 10:57

Да на дискетку засунуть - засунем. В конце-концов, все прекрасно знают утилиту UPX.exe :)

Дальше, файловые операции - меня то и не устраивают (даже если их реализовывали много-много лет). К примеру, когда копируешь каталог. Мне очень часто - нужно копировать только файлы по маске... Или, возможность установки максимальной передачи данных. Винты то разные. К примеру, чтобы большие файлы копировал по 25 килобайт. А маленькие - сразу переносил. И т.д. Не хватает безусловно фильтра: на тип, на размер, на дату.

И еще мне не хватает таких утилит, как конвертер цветов, TEMP-дисковода, быстрого доступа к "Моим документам". По сути, раньше я использовал DN и мне этого хватало. Но теперь... во-первых DN сильно постарел, во-вторых он все таки ДОС-приложение.

Да и когда свое сделаешь - оно приятнее. Ведь правильно ? :)
С уважением.
«Каждому программисту ЭВМ выдает то, что он заслуживает» (c)

PUNK-GRUNGER
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 145
Зарегистрирован: 10.06.2004 (Чт) 14:22
Откуда: Украина, Николаев

Re: Свое приятней

Сообщение PUNK-GRUNGER » 11.06.2004 (Пт) 11:03

PUNK-GRUNGER писал(а):И еще мне не хватает таких утилит, как конвертер цветов


Это я насчет плугинов. В самом менеджере таких не нужностей не будет :)
«Каждому программисту ЭВМ выдает то, что он заслуживает» (c)

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 11.06.2004 (Пт) 13:32

Вообще - скорость не сильно зависит от того используется бэйсиковский Dir, FSO или API-шные функции. Когда-то я пробовал замерить разницу - не нашел заметных отличий.

В основном тормоза при большом количестве файлов бывают из-за ListView. Тут два варианта выхода - или подгружать файлы динамически, или, что проще - выкинуть ListView и заменить его нормальным Grid-ом (я пользую Janus GridEx) - тогда по этой причине тормозов не будет (хоть с сортировкой, хоть без).

Считывать ассоциированные иконки или нет - разница в скорости будет минимальна если для расширений кроме exe и lnk иконку считывать только один раз.

В общем, каталог типа System должен читаться менее чем за секунду - ничуть не тише чем это делает проводник, FAR или WinCmd.
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

PUNK-GRUNGER
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 145
Зарегистрирован: 10.06.2004 (Чт) 14:22
Откуда: Украина, Николаев

Сообщение PUNK-GRUNGER » 19.06.2004 (Сб) 17:57

И все таки нужной скорости я недобился. Но кое-что улучшил. Пришлось класс для файлов написать, поубирать Doevents'ы где не нужно и т.д.

Работа идет полным ходом :) Система плугинов уже работает, копирование, как я хотел, работает... Фильмы копируются быстренько :)

Вобщем может через месяцок покажу ;)
«Каждому программисту ЭВМ выдает то, что он заслуживает» (c)


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex-бот и гости: 2

    TopList