Aquí les pongo una variante que obtiene el icono basándose únicamente 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;
Ejemplos de uso:
Código Delphi
[-]
ExtractIcon('jpg', Image1.Picture.Icon);
ExtractIcon('dpr', Image2.Picture.Icon);