Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2003.03.03;
Скачать: [xml.tar.bz2];

Вниз

Как узнать иконку ассоциированную определённому расширению   Найти похожие ветки 

 
Blacki   (2003-01-05 23:25) [0]

Как узнать иконку ассоциированную определённому расширению??? Я на этом форуме уже этот вопрос задавал, но полного ответа не нашёл, апишная функция работает на очень не многих расширениях, а самописанные функции которые выдёргивают всё инфу из реестра работают тоже не для всех расширений. Так подскажит пожалуйста правильный способ!


 
Rouse_   (2003-01-05 23:32) [1]

ExtractAssociatedIcon() - Работет для всего, в крайнем случае нужен выпрямитель

Желаю успехов


 
Blacki   (2003-01-06 13:41) [2]

HICON ExtractAssociatedIcon(
HINSTANCE hInst, // application instance handle
LPTSTR lpIconPath, // file name
LPWORD lpiIcon // icon index
);
т.е. необходимо полный путь к файлу передавать в эту функцию??? но если бы у меня файл с таким расширением существовал на диске, то я мог бы и сам вытащить вссю инфу о нём, в том числе и иконку. Но мне надо чтобы именно по расширению узнать иконку. Т.е. какая иконка у файла .htm или .txt???
P.S. Так даже ExtractAssociatedIcon работает не для всего, для моего приложения то работает, а вот для другого ... :(.Вот код, может я чего то не правильно сделал?
uses ...ShellApi;
...
var
Icon : hIcon;
tmp:pchar;
begin
IconIndex := 0;
tmp:="d:\sms_mgsm_my.htm";
Icon := ExtractAssociatedIcon(HInstance, tmp , 0);
DrawIcon(Canvas.Handle, 10, 10, Icon);
end;
PP.S. подскажите хороший форум по Delphi на английском языке, а то чуствую тут бесполезно :(


 
Song   (2003-01-06 19:10) [3]

1) IconIndex должно быть типа Word и должно быть равно 1 если это первая иконка.
2) параметра файла должен быть с типом PChar()


 
Иван Ширко   (2003-01-06 22:02) [4]

function GetAssociatedIcon(const AExtension: string; ASmall: Boolean): HIcon;
var
Info: TSHFileInfo;
Flags: Cardinal;
begin
if ASmall then
Flags := SHGFI_ICON or SHGFI_SMALLICON or SHGFI_USEFILEATTRIBUTES
else
Flags := SHGFI_ICON or SHGFI_LARGEICON or SHGFI_USEFILEATTRIBUTES;

SHGetFileInfo(PChar(AExtension), FILE_ATTRIBUTE_NORMAL, Info, SizeOf(TSHFileInfo), Flags);
Result := Info.hIcon;
end;

Успехов!


 
Blacki   (2003-01-07 01:09) [5]

2 Song
>1) IconIndex должно быть типа Word и должно быть равно 1 если это первая иконка.
ну там на сколкьо я помню нумерация с 0 да и IconIndex - это просто осталось.
>2) параметра файла должен быть с типом PChar()
так а это что значит tmp:pchar????

2 Иван Ширко
ну почему опять не всё как у людей, эта функция работает почти для всех расширений, но допустим для .html и .htm не пашет. Я смотрел в реестре для этих расширений немного по другому описано, но неужели сама виндоус разобраться не может? Проводник то ведь как то правильно показывает иконки, значит можно как то?


 
Blacki   (2003-01-07 01:11) [6]

2 Иван Ширко
но всё равно спасибо хоть за это!


 
Song   (2003-01-07 09:50) [7]

2Blacki © (07.01.03 01:09)
Нумерация с 1.
ShGetFileInfo() бёрёт иконки из буфера иконок, поэтому там запросто может не оказаться какой-либо иконки (возможно, редкоиспользуемой)


 
Blacki   (2003-01-07 11:59) [8]

2 Song © (07.01.03 09:50)
ShGetFileInfo() бёрёт иконки из буфера иконок, поэтому там запросто может не оказаться какой-либо иконки (возможно, редкоиспользуемой)
так и как же сделать по нормальному чтобы иконки всех файлов можно было получить?


 
Song   (2003-01-07 12:14) [9]

