![]() |
|
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]()
|
|
| CHERRY |
|
|||
![]() Прохожий ![]() Профиль Группа: Участник Сообщений: 150 Регистрация: 17.6.2002 Где: Одесса Репутация: нет Всего: -2 |
В VirtualStringTree для отображения иконок ассоциированных с файлом используется код:
TSerchInfo(fSerchInfo[i]).LongName - полное имя файла. Все работает, но например, в папке System32 больше 2-х тысяч файлов, соответственно иконок в ImList загружается столько же(причем однотипных иконок). Поэтому на отображение папки требуется несколько секунд. Как оптимизировать процесс? --------------------
Трясу надежды ветвь, но где желанный плод? |
|||
|
||||
| XperT |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 269 Регистрация: 19.8.2006 Репутация: 2 Всего: 4 |
Определяйте тип файла и ассоциируйте его с иконкой. Перед загрузкой следующей иконки проверяйте не загружали ли вы для такого типа файлов уже иконку.
|
|||
|
||||
| CHERRY |
|
|||
![]() Прохожий ![]() Профиль Группа: Участник Сообщений: 150 Регистрация: 17.6.2002 Где: Одесса Репутация: нет Всего: -2 |
Да, таким образом можно загрузить только "нужные" иконки, но как потом узнать, что файлу *.txt соответствует индекс 10 из ImList, а *.dll индекс 186
--------------------
Трясу надежды ветвь, но где желанный плод? |
|||
|
||||
| XperT |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 269 Регистрация: 19.8.2006 Репутация: 2 Всего: 4 |
Ужас, вы не знаете как в программировании ассоциировать одни данные с другими? Да вариантов на самом деле очень много (список отсортирован в порядке от правильного до простого):
1. Ассоциативный массив (TDictionary) 2. Массив структур (где структура состоит из 2 полей: расширение файла и индекс иконки) 3. Двумерный массив 4. Два одномерных массива (или других списков, новички очень любят использовать TStringList) ... Это не предел. Список можно расширить еще несколькими правильными вариантами (о которых я сейчас не подумал), а так же кучей дурацких вариантов (которые тем не менее будут работать). Это сообщение отредактировал(а) XperT - 10.5.2012, 15:04 |
|||
|
||||
| CHERRY |
|
|||
![]() Прохожий ![]() Профиль Группа: Участник Сообщений: 150 Регистрация: 17.6.2002 Где: Одесса Репутация: нет Всего: -2 |
Спасибо. Идея понятна
--------------------
Трясу надежды ветвь, но где желанный плод? |
|||
|
||||
| kami |
|
||||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1806 Регистрация: 25.8.2007 Где: Санкт-Петербург Репутация: 23 Всего: 72 |
А я бы предложил, раз уж используется VT, задействовать "системный" ImageList.
Поясняю:
А теперь - непосредственно отображение:
Итого - заполнение VT списком файлов из system32 и работа только с нужными на текущий момент иконками в общем и целом занимает меньше секунды. Непосредственную работу по "а есть ли уже эта иконка в списке и какая она по номеру" берет на себя система, что, имхо, большой плюс. Добавлено @ 21:38 Ну и - в приведенном примере SHGetFileInfo действует на основании расширения файла. Посему "действительных" иконок (к примеру) exe файлов не увидеть... Это сообщение отредактировал(а) kami - 10.5.2012, 21:49 |
||||
|
|||||
![]()
|
| Правила форума "Delphi: Общие вопросы" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |