Hi DPler,
dieser Beitrag habe ich zum ersten Mal am 19.6.2002 bei Delphi3000.com veröffentlicht. Nach und nach werde ich verschiedene meiner Beiträge hier einbringen.
Dieses Code Snippet ermöglicht es Euch das Icon jeder Datei so zu ermitteln, wie es auch der Windows Explorer tut. Dazu benötigt man die Funktion
SHGetFileInfo aus der
Unit ShellAPI.
Erstellt einfach eine neue Anwendung und fügt eine
PaintBox, einen
Button und einen
OpenDialog zum Form dazu. In das OnClick Ereigniss des Buttons müsst Ihr folgende Zeilen aufnehmen:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
if OpenDialog1.Execute then
DrawFile(OpenDialog1.FileName);
end;
Ausserdem benötigt Ihr noch die Methode
DrawFile und schon gehts los.
Delphi-Quellcode:
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 PaintBox1
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;
Vielleicht hilft es wenigstem einem von Euch.
Ciao,
[edit=Matze][pre] durch [delphi]-Tags ersetzt. Mfg, Matze[/edit]