Форум: "WinAPI";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.04.08;
Скачать: [xml.tar.bz2];




Вниз

Доступ к иконкам зарегестрированным в оболочке Windows 


Nexus   (2002-02-03 16:58) [0]

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



ZZ   (2002-02-03 17:17) [1]

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



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

> ZZ

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

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



drpass   (2002-02-04 12:02) [3]

ExtractAssociatedIcon, например



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

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



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

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



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

Иконки задаются в реестре, и там есть 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, а там уже вытаскиваешь саму иконку. Если этого нет - тогда ой :)



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

Че человеку голову заморочили.
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 дополгительно возвращает хендел на эту иконку.




Форум: "WinAPI";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.04.08;
Скачать: [xml.tar.bz2];




Наверх





Память: 0.73 MB
Время: 0.027 c
6-22775           Song                  2002-01-24 17:50  2002.04.08  
Нужна идея и решение... Есть LAN (Win NT) и два клиентских компьютера в сети (Win 9x)...


1-22686           Goblinus              2002-03-26 13:44  2002.04.08  
ComboBox


3-22594           gera-killer           2002-03-18 12:05  2002.04.08  
Проблема с ДОС-кодировкой


1-22649           Locked                2002-03-28 10:17  2002.04.08  
XMLDoc


3-22567           D'Aron                2002-03-15 15:22  2002.04.08  
ADO и MSSQL2000