Según se indica en el truco citado de trucomanía, ExtractAssociatedIcon tendrá la desventaja de que debe aplicarse sobre un archivo existente.
Partiendo de ahí, me he tomado la libertad de hacer otra función, basada sólo en la extensión del archivo:
Código Delphi
[-]
procedure ExtractIcon(FileExt: String; Icon: TIcon; SmallIcon: Boolean = false);
var
il: TImageList;
fi: TShFileInfo;
flags: Cardinal;
idx: Integer;
begin
ShGetFileInfo(
PChar('.' + FileExt), 0, fi, SizeOf(fi),
SHGFI_SYSICONINDEX or SHGFI_USEFILEATTRIBUTES
);
idx := fi.iIcon;
il := TImageList.Create(nil);
try
if SmallIcon then flags := SHGFI_SMALLICON else flags := SHGFI_LARGEICON;
il.Handle := ShGetFileInfo('', 0, fi, SizeOf(fi), SHGFI_SYSICONINDEX or flags);
il.GetIcon(idx, Icon);
finally
il.Free;
end;
end;
La usaríamos, por ejemplo, así:
Código Delphi
[-]
ExtractIcon('jpg', Image1.Picture.Icon);
o bien
Código Delphi
[-]
ExtractIcon('jpg', Image1.Picture.Icon, true);
si queremos el icono pequeño.
// Saludos