Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Доступ к иконкам зарегестрированным в оболочке Windows [D5, Win95/98]


Nexus ©   (2002-02-03 16:58:00) 

Возник такой вопрос, как можно получить иконку какого либо типа файла(по расширению)???


ctapik-net   (2002-02-06 18:35:00) [1]

Че человеку голову заморочили.
1. Кидаешь на форму ImageList в FormCreate пишешь следующее
ImageList.ShareImages:=True;
ImageList.DrawingStyle:=dsTransparent;
SHGetSpecialFolderLocation(Application.Handle, CSIDL_DRIVES, MyPidl);
ImageList.Handle:=SHGetFileInfo(Pchar(MyPidl), 0, FileInfo,
SizeOf(FileInfo),SHGFI_PIDL or
SHGFI_SYSICONINDEX or SHGFI_SMALLICON);


2. Далее используешь функцию SHGetFileInfo Вместо имени файла посылаешь че нибудь такое "1.txt" Он тебе вернет индекс в системном имедж листе этой иконки. В твоем случае это будет в ImageList.

P.S. Незабудь после каждого вызова SHGetFileInfo вызывать функцию DestroyIcon(че-то там.hIcon) т.к. SHGetFileInfo дополгительно возвращает хендел на эту иконку.


valery_f   (2002-02-06 11:45:00) [2]

Иконки задаются в реестре, и там есть 2 варианта:

1) К примеру - ".PAS":

HKEY_CLASSES_ROOT\.pas, значение по умолчанию - "DelphiUnit"
HKEY_CLASSES_ROOT\DelphiUnit\DefaultIcon - значение по умолчанию - "D:\Programs\Borland\Delphi5\Bin\Delphi32.exe,5"

т.е. обычная ссылка на иконку (либо отдельно лежащую, либо в EXE или DLL по индексу), как до нее добраться - надеюсь знаешь.

2) Бывает так, что раздела "DefaultIcon" нет - только ссылка на COM-объект, который занимается этим типом файла:

HKEY_CLASSES_ROOT\__Тип_документа__\CLSID

Хотя, чаще всего, присутствие CLSID не отменяет ссылки на иконку, но такое иногда случается. Вот что с этим делать - я не знаю...

Мораль - по типу файла находишь в реестре тип документа, затем по типу документа ищешь DefaultIcon, а там уже вытаскиваешь саму иконку. Если этого нет - тогда ой :)


Nexus   (2002-02-05 14:15:00) [3]

Ну знает кто-нибудь или нет?


Nexus   (2002-02-04 19:31:00) [4]

2ZZ: Нет, не представляю :) Такой метод подходит только если файл такого типа существует на локальном компьютере. А что если тип зарегистрирован, а файла такого типа на компьютере нет.


drpass   (2002-02-04 12:02:00) [5]

ExtractAssociatedIcon, например


Slava   (2002-02-04 09:47:00) [6]

> ZZ

Уважаемый, а Вы пробовали воспользоваться этим советом,
вставив вместо "Application.ExeName" что-нибудь другое?

У меня Д6. Это не работает ни в W2K, ни в XP, ни в W"98


ZZ   (2002-02-03 17:17:00) [7]

Ты представляешь - у составителей FAQ этого сайта тоже возник такой вопрос :) (поискать было лень?)
http://delphi.mastak.ru/cgi-bin/faq.pl?look=1&id=988621978&n=15


Наверх

Титульная страница Поиск, карта сайта Написать письмо