Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi VirtualTreeview Nodes und Expand (https://www.delphipraxis.net/75180-virtualtreeview-nodes-und-expand.html)

hanspeter 15. Aug 2006 15:07


VirtualTreeview Nodes und Expand
 
Hallo,
ich habe mit dem VST immer noch ein paar Verständnisprobleme.
Ich möchte von außen eine Gruppe von Nodes selektieren und anzeigen.

Dazu übergebe ich die Node-Adressen in einer Liste.

Data.Treeview.VST.ClearSelection;

Für jeden Node der Liste arbeite ich die Anweisung VST.Selected[Node] := true
ab.

Den Parent des ersten Nodes merke ich und als letzte Anweisung
dann VST.Expanded[Node.Parent] := true;

Leider funktioniert das nicht in der gewünschten Form, wenn mehr als ein Knoten selektiert ist.
die alternative Verwendung von VST.Select(Node,true) bringt auch nicht den gewünschten Erfolg.

Hat wer einen Tip?

Und noch eine Verständnisfrage.
Die Node-Adressen werden ja als Index verwendet.
Kann ich nach der Initialisierung des Treeview die Node-adressen als konstant ansehen oder
ändern sich diese? (z.B. beim Einfügen und Löschen von Knoten.)

Mit Gruß
Peter

hanspeter 16. Aug 2006 06:11

Re: VirtualTreeview Nodes und Expand
 
Mehrfachselektion in einem Virtualtreeview und anschließend expand des selektierten Knotens bzw. des Parent, hat das noch keiner gemacht?
Für einen Tip dankbar.

Gruß Peter

mirage228 16. Aug 2006 12:06

Re: VirtualTreeview Nodes und Expand
 
Hi,

Also ich habe noch nicht ganz verstanden, wie genau das bei dir ablaufen soll.
Du markierst also mehrere "Nodes", wovon eines fokusiert ist (FocusedNode), und dessen Parant soll expandiert werden?

Also zur korrekten Auswahl der Nodes habe ich folgenden Code (hat bei mir manchmal auch Probleme gemacht):
Delphi-Quellcode:
   // vstNavigation ist hier mein VirtualTreeView
  vstNavigation.FocusedNode := Node;
  vstNavigation.Selected[Node] := True;
  // die restlichen selektieren... //
  // evtl. dann hier das .Expanded[Node] := True //
  vstNavigation.Invalidate;

hanspeter 16. Aug 2006 12:50

Re: VirtualTreeview Nodes und Expand
 
So mache ich es ja.
Wird nur ein Knoten focusiert und dann selektiert, funktioniert es auch.
Selektiere ich mehr als einen Knoten, dann funktioniert es nicht, sondern das Treeview wird fullcollapsed.

Beim schrittweisen Debuggen klappt es übrigens manchmal.

Gruß Peter

Onkelrossie 16. Aug 2006 18:12

Re: VirtualTreeview Nodes und Expand
 
Hallo hanspeter,
mit den Funktionen "GetFirstSelected" und "GetNextSelected" bekommst du den ersten und die darauf folgenden Nodes die Selectiert sind. Das übergibst du dann in einer Repeat-Until-Schleife der Variable "Node" die das ganze solange bis zum letzten selectierten Node wiederholt.
In etwa so (Code nicht getestet):

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  Node : PVirtualNode;                //x beliebige variable die auf PVirtualNode zeigt
begin
  Node := VST.GetFirstSelected;       //erster selectierter Node wird ausgelesen und übergeben
  repeat                              //führe folgende Befehle...
    VST.Expanded[Node] := True;       //Node ausklappen wenn er Selectiert ist
    Node := VST.GetNextSelected(Node); //nächsten selectierten Node auslesen
  until (Node = vST.GetFirst);        //...solange bis wieder der erste Node erreicht ist
end;
Ich hoffe ich konnte dir helfen.


HG
Onkelrossie

hanspeter 18. Aug 2006 08:08

Re: VirtualTreeview Nodes und Expand
 
Zitat:

Zitat von Onkelrossie
Hallo hanspeter,
mit den Funktionen "GetFirstSelected" und "GetNextSelected" bekommst du den ersten und die darauf folgenden Nodes die Selectiert sind. Das übergibst du dann in einer Repeat-Until-Schleife der Variable "Node" die das ganze solange bis zum letzten selectierten Node wiederholt.

Sollte so nicht ganz funktionieren, da ich den Parent expandieren muss, die selektierten Nodes aber Childs sind.
Das ist halt die Plage mit freien Komponenten.
Da ich das Tool kommerziell einsetzen will, weiss wer eine gutes TReeview, welches auch kostenpflichtig sein kann?
Von Standard Treeview auf VST bin ich gewechselt, da es im Treeview einige Probleme beim selektieren gab.
So konnte z.B. eine einmal erfolgte Selektion bei mehrfach Selektionen nicht rückgängig gemacht werden, ohne das die gesamte Selektion verloren geht.

Gruß Peter

Hawkeye219 18. Aug 2006 09:27

Re: VirtualTreeview Nodes und Expand
 
Hallo Peter,

ich habe versucht, die von dir beschriebenen Schritte nachzuvollziehen. Alles funktioniert so, wie du es erwartest - die Knoten werden markiert, ihr gemeinsamer Parent expandiert. Die Reihenfolge der Schritte (Markieren, Expandieren) spielt dabei keine Rolle.

Hast du in den TreeOptions unter 'SelectionOptions' das Flag toMultiSelect auf den Wert True gesetzt?

Gruß Hawkeye

hanspeter 18. Aug 2006 09:53

Re: VirtualTreeview Nodes und Expand
 
Zitat:

Zitat von Hawkeye219
Hast du in den TreeOptions unter 'SelectionOptions' das Flag toMultiSelect auf den Wert True gesetzt?

Gruß Hawkeye

Natürlich.
Ich bin mir aber noch nicht ganz sicher ob die Nodes nach dem anlegen fixe Adressen haben.

Die Anwendung hat links ein Treeview mit der Strukturübersicht und rechts eine aufwendige grafische Darstellung.
Das ganze ist ein Steuerprogramm für Reinstraumtechnik.
Also mehrere Hallen - mehrere Stockwerke - mehrere Räume und dann jede Menge Meßstellen.
Beim Anlegen des Prozessbildes erzeuge ich intern einen Baum mit allen Meßstellen und ordne jedem Datensatz dann die Node-Adresse zu.
Also ptr.Node := AddChild(Parent,ptr);
Wird in der Grafik jetzt ein oder mehrere Messstellen markiert, dann suche ich diese im Baum und möchte dann das zugehörige Parent in der Struktur öffnen.
Also VST.Selected[ptr.Node] := true;
VST.Expand(ptr.Node.Parent);

Ich komme jedoch erst wieder ende nächster Woche zum Weiterbrobieren.

Gruß Peter


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:11 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz