//exe auswählen
procedure TForm1.Button1Click(Sender: TObject);
begin
if OpenDialog1.Execute
then
DrawFile(OpenDialog1.FileName);
Image1.Picture.SaveToFile(ExtractFilePath(ParamStr(0))+'
Icon.bmp');
Image1.Width:=20;
Image1.Height:=18;
Image1.Picture.LoadFromFile(ExtractFilePath(ParamStr(0))+'
Icon.bmp');
Image1.Stretch:=true;
end;
//Icon auslesen:
procedure TForm1.DrawFile(
Name:
String);
var
FileInfo: TSHFileInfo;
ImageListHandle: THandle;
aIcon: TIcon;
begin
// Speicher löschen
FillChar(FileInfo, SizeOf(FileInfo), #0);
// Handle der Image Liste der ausgewählten Datei ermitteln
ImageListHandle := SHGetFileInfo(
PChar(
Name), 0, FileInfo, SizeOf(FileInfo),
// großes Icon verlangen
SHGFI_ICON
or SHGFI_LARGEICON
);
try
// TIcon Objekt erstellen
aIcon := TIcon.Create;
try
// Icon Handle zuweisen
aIcon.Handle := FileInfo.hIcon;
// Transparent darstellen
aIcon.Transparent := True;
with Image1
do begin
// Paintbox auf die entsprechende Größe bringen
Width := aIcon.Width;
Height := aIcon.Height;
Application.ProcessMessages;
// Paintbox löschen
Canvas.Rectangle(-1, -1, Succ(Width), Succ(Height));
// Icon darstellen
Canvas.Draw(0, 0, aIcon);
end;
finally
// TIcon Objekt freigeben
FreeAndNil(aIcon);
end;
finally
// Icon der Shell wieder freigeben
DestroyIcon(FileInfo.hIcon);
// Icon Liste der Shell wieder freigeben
{ImageList_Destroy(ImageListHandle);}
end;
end;