![]() |
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 |
Re: Virtual TreeView Nodes anzeigen verbergen
Jetzt hab ich aber auch mal noch ne frage zu verborgenen Teilen im einem VST.
Das heißt, ich will die nich verbergen, sondern gar nicht erste im VST stehen haben. Wenn ich aus einer Datenbank nur die letzten 4000 einträge sehen will, dann lese ich diese auch nur ein. Kommen jetzt aber Daten neu ins VST, will ich ja nicht immer die Datenbank neu einlesen, sondern einfach parallel zum eintragen in die Datenbank, diese auch dem VST zufügen. Das heißt wie kann ich dann den obersten Eintrag in der Ansicht löschen, und am Ende genau einen Anfügen. usw. Hier mal so ein Ansatz. Leider komme ich damit auch nicht richtig weiter.
Delphi-Quellcode:
Gruß Jens
if VST.RootNodeCount >= 4000 then
begin //Irgendwie die gesamte erste Zeile löschen end; VST.AddChild(nil,Daten); |
Re: Virtual TreeView Nodes anzeigen verbergen
ich denke so:
Delphi-Quellcode:
gruß oki
VTree.DeleteNode(VTree.GetFirst);
|
Re: Virtual TreeView Nodes anzeigen verbergen
Zitat:
Delphi-Quellcode:
Ich frage nur mal, weil ich das mal irgendwo aufgeschnappt habe ;-)
if not (tsIterating in VST.TreeStates)
then VST.IterateSubtree(nil, SucheCallback, nil); //Durch die Eingabe im Edit wird die Suchfunktion aktiviert |
Re: Virtual TreeView Nodes anzeigen verbergen
Zitat:
Gruß Jens |
Re: Virtual TreeView Nodes anzeigen verbergen
Zitat:
Gruß oki |
Re: Virtual TreeView Nodes anzeigen verbergen
Ja, deine frage, und meine Lösung. Hat sich halt durch deine Frage ergeben.
Hast Du denn dein Problem gelößt. Gruß Jens |
Re: Virtual TreeView Nodes anzeigen verbergen
Hi,
ich will das mit dem Visible heute umarbeiten. Damit ist das zwar noch nicht getestet, aber meine Frage ist beantwortet. Es hat zwar auch mit der direkten Änderung des NodeState wie in meinem zweiten Post geklappt, aber die Argumente für die Nutzung der Funktion sind einleuchtend. Deshalb werde ich es so ändern wie ihr es vorgeschlagen habt. Man muss sich ja nicht mit Macht neue Baustellen fabrizieren. Dank und Gruß oki |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:10 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