Und da man die System-ImageList nicht selbst verändern soll, kann man diese in eine eigene kopieren.
Delphi-Quellcode:
procedure Createimages;
var
SysIL : uint;
SFI : TSHFileInfo;
SysSmallImages, SysLargeImages: TImageList;
i: Integer;
begin
SysLargeImages := TImageList.Create(MainForm);
SysSmallImages := TImageList.Create(MainForm);
try
SysIL := SHGetFileInfo('', 0, SFI, SizeOf(SFI), SHGFI_SYSICONINDEX or SHGFI_LARGEICON);
if SysIL <> 0 then begin
SysLargeImages.Handle := SysIL;
SysLargeImages.ShareImages := TRUE;
end;
SysIL := SHGetFileInfo('', 0, SFI, SizeOf(SFI), SHGFI_SYSICONINDEX or SHGFI_SMALLICON);
if SysIL <> 0 then begin
SysSmallImages.Handle := SysIL;
SysSmallImages.ShareImages := TRUE;
end;
for i := MainForm.SmallImages.Count - 1 downto 2 {Anzahl der verbleibenden Images} do
MainForm.SmallImages.Delete(i);
MainForm.SmallImages.AddImages(SysSmallImages);
for i := MainForm.LargeImages.Count - 1 downto 2 {Anzahl der verbleibenden Images} do
MainForm.LargeImages.Delete(i);
MainForm.LargeImages.AddImages(SysLargeImages);
finally
SysLargeImages.Free; // wird nicht mehr benötigt
SysSmallImages.Free; // wird nicht mehr benötigt
end;
end;
Bei diesem Code gehe ich davon aus, das zwei TImageList Komponenten SmallImages und LargeImages auf dem Formular liegen und mit der ListView verknüpft sind.
Und beim Hinzufügen der ListItems müssen die festen Images natürlich berücksichtigt werden:
NewItem.ImageIndex := Info.IIcon + 2 {Anzahl der festen Images};