![]() |
Virtual TreeView Nodes anzeigen verbergen
Moin,
hier mal kurz was ich will: im VirtualStringTree von Mike versehe ich die einzelnen Nodes mit Checkboxen. Über einen Check-ToolButton möchte ich die Anzeige umschalten. Es soll zwei Anzeigemodi geben - alle anzeigen - nur ausgewählte anzeigen. Daraus folgt, dass ich alle Nodes, deren Checkboxen den Status Checked = False haben im Modus "nur ausgewählte anzeigen" im Tree ausblenden möchte. Kann mir jemand sagen, wo ich das am besten unterbringe? Schon mal Dank für eure Mühe, Gruß oki |
Re: Virtual TreeView Nodes anzeigen verbergen
Das ist kein Problem, im Stammtisch Video #2 ist eine Suchdemo drin, welche Node ausblendet.
vst.IterateSubtree zum durchlaufen der Knoten verwenden und mit vst.isVisible[node]:= true | false die Knoten verstecken. ![]() |
Re: Virtual TreeView Nodes anzeigen verbergen
Hi generic,
dank für die Antwort. Ich hatte mir parallel das PDF zum VirtualTree genauer zu Gemüte geführt und dabei die Eigenschaft NodeState gefunden. Genau wie du beschrieben hast verwende ich jetzt den Typ vsVisible der Nodes zum Ein-/Ausblenden. Da ich das über einen zentralen Schalter mache kann ich den gesamten Tree einmal abarbeiten und die entsprechenden Nodes bearbeiten. Hier mein Code:
Delphi-Quellcode:
Dank für deine Hilfe. Damit ist die Frage beantwortet,
procedure TSettingsStyleForm.VisualizeAllNodes(Value: Boolean);
var ANode: PVirtualNode; AData: ^TVTData; begin ANode := VTree.GetFirst; if ANode = nil then Exit; try VTree.BeginUpdate; while not (ANode = nil) do begin AData := VTree.GetNodeData(ANode); if AData.DataType = snt_Param then begin // ich möchte dies nur für Nodes tun die meinem eigenen Typ snt_Param entsprechen if not Value then begin // nur die Nodes anzeigen, die in den eingeblendeten Checkboxen angewählt sind if ANode.CheckState = csUncheckedNormal then ANode.States := ANode.States - [vsVisible] else ANode.States := ANode.States + [vsVisible]; end else ANode.States := ANode.States + [vsVisible]; // alle anzeigen end; ANode := VTree.GetNext(ANode); end; finally VTree.EndUpdate; end; end; Gruß oki |
Re: Virtual TreeView Nodes anzeigen verbergen
Wenn du die Nodedaten (interne Struktur) direkt veränderst wird es früher oder später Probleme geben.
Am besten immer die Funktionen vom VST nutzen. Das sichert auch Kompatibilität . Vor allem werden durch die Nutzung der VST Methoden die Ereignisse ausgelöst, was bei den internen Daten nicht der Fall ist. |
Re: Virtual TreeView Nodes anzeigen verbergen
Hallo,
in dem Video wird mit folgender Funktion gearbeitet. Diese findest ungefähr ab Minute 5o bzw. 60 des Videos (glaube ich).
Delphi-Quellcode:
[EDIT] Wenn man nicht richtig ließt, endeckt man später, das die antwort so eigendlich schon gegeben wurde.
procedure TFDatenauswertung.SucheCallback(Sender: TBaseVirtualTree; Node: PVirtualNode; Data: Pointer; var Abort: Boolean);
var Daten : TOAUMB256PLUS; begin Daten := TOAUMB256PLUS(VST.GetNodeData(Node)^); VST.IsVisible[Node] := (EDManFilter.Text='') or (pos(EDManFilter.Text, Daten.Ereignis)>0); end; Trotzdem Gruß Jens |
Re: Virtual TreeView Nodes anzeigen verbergen
Und der Source sogar verlinkt ist ;-)
|
Re: Virtual TreeView Nodes anzeigen verbergen
Zitat:
im Moment fehlt mir etwas der Bezug zu meinem Code. Was meinst du mit interner Struktur? Wo greife ich auf diese zu? Welche Probleme sind bei Zugriff auf PVirtualNode.NodeState zu erwarten? Warum ist dann NodeState read/write? Welche Funktion sollte ich deiner Meinung nach nutzen um einen Node unvisible zu machen? Ich werd mir auch noch mal das Video reinziehen. Vielleicht geht mir dann ein Licht auf. @Jens Hartmann: ich denke dieser Teil:
Delphi-Quellcode:
soll wohl das Setzen der Visible-Eigenschaft über eine Funktion realisieren. Schaun mer ma.
VST.IsVisible[Node] :=
Dank euch beiden und Gruß oki |
Re: Virtual TreeView Nodes anzeigen verbergen
Mit dieser Funktion, führst du einen Vergleich durch.
Delphi-Quellcode:
Gruß Jens//Das ist eigendlich jetzt die komplette Variante aus dem Video, hier die Suchfunkion //eine Methode vom VST und verglichen wird die Eingabe aus dem Edit. (siehe Edit.Change) procedure TFDatenauswertung.SucheCallback(Sender: TBaseVirtualTree; Node: PVirtualNode; Data: Pointer; var Abort: Boolean); var Daten : TOAUMB256PLUS; begin Daten := TOAUMB256PLUS(VST.GetNodeData(Node)^); VST.IsVisible[Node] := (EDManFilter.Text='') or (pos(EDManFilter.Text, Daten.Ereignis)>0); end; //Hier wird z.B. wie im Video die Eingabe in einem Edit als Suche verwendet procedure TForm1.Edit1Change(Sender: TObject); begin VST.IterateSubtree(nil, SucheCallback, nil); //Durch die Eingabe im Edit wird die Suchfunktion aktiviert end; |
Re: Virtual TreeView Nodes anzeigen verbergen
Zitat:
Für diese Eigenschaften gibt es immer Funktionen im VST, die genutzt werden sollten. |
Re: Virtual TreeView Nodes anzeigen verbergen
Hi generic,
gut zu wissen. Also lohnt es sich für jeden Parameter des TVirtualNode eine entsprechende Funktion zu suchen. Werd ich dann so machen. Dank für die Info und Gruß oki |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:13 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