AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Oberste Elemente in Treeview finden?

Ein Thema von axelf98 · begonnen am 25. Mär 2005 · letzter Beitrag vom 30. Mär 2005
Antwort Antwort
axelf98

Registriert seit: 27. Aug 2003
Ort: Ennepetal
440 Beiträge
 
Delphi 2005 Personal
 
#1

Oberste Elemente in Treeview finden?

  Alt 25. Mär 2005, 19:55
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ß
Miniaturansicht angehängter Grafiken
tree_252.jpg  
  Mit Zitat antworten Zitat
Benutzerbild von Lannes
Lannes

Registriert seit: 30. Jan 2005
Ort: Münster
745 Beiträge
 
Delphi 3 Professional
 
#2

Re: Oberste Elemente in Treeview finden?

  Alt 27. Mär 2005, 00:09
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 )
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;
MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#3

Re: Oberste Elemente in Treeview finden?

  Alt 27. Mär 2005, 00:47
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
  Mit Zitat antworten Zitat
Benutzerbild von Lannes
Lannes

Registriert seit: 30. Jan 2005
Ort: Münster
745 Beiträge
 
Delphi 3 Professional
 
#4

Re: Oberste Elemente in Treeview finden?

  Alt 27. Mär 2005, 09:30
Hallo,

warum einfach, wenn es nicht auch umständlich geht
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
MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
  Mit Zitat antworten Zitat
axelf98

Registriert seit: 27. Aug 2003
Ort: Ennepetal
440 Beiträge
 
Delphi 2005 Personal
 
#5

Re: Oberste Elemente in Treeview finden?

  Alt 27. Mär 2005, 20:51
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]
  Mit Zitat antworten Zitat
Benutzerbild von Lannes
Lannes

Registriert seit: 30. Jan 2005
Ort: Münster
745 Beiträge
 
Delphi 3 Professional
 
#6

Re: Oberste Elemente in Treeview finden?

  Alt 27. Mär 2005, 23:52
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
MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
  Mit Zitat antworten Zitat
axelf98

Registriert seit: 27. Aug 2003
Ort: Ennepetal
440 Beiträge
 
Delphi 2005 Personal
 
#7

Re: Oberste Elemente in Treeview finden?

  Alt 30. Mär 2005, 00:28
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
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:26 Uhr.
Powered by vBulletin® Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2019 by Daniel R. Wolf