Erstmal was zur Speicherverwaltung:
(abgesehn davon, daß es eher unklug ist, ein Objekt so zurückzugeben, da man das Prinzip "der Verursacher/Ersteller gibt's auf gleicher Ebene wieder frei" nicht einhalten kann)
Bei einer
Exception würde das Object in AIcon als Speicherleck zurückbleiben.
Delphi-Quellcode:
AIcon := TIcon.Create;
try
AIcon.Handle := FileInfo.HIcon;
AIcon.Transparent := True;
except
AIcon.Free; // bei Fehler freigeben
end;
Result := AIcon;
Delphi-Quellcode:
function FileIcon(FileName: String): TIcon;
var FileInfo: TSHFileInfo;
begin
FillChar(FileInfo, SizeOf(FileInfo), #0);
if SHGetFileInfo(PChar(FileName), 0, FileInfo, SizeOf(FileInfo), SHGFI_ICON) <> 0 then
RaiseLastOSError;
Result := TIcon.Create;
try
Result.Handle := FileInfo.HIcon;
Result.Transparent := True;
except
Result.Free;
end;
end;
(SHGFI_LARGEICON könnte man auch weglassen ... das ist eh 0)
So, zum Problem.
Hmmm, notfalls wirst du wohl in die LNK-Dateien reinsehn müssen.
(irgendwo gab's in der
DP auch 'nen Code zum Auslesen)
Da schauen ob ein Icon zugeordnet ist.
- wenn ja, dann dieses nehmen
- wenn nein, dann über deine Funktion das Icon der Zieldatei besorgen