hier ist ein beispiel zu iIcon aber es funktionier nicht mit iner ListView (vorher war überall ComboBoxEx):
Also das es eine Art ImageList vom System gibt, ist mir schon länger bewußt, aber ich hab mich damit noch nicht näher beschäftigt. Ich bin jemand der Hausmannskost liebt, versuch also eigene Lösungen zu finden.
Damit aber mein Beispiel damit funktioniert (aber wie gesagt, ohne Gewähr) muss es so geändert werden:
Delphi-Quellcode:
implementation
...
var
sfiTest: TSHFILEINFO; //***NEU
procedure TForm1.FormCreate(Sender: TObject);
...
begin
...
SmallImages := ImageList1;
ImageList1.Handle := SHGetFileInfo('C:\', 0, sfiTest, SizeOf(sfiTest), SHGFI_SYSICONINDEX or SHGFI_SMALLICON); //***NEU
...
end;
function GetFileTypeNameAndIcon3(const FileName: String; //***Andere Funktion
out FileTypeName: String; out IconIndex: Integer): Boolean;
var
sfi: TSHFILEINFO;
begin
Result := SHGetFileInfo(PChar(FileName), 0, sfi, SizeOf(sfi), SHGFI_TYPENAME or SHGFI_ICON or SHGFI_SMALLICON) <> 0;
if Result then
begin
FileTypeName := sfi.szTypeName;
IconIndex := sfi.iIcon; //iIcon und nicht hIcon
end;
end;
procedure TForm1.ListView1CustomDrawSubItem(Sender: TCustomListView;
Item: TListItem; SubItem: Integer; State: TCustomDrawState;
var DefaultDraw: Boolean);
var
...
FileIconIndex: Integer;
...
begin
...
if not FileInfoEx2.IsUpToDate then //***Änderung
begin
with FileInfoEx2 do GetFileTypeNameAndIcon3(Path + Name, FileTypeName, FileIconIndex);
Item.SubItems[1] := FileTypeName;
Item.ImageIndex := FileIconIndex;
FileInfoEx2.IsUpToDate := True;
end;
...
end;
Ob es richtig ist, weiß ich noch nicht, es funktioniert aber.