Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Oberste Elemente in Treeview finden? (https://www.delphipraxis.net/42912-oberste-elemente-treeview-finden.html)

axelf98 25. Mär 2005 19:55


Oberste Elemente in Treeview finden?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo!
Wie kann ich die obersten Elemente einer Treeview herausfinden, ohne gleich alle Elemente durchlaufen zu müssen?
Im Anhang ist ein Bild mit einem Baum. Ich hätte gerne den Zugriff auf die Elemente D:\Downloads, D:\Projekte und D:\Schule über einen Index (Erster Eintrag, zweiter Eintrag...). Wahrscheinlich ists ganz einfach, aber ich habe bisher nur die Möglichkeit gefunden, erst in die Unterverzeichnisse zu gehen.

Gruß :gruebel:

Lannes 27. Mär 2005 00:09

Re: Oberste Elemente in Treeview finden?
 
Hallo,

du prüfst wahrscheinlich jedes Item auf Level = 0, oder?
Der folgende Code ist wesentlich schneller (100 oder 200x, muss ich mal genau testen :mrgreen: )
Delphi-Quellcode:
procedure TForm1.Button3Click(Sender: TObject);
var z : Integer;
    ms : TMemoryStream;
    sl : TStringList;
begin
   ms := TMemoryStream.Create;
   sl := TStringList.Create;
   try
     TreeView1.SaveToStream(ms);
     ms.Position := 0;
     sl.LoadFromStream(ms); //TreeView1.SaveToStringlist gibt es glaube ich nicht
     for z := 0 to sl.Count-1 do
       begin
         if sl[z][1] <> #09 then//#09 = Tabulator
           Memo1.Lines.Add(sl[z]);
       end;
   finally
     ms.Free; //wieder freigeben
     sl.Free;
   end;
end;

Muetze1 27. Mär 2005 00:47

Re: Oberste Elemente in Treeview finden?
 
Moin!

Wieso nicht einfach alle Knoten durchrennen sondern nur alle Toplevel-Knoten?

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
Var
  lNode : TTreeNode;
begin
  lNode := TreeView1.Items.GetFirstNode;

  While Assigned(lNode) Do
  Begin
    ShowMessage(lNode.Text);
    lNode := lNode.getNextSibling;
  End;
end;
MfG
Muetze1

Lannes 27. Mär 2005 09:30

Re: Oberste Elemente in Treeview finden?
 
Hallo,

warum einfach, wenn es nicht auch umständlich geht :wink:
Man lernt nie aus.
Hab mal die Geschwindigkeit der Varianten ermittelt:
Bei einem TreeView mit 12679 Items
Code:
if Level = 0   : 9 m 14 s 53 hs
MemoryStream  :     0 s 26 hs
getNextSibling :     0 s 01,60 hs
... Frohe Ostern und max 00000

axelf98 27. Mär 2005 20:51

Re: Oberste Elemente in Treeview finden?
 
Danke für eure Tipps! Ich hab das Problem schon anders gelöst in dem ich die Indizes des TopKnoten gespeichert habe. In meinem Fall funktioniert das auch :)

[edit=Christian Seehase]Doppelpost gelöscht. Mfg, Christian Seehase[/edit]

Lannes 27. Mär 2005 23:52

Re: Oberste Elemente in Treeview finden?
 
Hallo,

könntest Du die Vorgehensweise bei der Speicherung der Indizes des TopKnoten hier mal darstellen?
Wie ist die Abarbeitungsgeschwindigkeit?
Ich glaube, das dass von allgemeinem Interesse wäre :!:

axelf98 30. Mär 2005 00:28

Re: Oberste Elemente in Treeview finden?
 
Meine Lösung mit einem Array:
Delphi-Quellcode:
var
IDS: Array of Integer;

... // Füllen des Baumes

 New := TW.Items.Add(nil,'Neuer Hauptknoten');
   setlength(IDS,length(IDS)+1);
   IDS[length(IDS)-1] := New.AbsoluteIndex;


... // Aufrufen der Knoten

 For i := 0 to length(IDS)-1 do
 begin
 node := TW.Items[IDs[i]];
 memo1.lines.add(node.text);
 end;
Der Code ist aus meinem aktuellen Projekt NWS. Da werden Verzeichnisstrukturen eingelesen. So kommt es schon auf Speed an, denn C: kann schon mal mehr als 10 Ordner haben :)


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:16 Uhr.

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