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 virtual treeview: node.parent ist niemals nil (https://www.delphipraxis.net/145473-virtual-treeview-node-parent-ist-niemals-nil.html)

changlee 2. Jan 2010 11:10


virtual treeview: node.parent ist niemals nil
 
Hallo,

ich habe ein sehr seltsames Problem:

Jeder Knoten in meinem VirtualStringTree hat einen Parent Knoten, also auch diejenigen, die ein Nodelevel 0 haben.

Hier ein Beispiel:
Neues Project --> VirtualStringTree und einen Button aufs Formular.
Im Onclick-Ereignis des Button folgenden Code eingefügt:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var node:PVirtualNode;
begin
  node := vst.AddChild(nil);
  Caption := 'Level: ' + inttostr(vst.GetNodeLevel(node));
  if assigned(node.Parent) then
    Caption := Caption + '; Parent assigned'
  else
    Caption := Caption + '; Parent NOT assigned';
end;
Die Caption des Formulars ist nach einem Klick auf den Button: 'Level: 0; Parent assigned'

Wie kann das sein? Ist meine VirtualTreeview Installation defekt? Sonst hat das eigentlich immer funktioniert.

s.h.a.r.k 2. Jan 2010 11:12

Re: virtual treeview: node.parent ist niemals nil
 
Hast du vielleicht eine neuere Installation auf deinem Rechner als früher? Es kann durchaus sein, dass sich da die interne Logik geändert hat. Das wäre meine erste Vermutung, wenn du sagst, dass es früher scheinbar funktioniert hat.

changlee 2. Jan 2010 11:16

Re: virtual treeview: node.parent ist niemals nil
 
Ich habe nichts verändert (zumindest nicht bewusst).
Aber den Einträgen hier im Forum zufolge sollte parent NIL sein, wenn der Knoten sich auf oberster Ebene befindet.

mirage228 2. Jan 2010 11:21

Re: virtual treeview: node.parent ist niemals nil
 
Ich würde jetzt vermuten, dass das Root-Element (siehe TBaseVirtualTree.FRoot) nun als Parent (statt "nil") eingetragen ist...

s.h.a.r.k 2. Jan 2010 11:30

Re: virtual treeview: node.parent ist niemals nil
 
@mirage228: du hast recht ;)

Folgender Code schreibt the p-p-p-p-arent in die Titelleiste. Ich habe die neuste Version installiert.
Delphi-Quellcode:
var
  vn : PVirtualNode;
  pn : PVirtualNode;
begin
  VirtualStringTree1.RootNodeCount := 10;

  vn := VirtualStringTree1.GetFirst();
  pn := vn.Parent;

  if (not Assigned(pn)) then Caption := 'Nüx'
  else if (pn = VirtualStringTree1.RootNode) then Caption := 'the p-p-p-p-arent'
  else Caption := 'strange';
end;

changlee 2. Jan 2010 11:33

Re: virtual treeview: node.parent ist niemals nil
 
Ja Mirage228, du hast recht. Die Idee hatte ich auch gerade.
Es ist tatsächlich der (nicht sichtbare) RootNode.
Danke.
Also sollte man immer beim Hochlaufen in einem Tree immer per NodeLevel oder per parent<>Rootnode prüfen, ob man schon auf oberster Ebene angelangt ist.
Gruß,
Stefan.


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:41 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 by Thomas Breitkreuz