![]() |
AW: Virtualstringtree suchen mit Child-Nodes
Hallo Haentschman,
danke erstmal für Deine antwort. Grundlegend könnte ich das so aufbauen. Aber trotzdem stelle ich mir die Frage, warum das so ist. Im OnInit des VST sagen ich den Nodes doch, das Sie Childs haben.
Delphi-Quellcode:
Nach dem Programmstart, ist das auch so im VST ersichtlich. Nur wenn ich suche, wird das "+"+ zum öffnen der Childs nicht mehr angezeigt. Doppelklick öffnet aber das Child.
procedure TfReportClient.vstKundenInitNode(Sender: TBaseVirtualTree; ParentNode,
Node: PVirtualNode; var InitialStates: TVirtualNodeInitStates); begin case vstKunden.GetNodeLevel(Node) of 1: begin vstKunden.HasChildren[Node] := True; end; 2: begin vstKunden.HasChildren[Node] := True; end; 3: begin vstKunden.HasChildren[Node] := True; end; end; end; |
AW: Virtualstringtree suchen mit Child-Nodes
Das habe ich nie benutzt. Ich habe einfach immer ChildCount auf 1 gesetzt. Damit hatte ich dieses Problem bisher nicht.
|
AW: Virtualstringtree suchen mit Child-Nodes
Liste der Anhänge anzeigen (Anzahl: 3)
Zitat:
Gruß Jens |
AW: Virtualstringtree suchen mit Child-Nodes
Ja, das ist mir schon klar. Ich habe aber nicht HasChildren gesetzt, sondern immer ChildCount auf 1. Wenn dann ausgeklappt wurde, habe ich den echten Wert für ChildCount gesetzt usw.
Das mag nicht die schönste Lösung sein, aber HasChildren hatte ich nicht gefunden und es funktioniert problemlos. |
AW: Virtualstringtree suchen mit Child-Nodes
Zitat:
Delphi-Quellcode:
Tree.Expanded[Node] := True;
Tree.Expanded[Node] := False; |
AW: Virtualstringtree suchen mit Child-Nodes
Zitat:
Beim suchen, prüfen ich ja immer nur im "NodeLevel 1". Daher blende ich ja "NodeLevel 2 und 3" niemals aus. Ich verstehe daher nicht, warum nach dem erstellen die "+" zeichen sichbar sind und nach dem Suchen nicht mehr. Das OnInit wird doch auch nur beim Initialieren der Nodes ausgeführt und hat daher beim suche keine relevance. :gruebel::gruebel::gruebel: |
AW: Virtualstringtree suchen mit Child-Nodes
Also ich benutze auch die Events
Delphi-Quellcode:
und
OnInit()
Delphi-Quellcode:
und bei mir funktioniert das problemlos. Der einzige Unterschied ist, dass ich im
OnInitChildren()
Delphi-Quellcode:
nicht die Property
OnInit()
Delphi-Quellcode:
benutze, sondern über den Var-Parameter
HasChildren[Node]
Delphi-Quellcode:
den initialen Status der Node zurückgebe. Hab mich zwar schnell mit dem Texteditor durch das Event geklickt und keine großen Auffälligkeiten gefunden was dort anders gemacht wird, aber vielleicht hilft es ja. Bei mir funktioniert es jedenfalls problemlos. Und ich benutzte einige tausende Nodes als ChildNodes die erst initialisiert werden wenn ich sie wirklich brauche.
InitialStates
|
AW: Virtualstringtree suchen mit Child-Nodes
Also bei mir klappt das auch mit dem
Delphi-Quellcode:
Hier mal ein Teil des Codes...
InitialStates := InitialStates + [ivsHasChildren];
Delphi-Quellcode:
Vieleicht fehlt ja irgendetwas auf...
//InitNode
procedure TfReportClient.vstKundenInitNode(Sender: TBaseVirtualTree; ParentNode, Node: PVirtualNode; var InitialStates: TVirtualNodeInitStates); var NodeLevel : Integer; begin NodeLevel := vstKunden.GetNodeLevel(Node); case NodeLevel of 1: InitialStates := InitialStates + [ivsHasChildren]; 2: InitialStates := InitialStates + [ivsHasChildren]; 3: InitialStates := InitialStates + [ivsHasChildren]; end; end; //EditChange Suche procedure TfReportClient.edtSearchChange(Sender: TObject); begin vstKunden.BeginUpdate; vstKunden.IterateSubtree(nil, SpeedSearch, Pointer(edtSearch.Text), [], true); vstKunden.EndUpdate; end; //Methode SpeedSearch procedure TfReportClient.SpeedSearch(Sender: TBaseVirtualTree; Node: PVirtualNode; Data: Pointer; var Abort: Boolean); var Kunden_Daten : PCustomersData; NodeLevel, i : integer; ws: string; begin try NodeLevel := vstKunden.GetNodeLevel(Node); if NodeLevel = 1 then begin ws := string(Data); //Diverse Suchoptionen //... //... //... { Sucht im Kundennamen von Anfang des Strings } vstKunden.IsVisible[Node] := (ws = '') or (pos(AnsiUpperCase(ws), AnsiUpperCase(TOCustomers(Kunden_Daten.FCustomer_Object).Kunden_Kundenname)) = 1); end except //Fehlerbehandlung end; end; Gruß Jens |
AW: Virtualstringtree suchen mit Child-Nodes
Also wo auch immer das dran liegt. Ich bekomme es nicht in den Griff...
Noch jemand einen Vorschlag... |
AW: Virtualstringtree suchen mit Child-Nodes
So, ich habe das ganze jetzt gelöst. Allerdings wirklich nur auf die Art und Weise, dass ich den Nodes jeweils ein Child zugefügt habe. Beim initialsieren (Expanding) des Nodes, führe ich erste ein...
Delphi-Quellcode:
aus und füge erst dann die richtigen Nodes mit den Daten zu.
vst.DeleteChildren(Node)
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:48 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