![]() |
Re: VirtualStringTree: Problem mit ImageIndex
Zitat:
Der Beitrag ist im Forum und es können ihn auch heute noch alle lesen. Es gab damals keine Erklärung und damit ist er genauso aktuell wie 2004, da es seit damals KEINE brauchbarere Beschreibung als die von Phillip und Sven gab und seit dem auch eine Weiterentwicklung erfolgte. Dem trage ich Rechnung und poste hier eben den aktuellen Stand. Wenn du ein Spezialist auf dem Bereich des Virtual TreeView bist, dann trage doch was dazu bei, daß andere es leichter haben, diese tolle Komponente einzusetzen. Deine konstruktiven Beiträge sind gerne willkommen. mfg Wolfgang |
Re: VirtualStringTree: Problem mit ImageIndex
Danke für den Hinweis, denn ich hatte bis vor ein paar Monaten noch Delphi5 und kein VirtualTreeView im Einsatz. Wollte jetzt mit D2007 schon längst mal die Komponente anschauen und das verschoben... was ich aber die Tage mit dem Tutorial mal nachholen werden.
|
Re: VirtualStringTree: Problem mit ImageIndex
Tutorials gibt es viele:
Bei uns hier als Video: ![]() oder im Delphi-Treff: ![]() Im Entwickler Magazin:
|
Re: VirtualStringTree: Problem mit ImageIndex
Auch noch ein Tipp von mir
Delphi-Quellcode:
Viele wissen nicht genau, was man mit UserData anfangen kann.
function AddChild(Parent: PVirtualNode; UserData: Pointer = nil): PVirtualNode;
Es ist aber ganz nützlich, weil man damit Daten noch vor dem OnInitNode Event dem Knoten zuweisen kann. Der Parameter UserData wird dabei direkt auf die ersten 4 Bytes des Records gesetzt. D.h.
Delphi-Quellcode:
Da kommen die Daten rein. Dabei muss es sich nicht um ein Pointer handeln, auch eine Klasseninstanz oder Interface geht - also alles was 4 Byte beansprucht. Nur sollte im Record auch wirklich ein 4 Byte Typ stehen und nicht etwa weniger. Sonst kommt es gerne mal zu Nebenwirkungen.
Type
PMyNodeData = ^TMyNodeData; TMyNodeData = record MyData : Pointer; <-- UserData aus AddChild Rest ... end; Wenn man UserData benutzt, bekommt der Knoten einen State zugewiesen, so dass man dies in OnInitNode überprüfen kann :
Delphi-Quellcode:
Wichtig zu wissen ist dabei, dass der var Parameter InitialStates von OnInitNode nicht diesen Status enthält.
if vsInitialUserData in Node.States then
|
Re: VirtualStringTree: Problem mit ImageIndex
Zitat:
Ich kann mir momentan noch keine Vorstellung für einen sinnvollen Einsatz machen. LG Wolfgang |
Re: VirtualStringTree: Problem mit ImageIndex
Naja,
wenn du deine Daten nin OnInitNode initialisieren willst, dann kannst du da gleich z.b. ein Objekt reinstecken, so dass du weitere Berechnungen eben in dieser Funktion machen kannst. Dann gibt es noch das Problem, dass zwischen AddChild und ein folgendes GetNodeData viel passieren kann, so z.B. kann mit toAutoSort der Tree automatisch sortiert werden. Da werden dann nicht initialisierte Daten verglichen. |
Re: VirtualStringTree: Problem mit ImageIndex
Ich habe das genau entgegengesetzte Problem: Ich habe eine ImageList mit 4 Overlay-Icons und dahinter den normalen Icons. Im OnGetImageIndex weise ich passend den ImageIndex zu ... aber man sieht keine Overlay Icons. Muss man noch eine Option zuschalten oder was muss ich tun, damit er die Overlay-Icons auch zeichnet?
|
Re: VirtualStringTree: Problem mit ImageIndex
Meistens sind es eher Fehler im entwickelten Quelltext.
|
Re: VirtualStringTree: Problem mit ImageIndex
Zitat:
Tutorial: ![]() Wenn du mir ein Beispiel geben könntest für die Verwendung (Notwendigkeit) von OverlayIcons, dann würde ich mir das mal näher ansehen. LG Wolfgang |
Re: VirtualStringTree: Problem mit ImageIndex
Hallo,
um die Bilder als Overlay nutzen zu können, muss man sie einmalig anmelden:
Delphi-Quellcode:
Gruß Hawkeye
procedure TForm1.FormCreate (Sender: TObject);
begin Tree.Images := ImageList1; // über OI zuweisen ImageList1.Overlay(21, 0); // Bild #21 wird Overlay-Icon #0 ImageList1.Overlay(42, 1); // Bild #42 wird Overlay-Icon #1 end; procedure TForm1.TreeGetImageIndex(Sender: TBaseVirtualTree; Node: PVirtualNode; Kind: TVTImageKind; Column: TColumnIndex; var Ghosted: Boolean; var ImageIndex: Integer); begin case Kind of ikNormal, ikSelected: ImageIndex := Random(16); ikOverlay: ImageIndex := Node.Index and 1; else ImageIndex := -1; end; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:34 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-2025 by Thomas Breitkreuz