Текущий архив: 2003.03.03;
Скачать: CL | DM;
ВнизКак узнать иконку ассоциированную определённому расширению Найти похожие ветки
← →
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 вся ветка
Текущий архив: 2003.03.03;
Скачать: CL | DM;
Память: 0.48 MB
Время: 0.008 c