Damit habe ich dasselbe Problem wie mit SHGetFileInfo. Alles ruckelt und ist langsam gefolgt von seltsamen Canvas-Fehlern.
IconCache? Klingt irgendwie kompliziert und für mich nicht umsetzbar. Obwohl es interessant klingt. Würde man da einfach alle Dateiendungen die es gibt durchgehen, SHGetFileInfo aufrufen und sich das Info.iIcon holen?
Ich habe das jetzt so und es ruckelt ohne Ende.
Delphi-Quellcode:
procedure TForm1.VSTInitNode(Sender: TBaseVirtualTree; ParentNode, Node: PVirtualNode; var InitialStates: TVirtualNodeInitStates);
var
Info: TSHFileInfo;
begin
Node.SetData<TTreeData>(TreeDataKlassen[Node.Index]);
if TreeDataKlassen[Node^.Index].IconIndexSpalte1 = -1 then
begin
SHGetFileInfo(PChar(TreeDataKlassen[Node^.Index].PfadSpalte1), FILE_ATTRIBUTE_NORMAL, Info, SizeOf(TSHFileInfo), SHGFI_SYSICONINDEX or SHGFI_ICON or SHGFI_SMALLICON);
TreeDataKlassen[Node^.Index].IconIndexSpalte1 := Info.iIcon;
end;
end;
procedure TForm1.VSTGetImageIndex(Sender: TBaseVirtualTree; Node: PVirtualNode; Kind: TVTImageKind; Column: TColumnIndex; var Ghosted: Boolean; var ImageIndex: TImageIndex);
begin
if (not(Column in [0, 1])) or (not Assigned(TreeDataKlassen)) then
Exit;
if Kind in [ikNormal, ikSelected] then
begin
ImageIndex := TreeDataKlassen[Node^.Index].IconIndexSpalte1;
end;
end;
Wie man da mit der ImageList arbeiten soll, ist für mich immer noch ein großes Geheimnis.