Вручную, через реестр или через ExtractAssociatedIcon()


 
Blacki   (2003-01-07 17:08) [10]

2 Song © (07.01.03 12:14)
Вручную, через реестр или через ExtractAssociatedIcon()
Вручную это как??? Через реестр не хочется, мне кажется будет долго, да и там есть такие заморочки ... А ExtractAssociatedIcon() вообще почти не работает


 
Song   (2003-01-07 17:20) [11]

http://delphi.mastak.ru/cgi-bin/faq.pl?look=1&id=988621978&n=15

через реестр долго не будет.


 
Blacki   (2003-01-07 18:54) [12]

2 Song © (07.01.03 17:20)
http://delphi.mastak.ru/cgi-bin/faq.pl?look=1&id=988621978&n=15
так вот именно вот эта функция работает только для очень не многих файлов, плюс узнаёт для имеющегося на диске файла иконку ...


 
creep   (2003-01-16 03:40) [13]

Я пользовался этой функцией в своем приложении...Рабтает.)))
Главное достоенство - не требует физического существования файла.
Возвращает в зависимости от параметра(SmallIcon:boolean) хендл
маленькой(16х16) или большой (32х32) иконки.
(const FileName: String) - имя файла
Например: "ааа.zip"

Удачи.


---------------------------------------

Function IconExt(const FileName: String;SmallIcon:boolean):HIcon;
var nIndex: Integer;
s, sPath: String;
RegNative: TRegistry;
TempL : Hicon;
TempS : Hicon;
begin
RegNative := TRegistry.Create(KEY_READ);
try
RegNative.RootKey := HKEY_CLASSES_ROOT;
s := ExtractFileExt(FileName);
if s = "" then
ExtractIconEx("%SystemRoot%\system32\SHELL32.dll",0,TempL,TempS,1)
else if LowerCase(s) = ".exe" then
ExtractIconEx("%SystemRoot%\system32\SHELL32.dll",2,TempL,TempS,1)
else if RegNative.OpenKeyReadOnly(s) then begin
s := RegNative.ReadString("");
RegNative.CloseKey;
RegNative.OpenKeyReadOnly(Format("%s\DefaultIcon",[s]));
s := RegNative.ReadString("");
sPath := Copy(s,1,Pos(",",s)-1);
if sPath <> "" then //...Jaksho Bute Extension
begin//SpaTh
nIndex := StrToInt(Copy(s,Pos(",",s)+1,Length(s)-Pos(",",s)));
ExtractIconEx(PChar(sPath),nIndex,TempL,TempS,1)
end//SpaTh
else
begin
TempL :=0;
TempS :=0;
end;//else
end
else//Try
ExtractIconEx("%SystemRoot%\system32\SHELL32.dll",0,TempL,TempS,1);
If SmallIcon then
begin
if TempS = 0 then
TempS :=LoadImage(0,IDI_WINLOGO,IMAGE_ICON,LR_DEFAULTSIZE,LR_DEFAULTSIZE,LR_DEFAULTSIZE or LR_DEFAULTCOLOR or LR_SHARED);
Result := TempS
end
else // Smallicon := False;
begin
if tempL = 0 then
TempL :=LoadImage(0,IDI_WINLOGO,IMAGE_ICON,LR_DEFAULTSIZE,LR_DEFAULTSIZE,LR_DEFAULTSIZE or LR_DEFAULTCOLOR or LR_SHARED);
Result := TempL;
end;
finally
RegNative.CloseKey;
RegNative.Free
end
end;





--------------------------------------



Страницы: 1 вся ветка

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

Наверх





Память: 0.6 MB
Время: 0.055 c
14-5786
SniZ
2003-02-11 22:37
2003.03.03
TRegistry


7-5878
Dabus
2003-01-03 07:34
2003.03.03
Большие массивы


3-5447
Steven
2003-02-13 15:05
2003.03.03
Подскажите как просмотреть настройки BDE в run-time е


3-5419
Makhanev A.S.
2003-02-09 23:38
2003.03.03
Прорисовка в DBGrid...


4-5930
Adonis
2003-01-14 19:55
2003.03.03
Как с помощью SendMessage передать строку?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский