Kannst du mir zeigen, wie du das umgesetzt hast?
Hat jede Datei ein festes Icon oder das was zur Datei dazugehört und dynamisch bestimmt?
Nun bei dem hier.. bekommst du ja nur ein festes Icon oder?
SHGetFileInfo('', 0, Info, SizeOf(TSHFileInfo), SHGFI_USEFILEATTRIBUTES or SHGFI_ICON or SHGFI_SYSICONINDEX or SHGFI_SMALLICON);
Und zwar das des Laufwerks.
Das liegt dran weil du keine Datei zum auswerten vorgibst.
Dann verwendest du die falsche Funktion
Du muss dafür jedoch noch
Vcl.ImgList in den uses hinzufügen.
Nicht VSTGetImageIndex sondern VSTGetImageIndexEx
Delphi-Quellcode:
procedure TForm1.VSTGetImageIndexEx(Sender: TBaseVirtualTree;
Node: PVirtualNode; Kind: TVTImageKind; Column: TColumnIndex;
var Ghosted: Boolean; var ImageIndex: TImageIndex;
var ImageList: TCustomImageList);
var
Info: TSHFileInfo;
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; // Den aktuellen Index der Node
end;
end;
in create
Delphi-Quellcode:
SmallImages := TImageList.Create(Self);
SmallImages.ShareImages := True;
VST.Images := SmallImages;
VST.Images.ColorDepth := cd32Bit; // Unbedingt wichtig damit du keinen schwarzen Hintergrund bei den Icons hast
VST.Images.DrawingStyle := dsTransparent; // Transparenz einschalten
// *********
TreeDataKlassen.Add(TreeData);
ZeroMemory(@Info, SizeOf(TSHFileInfo)); // Speicher bereinigen
SHGetFileInfo('', 0, Info, SizeOf(TSHFileInfo), SHGFI_USEFILEATTRIBUTES or SHGFI_ICON or SHGFI_SYSICONINDEX or SHGFI_SMALLICON); //Icon Holen
if Info.hIcon <> 0 then
begin
Icon := TIcon.Create;
Icon.Handle := Info.hIcon;
VST.Images.AddIcon(Icon); // VST.Images = SmallImages
FreeAndNil(Icon);
end;
Du kannst das Hicon noch freigeben nach FreeAndNil(Icon)
DestroyIcon(Info.hIcon);
glaube aber nicht das dass nötig ist weil TIcon ja nach der Übergabe der Eigentümer des
handle ist und es auch frei gibt bei Free.
Ich hoffe du kommst klar.
teste es mit deinem minimalen Sample.
Dein Projekt zurück.. wenn es hilft gut wenn nicht ab in die Tonne. Siehe meine Kommentare im code
Habe genug mit dem Kram rum gespielt. Canvas erlaubt das zeichnen nun wieder sogar mit Icons
Meine Meinung VirtualStringTree ist einfach nur müll es ist nicht möglich an den Index der Node zu kommen.
So wie du das gerne möchtest ist es nicht möglich.