ich habe jetzt nach einiger zeit eine funktionierende und gute lösung die system-images zu nutzen: (wir holen nur kleine icons)
man braucht ein TListView und ein TImageList.im
OI keine änderungen treffen.
für ListView Data wird deklariert:
Delphi-Quellcode:
type
TMeineDaten = class
aFilename: String;
bIsUpdated: Boolean;
end;
folgendes wird z.b. private in der
unit wo die listview deklariert:
Delphi-Quellcode:
hImgSm: HIMAGELIST; // uses CommCtrl
aFileIcon: TSHFileInfo; // uses ShellAPI
folgendes wird im OnCreate der
unit geschrieben:
Delphi-Quellcode:
hImgSm := HIMAGELIST(SHGetFileInfo('', 0, aFileIcon, SizeOf(aFileIcon), SHGFI_SYSICONINDEX or SHGFI_SMALLICON));
if (hImgSm <> 0) then
ImageList1.Handle := hImgSm;
ImageList1.ShareImages := True;
ListView1.SmallImages := ImageList1;
und folgendes im CustomDrawSubItem der ListView:
Delphi-Quellcode:
if (Item = nil) then
Exit;
if not TMeineDaten(Item.Data).bIsUpdated then
begin
ZeroMemory(@aFileIcon, SizeOf(aFileIcon));
SHGetFileInfo(PChar(TMeineDaten(Item.Data).aFilename), 0, aFileIcon, SizeOf(aFileIcon), SHGFI_SYSICONINDEX or SHGFI_SMALLICON);
Item.ImageIndex := aFileIcon.iIcon;
TMeineDaten(Item.Data).bIsUpdated := True;
end;
Item zur ListView hinzufügen:
Delphi-Quellcode:
var
aIem: TListItem;
aMeineDaten: TMeineDaten;
begin
aMeineDaten:= TMeineDaten.Create;
aMeineDaten.aFilename := 'C:\meineDatei.exe';
aMeineDaten.bIsUpdated := False;
aItem := ListView1.Items.Add;
aItem.Caption := 'meineDatei.exe';
aItem.SubItems.Add('meineDatei SubItem');
aItem.Data := aMeineDaten;