AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

VirtualTreeview Nodes und Expand

Ein Thema von hanspeter · begonnen am 15. Aug 2006 · letzter Beitrag vom 18. Aug 2006
Antwort Antwort
hanspeter

Registriert seit: 26. Jul 2003
Ort: Leipzig
1.350 Beiträge
 
Delphi XE2 Professional
 
#1

VirtualTreeview Nodes und Expand

  Alt 15. Aug 2006, 15:07
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
  Mit Zitat antworten Zitat
hanspeter

Registriert seit: 26. Jul 2003
Ort: Leipzig
1.350 Beiträge
 
Delphi XE2 Professional
 
#2

Re: VirtualTreeview Nodes und Expand

  Alt 16. Aug 2006, 06:11
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
  Mit Zitat antworten Zitat
Benutzerbild von mirage228
mirage228

Registriert seit: 23. Mär 2003
Ort: Münster
3.750 Beiträge
 
Delphi 2010 Professional
 
#3

Re: VirtualTreeview Nodes und Expand

  Alt 16. Aug 2006, 12:06
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;
David F.

May the source be with you, stranger.
PHP Inspection Unit (Delphi-Unit zum Analysieren von PHP Code)
  Mit Zitat antworten Zitat
hanspeter

Registriert seit: 26. Jul 2003
Ort: Leipzig
1.350 Beiträge
 
Delphi XE2 Professional
 
#4

Re: VirtualTreeview Nodes und Expand

  Alt 16. Aug 2006, 12:50
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
  Mit Zitat antworten Zitat
Onkelrossie

Registriert seit: 7. Aug 2006
43 Beiträge
 
Delphi 7 Architect
 
#5

Re: VirtualTreeview Nodes und Expand

  Alt 16. Aug 2006, 18:12
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
  Mit Zitat antworten Zitat
hanspeter

Registriert seit: 26. Jul 2003
Ort: Leipzig
1.350 Beiträge
 
Delphi XE2 Professional
 
#6

Re: VirtualTreeview Nodes und Expand

  Alt 18. Aug 2006, 08:08
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
  Mit Zitat antworten Zitat
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#7

Re: VirtualTreeview Nodes und Expand

  Alt 18. Aug 2006, 09:27
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
  Mit Zitat antworten Zitat
hanspeter

Registriert seit: 26. Jul 2003
Ort: Leipzig
1.350 Beiträge
 
Delphi XE2 Professional
 
#8

Re: VirtualTreeview Nodes und Expand

  Alt 18. Aug 2006, 09:53
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
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:51 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