![]() |
VirtualStringTree zeigt keine Icons aus System ImageList an
Hey,
ich versuche grade verzweifelt Icons aus der System ImageList in meinem VirtualTreeView anzuzeigen. Doch leider bleiben die Symbole hartnäckig leer. :-? Aus meinem Testprojekt:
Delphi-Quellcode:
procedure InitialisiereIcons;
var SysIL : HImageList; Info : TSHFileInfo; SmallImages : TImageList; begin SmallImages := TImageList.Create(Form1); SysIL := SHGetFileInfo('', 0, Info, SizeOf(TSHFileInfo), SHGFI_SYSICONINDEX or SHGFI_SMALLICON); if SysIL <> 0 then begin SmallImages.Handle := SysIL; SmallImages.ShareImages := TRUE; virtualstringtree1.Images := SmallImages; end; end;
Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
var Newitem : pvirtualnode; nodedata: pnodedata; Info : TSHFileInfo; I: Integer; begin NewItem := virtualstringtree1.AddChild(nil); nodedata := virtualstringtree1.GetNodeData(newitem); nodedata^.Caption := 'test.pdf'; SHGetFileInfo(PChar(nodedata^.Caption) ,FILE_ATTRIBUTE_NORMAL, Info, SizeOf(TShFileInfo), SHGFI_SYSICONINDEX or SHGFI_USEFILEATTRIBUTES); nodedata^.ImageIndex := Info.IIcon; end;
Delphi-Quellcode:
Selber Code in einem TListView funktioniert wunderbar :wall:
procedure TForm1.VirtualStringTree1GetImageIndex(Sender: TBaseVirtualTree;
Node: PVirtualNode; Kind: TVTImageKind; Column: TColumnIndex; var Ghosted: Boolean; var ImageIndex: Integer); var NodeData: PNodeData; begin NodeData := VirtualStringTree1.GetNodeData(Node); if assigned(nodedata) then begin imageindex := nodedata^.imageindex; end; end; procedure TForm1.VirtualStringTree1GetText(Sender: TBaseVirtualTree; Node: PVirtualNode; Column: TColumnIndex; TextType: TVSTTextType; var CellText: string); var NodeData: PNodeData; begin NodeData := VirtualStringTree1.GetNodeData(Node); if assigned(nodedata) then begin celltext := nodedata^.Caption; end; end; Viele Grüße Zacherl |
AW: VirtualStringTree zeigt keine Icons aus System ImageList an
Edit: Es klappt auch bei anderen Komponenten, nur nicht beim VST wie es scheint.
Mist jetzt hab ich auch noch ausversehen auf "neuer Beitrag" geklickt -.- |
AW: VirtualStringTree zeigt keine Icons aus System ImageList an
Gibt es bei Icons vielleicht ein spezielles Format? Unter Windows 7 gibts ja irgendwie so "neue" Icons, weiß hier aber leider nicht genau bescheid.
|
AW: VirtualStringTree zeigt keine Icons aus System ImageList an
Habs grade selbst gelöst :eek: Im GetImageIndex Event gibt es eine Eigenschaft "Kind: TVTImageKind" die kann teilweise den Wert ikOverlay haben. Ist dies der Fall, wird einfach ein weiteres Icon, über das Standardicon drübergemalt.
Meine Routine hat zwar das Icon gesetzt, aber dieses wurde vom Overlay einfach komplett übermalt :wall: Jetzt prüfe ich am Anfang auf "Kind <> ikOverlay", was nun zum gewünschten Ergebnis führt :) |
AW: VirtualStringTree zeigt keine Icons aus System ImageList an
Interessant wäre dann noch zu wissen, was für ein Icon dann als Overlay gezeichnet werden sollte? Du selbst hast ja scheinbar keines angegeben und als Overlay verstehe ich es so, dass das "Grundicon" bestehen bleibt und zusätzlich noch eines darüber gezeichnet wird. Daher wird ein Clear der Zeichenfläche wohl nicht implementiert sein.
|
AW: VirtualStringTree zeigt keine Icons aus System ImageList an
Also der VST ruft die GetImageIndex Funktion jeweils 2x für jede Node auf. Das erste mal mit ikNormal und das zweite Mal mit ikOverlay. So funktioniert es nun:
Delphi-Quellcode:
Vorher hatte ich nur die erste Zeile weggelassen. Das Komische ist, dass auch im Overlay Call der ImageIndex korrekt gesetzt wird. Das normale Icon wird dann allerdings komplett mit clWindow übermalt. Mir als Benutzer des VST erscheint dieses Verhalten auch eher ungewollt. Zumindest erkenne ich keine Logik dahinter.
procedure TfrmFileManager.vtFileListGetImageIndex(Sender: TBaseVirtualTree;
Node: PVirtualNode; Kind: TVTImageKind; Column: TColumnIndex; var Ghosted: Boolean; var ImageIndex: Integer); var NodeData: PFileNodeData; begin if (Kind = ikOverlay) or (Column <> 0) then Exit; NodeData := vtFileList.GetNodeData(Node); if Assigned(NodeData) then begin ImageIndex := NodeData^.ImageIndex; end; end; |
AW: VirtualStringTree zeigt keine Icons aus System ImageList an
Wenn du eine Demoanwendung bauen würdest, könnten wir mitknobeln :)
Vielleicht ist es ja ein Bug, dann kannst du es im Forum von VST melden (ist glaub googledocs?) |
AW: VirtualStringTree zeigt keine Icons aus System ImageList an
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:02 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz