Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   TTreeview (https://www.delphipraxis.net/60973-ttreeview.html)

simonko 15. Jan 2006 11:30


TTreeview
 
Wenn ich einen Node in der Treeview auswähle kann ich ihn und seine nachfolger löschen. Dafür gibs die funktion TreeView1.Selected.Delete; ich hab aber in jeden Node ein Objekt gespeichert. Nun müßte ich den baum durchgehen (meine treeview hat immer nur 2 nachfolger) und die objekte destroyn. hat jemand eine idee wie ich das durchgehen kann?

simonko 15. Jan 2006 11:56

Re: TTreeview
 
Delphi-Quellcode:
procedure durchgehen(var treenode : TTreenode);
begin
 if treenode.haschildren then begin
    durchgehen(treenode.getFirstChild);
    durchgehen(treenode.GetLastChild);
 end;
 TOperand(treenode.Data).destroy;
end;

geht das so?

SirThornberry 15. Jan 2006 11:58

Re: TTreeview
 
ein TreeNode braucht man nicht als Var machen da es ein Object ist und somit ein pointer. Und um das ganze gleich richtig zu machen würde ich nicht nur das erste und letzte item durchgehen sondern mit einer schleife alle durchgehen.

simonko 15. Jan 2006 12:06

Re: TTreeview
 
Ja hab gemerkt ich konnts nicht kompilieren mit dem Var. Aber gibts da vielleicht eine schon ausprogrammierte Variante wie man das Treeview durchgeht oder passt das so wie ich das jetzt geschrieben hab?

SirThornberry 15. Jan 2006 12:16

Re: TTreeview
 
das passt eigentlich so, man geht überlischerweise das ganze rekursiv durch so wie du es machst (mal abgesehen davon das du nur das erste und letzte item nimmst und nicht alle)

simonko 15. Jan 2006 12:21

Re: TTreeview
 
Delphi-Quellcode:
 if Treeview1.Selected.Count>=2 then
   Neu1.Enabled:=false;
ich kann höchstens nur 2 kinder anhängen. also ist das egal. nur frag ich mich wenn ich nur ein kind anhänge dann müsste getfirst und getlast das selbe sein oder? dann versucht er etwas zu löschen was schon gelöscht wurde.

alzaimar 15. Jan 2006 12:52

Re: TTreeview
 
Zitat:

Zitat von SirThornberry
... man geht überlischerweise das ganze rekursiv durch ...

Also ich würde das üblischerweise iterativ machen:
Delphi-Quellcode:
For i:=0 To MyTreeView.Items.Count - 1 do
  DoSomethingWith (MyTreeView.Items[i])

simonko 15. Jan 2006 12:54

Re: TTreeview
 
das mit dem index geht ganz langsam weil das intern so implementiert ist dass der das rekursiv durch geht.

alzaimar 15. Jan 2006 13:59

Re: TTreeview
 
Zitat:

Zitat von simonko
das mit dem index geht ganz langsam weil das intern so implementiert ist dass der das rekursiv durch geht.

Wie kommst Du denn darauf? Schau Dir mal den Code in ComCtrls an. Das ist nichts Rekursives. Ich habe Delphi 6.

Beim Hochzählen, wie in meinem Schnipsel, wird einfach GetNext aufgerufen, und das ist sogar schneller als rekursives Durchlaufen (ca. 8%).

simonko 15. Jan 2006 14:52

Re: TTreeview
 
Delphi-Quellcode:
For i:=0 To MyTreeView.Items.Count - 1 do
  DoSomethingWith (MyTreeView.Items[i]
dabei wird der baum so oft nutzlos durchgelaufn..


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:20 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