Delphi-PRAXiS
Seite 2 von 2     12   

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)

omata 20. Dez 2008 17:10

Re: TreeView - NodeExists Funktion ?
 
Zitat:

Zitat von moelski
So nachdem ich mein Löschen erweitert habe und alles auf NIL setze und auch rekursiv lösche gehts nun

:?:

Zitat:

Zitat von moelski
Delphi-Quellcode:
:
    Node.Data := NIL;
    TNodeInfo(Node.Data).Free;
:

:
  Node := NIL;
  Node.Free;
:

Kannst du mal bitte erklären, was das für Aktionen sind? Für mich sind die sinnfrei. Mal abgesehen von dem verwendeten exit und der komischen While-Schleife, die zwar refursiv arbeitet, aber niemals prüft, ob Node überhaupt noch existiert. Hast du überhaupt mal mit deiner Routine den letzten Node in deiner Struktur gelöscht?

moelski 21. Dez 2008 08:42

Re: TreeView - NodeExists Funktion ?
 
Moin !

Zitat:

Kannst du mal bitte erklären, was das für Aktionen sind?
Wenn ich nur mit Delete arbeite hat meine Überprüfung "NODE <> NIL" nicht funktioniert. ´

Zitat:

While-Schleife, die zwar refursiv arbeitet, aber niemals prüft, ob Node überhaupt noch existiert
Also ich habe sie getestet und die While Schleife arbeitet hervorragend. Man kann einzelne Elemente löschen aber auch ganze Treestrukturen.

Zitat:

ob Node überhaupt noch existiert
Warum sollte ich das auch tun. Die While Schleife selber prüft auf die Existenz von Child Nodes.

Zitat:

Hast du überhaupt mal mit deiner Routine den letzten Node in deiner Struktur gelöscht?
Ja das geht hervorrangend.

Das Exit am Anfang muss sicher nicht sein. Da gebe ich dir Recht. Aber es schadet auch nicht ...

omata 21. Dez 2008 17:21

Re: TreeView - NodeExists Funktion ?
 
Ok, wenn das alles geht, dann ist ja alles gut.

Ich hatte eigentlich immer gedacht, dass ich einen Zeiger, der auf NIL zeigt nicht freigeben kann. Aber man lernt ja nie aus. Bei der Schleife hatte ich eigentlich gedacht nochmal zu prüfen, ob sie vielleicht auch mal beendet werden muss, falls dort nämlich zufällig mal kein Node mit weiteren Kindern vorhanden ist. Ich vermute auch mal, das ein Speichertest da einiges ans Tageslicht bringen würde. Aber wenn augenscheinlich die gewünschte Funktion vorhanden ist, dann wird wohl doch "alles gut" sein.

Naja, war ein Versuch auf garantiert vorhandene Problemstellen aufmerksam zu machen.
Nichts für ungut...

moelski 21. Dez 2008 18:26

Re: TreeView - NodeExists Funktion ?
 
Wie sollte die Funktion denn deiner Meinung nach aussehen?
Nur weil sie so funktioniert muss sie ja nicht korrekt sein.

omata 21. Dez 2008 22:44

Re: TreeView - NodeExists Funktion ?
 
Habe deine Schleife jetzt erst richtig verstanden, bleiben noch die NIL-Stellen...
Delphi-Quellcode:
procedure Node_Delete(Node : TTreeNode);
var NodeObject:TObject;
begin
  if assigned(Node) then begin
    while Node.HasChildren do
      Node_Delete(Node.Item[0]);
    {Free the class}
    NodeObject:=Node.Data;
    if assigned(NodeObject) then
      NodeObject.Free;
    {Delete the node}
    Node.Delete;
  end;
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:53 Uhr.
Seite 2 von 2     12   

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