Ich hab da mal n fetzen Code für dich, den ich vor ca. 5 Jahren mal gefunden hab. Er zwar nicht sehr gut, aber er funktioniert (bei mir
):
Diese Funktion im FormCreate-Event aufrufen:
Delphi-Quellcode:
procedure Createimages;
var
SysIL : uint;
SFI : TSHFileInfo;
begin
LargeImages := TImageList.Create(MainForm);
SysIL := SHGetFileInfo('', 0, SFI, SizeOf(SFI), SHGFI_SYSICONINDEX or SHGFI_LARGEICON);
if SysIL <> 0 then begin
LargeImages.Handle := SysIL;
LargeImages.ShareImages := TRUE;
end;
SmallImages := TImageList.Create(MainForm);
SysIL := SHGetFileInfo('', 0, SFI, SizeOf(SFI), SHGFI_SYSICONINDEX or SHGFI_SMALLICON);
if SysIL <> 0 then begin
SmallImages.Handle := SysIL;
SmallImages.ShareImages := TRUE;
end;
MainForm.ListView.LargeImages:=LargeImages;
MainForm.ListView.SmallImages:=SmallImages;
end;
Und dann einfach einlesen:
Delphi-Quellcode:
procedure VerzeichnisEinlesen(VerzName:string);
var NewItem : TListItem;
Info : TSHFileInfo;
SR : TSearchRec;
begin
MainForm.ListView.Items.BeginUpdate;
if VerzName[length(VerzName)]<>'\' then
VerzName:=VerzName+'\';
with MainForm do begin
ListView.Items.Clear;
if FindFirst(VerzName+'*.*',faAnyFile,SR)=0 then begin
repeat
if (length(SR.Name)>0) and (SR.Name[1]<>'.') then begin
NewItem:=ListView.Items.Add;
NewItem.Caption:=SR.Name;
SHGetFileInfo(PChar(VerzName+SR.Name),0,Info,SizeOf(TSHFileInfo),SHGFI_SYSIconIndex or SHGFI_TYPENAME);
NewItem.ImageIndex:=Info.IIcon;
NewItem.SubItems.Add(Info.szTypeName);
end;
until FindNext(SR)<>0;
FindClose(SR);
end;
end;
MainForm.ListView.Items.EndUpdate;
end;
Wenn du das hast, musst du einfach noch SHGetFileInfo anpassen (nur die Extension und ich glaub, du musst noch einen Parameter am schluss mir OR hinzufügen)