Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi TreeView - NodeExists Funktion ? (https://www.delphipraxis.net/126224-treeview-nodeexists-funktion.html)

moelski 20. Dez 2008 10:17


TreeView - NodeExists Funktion ?
 
Moin !

Kann mir jemand sagen wie ich ein NodeExist realisieren kann?

Ich habe es mal so probiert:
Delphi-Quellcode:
function Node_Exists(Node : TTreeNode): Boolean;
begin
  Result := assigned(Node);
end;
Aber das geht nicht.

Ich merke mir in einer Variable einen TTreeNode. Und die Funktion soll mit False zurück kommen wenn dieser Node nicht mehr existiert (weil gelöscht).

DeddyH 20. Dez 2008 10:24

Re: TreeView - NodeExists Funktion ?
 
Assigned prüft ja auf nil. Wenn Du den TTreeNode beim Löschen also auf nil setzt, sollte das auch gehen. Vielleicht gäbe es auch andere Möglichkeiten, aber ich habe gerade kein Delphi zur Hand, um nachzusehen.

mkinzler 20. Dez 2008 10:34

Re: TreeView - NodeExists Funktion ?
 
Dann könnte man aber auf die Funktion verzichten und direkt assigned verwenden

DeddyH 20. Dez 2008 10:39

Re: TreeView - NodeExists Funktion ?
 
Jepp, wobei sich "Node_Exists" aber später besser lesen lässt.

moelski 20. Dez 2008 10:52

Re: TreeView - NodeExists Funktion ?
 
Hmm aber ich lösche den Knoten doch schon:
Delphi-Quellcode:
procedure Node_Delete         (Node : TTreeNode);
begin
  if(  Node = nil ) then Exit;

  {Free the class}
  if(  Node.Data <> nil ) then
    TNodeInfo(Node.Data).Free;

  {Delete the node}
  Node.Delete;
end;
Muss ich dann den gelöschten Knoten (und ggf. seine ChildNodes) alle explizit auf NIL setzen :gruebel:

DeddyH 20. Dez 2008 10:55

Re: TreeView - NodeExists Funktion ?
 
Entweder das oder mit FreeAndNil freigeben.

mkinzler 20. Dez 2008 11:01

Re: TreeView - NodeExists Funktion ?
 
Ich würde die beiden If Anweisungen verschmelzen und auf das Exit verzichten
Delphi-Quellcode:
if Node.Data <> nil then ...

moelski 20. Dez 2008 11:05

Re: TreeView - NodeExists Funktion ?
 
Moin !

Das will nicht. Selbst wenn ich das auf einen Node anwende:
Delphi-Quellcode:
procedure Node_Delete         (Node : TTreeNode);
begin
  if(  Node = nil ) then Exit;

  {Free the class}
  if(  Node.Data <> nil ) then
    TNodeInfo(Node.Data).Free;

  {Delete the node}
  Node.Delete;
  Node.Free;
  Node := NIL;
end;
Dann kriege ich bei:
Delphi-Quellcode:
function Node_Exists(Node : TTreeNode): Boolean;
begin
  Result := assigned(Node);
end;
Immer ein True als Ergebnis. :gruebel:

moelski 20. Dez 2008 12:36

Re: TreeView - NodeExists Funktion ?
 
Moin !

So nachdem ich mein Löschen erweitert habe und alles auf NIL setze und auch rekursiv lösche gehts nun :-)

Delphi-Quellcode:
procedure Node_Delete (Node : TTreeNode);
begin
  if(  Node = nil ) then Exit;

  while node.HasChildren do begin
    Node_Delete(node.Item[0]);
  end;
  //ShowMessage('Lösche : ' +  Node.Text);

  {Free the class}
  if(  Node.Data <> nil ) then begin
    TNodeInfo(Node.Data).NodeParent := NIL;
    Node.Data := NIL;
    TNodeInfo(Node.Data).Free;
  end;

  {Delete the node}
  Node.Delete;
  Node := NIL;
  Node.Free;
end;

DeddyH 20. Dez 2008 12:40

Re: TreeView - NodeExists Funktion ?
 
Am Ende wird alles gut :mrgreen: :thumb:


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:32 Uhr.
Seite 1 von 2  1 2      

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