Hi,
ich habe das auf folgende Weise realisiert (funktioniert einwandfrei)
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
var
SHFileInfo: TSHFileInfo;
SysIcons: THandle;
begin
GlobalImageList := TImageList.Create(Self); // ist im private feld des forms
try
SysIcons := SHGetFileInfo(PChar(copy(ParamStr(0), 1, 3)), 0, SHFileInfo,
SizeOf(SHFileInfo), SHGFI_SYSICONINDEX or SHGFI_SMALLICON or
SHGFI_ICON);
finally
DestroyIcon(SHFileInfo.hIcon);
end;
GlobalImageList.Handle := SysIcons;
end;
und dann der Code der mir das Icon holt
Delphi-Quellcode:
function GetAssociatedIcon(const AExtension: string; ASmall: Boolean): HIcon;
var
Info: TSHFileInfo;
Flags: Cardinal;
begin
if ASmall then
Flags := SHGFI_ICON or SHGFI_SMALLICON or SHGFI_USEFILEATTRIBUTES
else
Flags := SHGFI_ICON or SHGFI_LARGEICON or SHGFI_USEFILEATTRIBUTES;
SHGetFileInfo(PChar(AExtension), FILE_ATTRIBUTE_NORMAL, Info, SizeOf(TSHFileInfo), Flags);
Result := Info.hIcon;
end;
so etwa siehts dann beim hinzufügen aus
Delphi-Quellcode:
procedure TForm1.Datei_Hinzufuegen(const Datei: String);
var
Icon: TIcon;
Item: TListItem;
begin
lwFileExplorer.Items.Clear;
lwFileExplorer.SmallImages := GlobalImageList;
Icon := TIcon.Create;
try
Icon.Handle := GetAssociatedIcon(ExtractFileExt(Datei), True);
Icon.Transparent := True;
Item := lwFileExplorer.Items.Add;
Item.ImageIndex := GlobalImageList.AddIcon(Icon);
Item.Caption := ExtractFileName(Datei);
finally
Icon.Free;
end;
end;
Bei mir (Delphi7) klappen alle Codes ohne Probleme, ich bekomme immer das
Handle des Icons zurück.
mfG
mirage228