Delphi-PRAXiS
Seite 1 von 2  1 2      

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 Virtual TreeView Nodes anzeigen verbergen (https://www.delphipraxis.net/131191-virtual-treeview-nodes-anzeigen-verbergen.html)

oki 20. Mär 2009 07:02


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

generic 20. Mär 2009 08:16

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.

http://www.delphipraxis.net/internal...=817819#817819

oki 20. Mär 2009 09:01

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:
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;
Dank für deine Hilfe. Damit ist die Frage beantwortet,

Gruß oki

generic 20. Mär 2009 11:14

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.

Jens Hartmann 20. Mär 2009 12:20

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:
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;
[EDIT] Wenn man nicht richtig ließt, endeckt man später, das die antwort so eigendlich schon gegeben wurde.

Trotzdem

Gruß Jens

generic 20. Mär 2009 13:09

Re: Virtual TreeView Nodes anzeigen verbergen
 
Und der Source sogar verlinkt ist ;-)

oki 20. Mär 2009 20:22

Re: Virtual TreeView Nodes anzeigen verbergen
 
Zitat:

Zitat von generic
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.

Hi generic,
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:
VST.IsVisible[Node] :=
soll wohl das Setzen der Visible-Eigenschaft über eine Funktion realisieren. Schaun mer ma.

Dank euch beiden und Gruß

oki

Jens Hartmann 20. Mär 2009 20:59

Re: Virtual TreeView Nodes anzeigen verbergen
 
Mit dieser Funktion, führst du einen Vergleich durch.

Delphi-Quellcode:

//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;
Gruß Jens

generic 20. Mär 2009 22:55

Re: Virtual TreeView Nodes anzeigen verbergen
 
Zitat:

Zitat von oki
Was meinst du mit interner Struktur?

Alles was in dem Record vom VirtualNode Datentyp ist.
Für diese Eigenschaften gibt es immer Funktionen im VST, die genutzt werden sollten.

oki 21. Mär 2009 09:58

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 19:15 Uhr.
Seite 1 von 2  1 2      

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