Entwickler-Ecke

Grafische Benutzeroberflächen (VCL & FireMonkey) - Problem mit Treeview [done]


matze - Do 23.10.03 14:45
Titel: Problem mit Treeview [done]
Hallo !!!

ich hab schon das komplette forum abgesucht aber nix hilfreiches gefunden.
ich habe folgendes problem:

ich habe eine liste die sieht so aus:
a|hallo
b|test2
a|test3

so ich will diese liste in einem treeview darstellen.

jetzt kann man ja im treeview einen node folgendermasen hinzufühen:

Delphi-Quelltext
1:
2:
3:
var tn: Ttreenode;
tn := treeview1.Items.Add (nil,'hallo');
tn := treeview1.Items.AddChild (tn,'test');


klar. dann bekomm ich ja einen knoten un ein unteritem.
nur:

wie mache ich das, dass ich für jedes a,b,...x,y,z einen node anlegen kann wenn ich die liste durchgehe und dann einen unterpunkt hinzufügen kann.
also wie prüfe ich ob schon ein knotenpunkt mit der caption a,b oder so vorhanden ist und wenn ja wie kann ich dem dann unteritems zurdnen ??

uff.


Tino - Do 23.10.03 16:22

Wenn ich ehrlich bin hab ich das Probelm nicht verstanden... :cry:


matze - Do 23.10.03 16:36

ja mir ists da als ich das geschrieben hab nix besseres eingefallen.

das problem ist also auf deutsch:

wie kann ich prüfen (mit einem stringwert) ob ein treenode schon vorhanden ist,
wenn ja: soll das aproggi unter diesem node neue untereinträge anlegen,
falls nein: soll es den hauptnode anlegen und dann untereinträge anlegen.


das also aus einner liste die so aussieht:

Quelltext
1:
2:
3:
4:
a|matze
b|tino
a|luckie
b|marc

ein solcher treeview wird:

a-
|- matze
|- luckie
b-
|-tino
|-marc


SlasHeR - Do 23.10.03 16:50

Hi matze.
Ich hatte ein ähnliches Problem, da hab ich mir einfach ein neues Steuerelement runtergeladen:
http://www.torry.net/vcl/lvtv/enhancedtreeviews/pgpathtreeview.zip

Da kannst du mit Tree.DestPath := 'a|b|c';
einen pfad zuweisen, als seperator gibst du an | und er fügt dir alles automatisch ein.
also keine doppelten eintraege ;)


matze - Do 23.10.03 18:27

hm ja gut ich werd mir die kompo mal anschaune, allerdings mag ich nicht schon wieder eine komponente installieren. das muss doch auch anders gehen !


Shark - Do 23.10.03 19:48

TreeNodes haben die Eigenschaft Level, mit der Du die Ebene herausfindes...

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
function findNode(Text: string; Level: integer): TTreeNode;
  var index: integer;
        node: TTreeNode;
begin
  result := nil;
  for index := 0 to TreeView.Items.Count - 1 do
  begin
    node := TreeView.Items[index];
    if (Node.Level = Level) and (Node.Text = Text) then
    begin
      result := Node;
      break;
    end;

  end;

end;


matze - Fr 24.10.03 15:13

suuuuuuuuuuper !!!!

das ist genau das was ich mir gewünscht hab !!!!!

du bist der beste !!!!

danke !