Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi TTreeNode aussuchen u. weitere Knoten anhängen (https://www.delphipraxis.net/89256-ttreenode-aussuchen-u-weitere-knoten-anhaengen.html)

Chemiker 28. Mär 2007 14:44


TTreeNode aussuchen u. weitere Knoten anhängen
 
Hallo,

ich habe folgendes Problem, ich will in einem TTreeView das schon nach dem Root – Knoten noch weiter Knoten aufweist. Unter diesen Kind-Konten weiter Kindknoten anhängen.

Delphi-Quellcode:
Ebene1(Root)
   |
   |----Ebene2Knoten1
   |        |------------Ebene3Knoten1
   |        |------------Ebene3Knoten2 
   |
   |----Ebene2Knoten2
   |        |------------Ebene3Knoten3
   |        |------------Ebene3Knoten4
 usw.
Wie gesagt die Knoten der Ebene2 sind vorhanden.
Wenn ich jetzt die Knoten der Ebene3 einfügen möchte, so werden diese immer alle unter den letzten Knoten der Ebene2 angehängt.

Mit welchem Befehl kann ich den Knoten der Ebene2 aussuchen, so dass ich darunter die Knoten der Ebene3 anhängen kann?

Delphi-Quellcode:
{----------------------------------------------------------------------------
   Alle Datensätze Durchlaufen und die vorkommen MaGruppe1 in den Baum eintragen
  }
  for I := 1 to Anzahl do
  begin
    MSBez.MSLesen:= i;
     // Alle MaGruppe1 auflisten
     // Prüfen ob die MaGruppe1 schon im Baum vorhanden ist
    if m_Ebene2 = Nil then
    begin
      m_Ebene2:= TreeView1.Items.AddChild(m_Ebene1,MSBez.MaGruppe1);
    end
    else
    begin
      if (not (IsDuplicateEintrag(m_Ebene2,MSBez.MaGruppe1,TRUE))) then
      m_Ebene2:= TreeView1.Items.AddChild(m_Ebene1,MSBez.MaGruppe1);
    end;
  end;
Damit werden die KindKnoten für die Ebene2 erzeugt

Delphi-Quellcode:
{
  Alle Datensätze durchlaufen und die MaBez an die entprechenden MaGruppe1 an-
  hängen.
  }
  for I := 1 to Anzahl do
  begin
    MSBez.MSLesen:= i;     // Datensatz lesen

    for z := 0 to m_Ebene1.Count - 1 do
    begin
      if (m_Ebene1.Item[z].Text = MSBez.MaGruppe1) then
      begin
        // Items auszuchen an welcher Stelle angehängt werden soll
        if (NOT(IsDuplicateEintrag(m_Ebene3,MSBez.MaBez,TRUE))) then
        begin

          m_Ebene3:= TreeView1.Items.AddChild(m_Ebene2,MSBez.MaBez);<---- Das fun. nicht richtig !!!!!!!!!
        end;
Das funktioniert leider nicht.



Bis bald Chemiker

Mazel 28. Mär 2007 16:04

Re: TTreeNode aussuchen u. weitere Knoten anhängen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,

weist du genau wo du diese Anhängen willst, oder ist das nicht statisch festgelegt? Wenn doch geht es so hier:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
  TreeView1.Items.AddChild(TreeView1.Items[1], 'Ebene3Knoten1'); //Ebene1 ist Item 0
  TreeView1.Items.AddChild(TreeView1.Items[1], 'Ebene3Knoten2');
  TreeView1.Items.AddChild(TreeView1.Items[4], 'Ebene3Knoten3'); //Knoten2 ist Item 4, da 2 neue
  TreeView1.Items.AddChild(TreeView1.Items[4], 'Ebene3Knoten4');
end;
Im Anhang habe ich noch das dazugehörende Beispielprojekt, was dir eventuell helfen könnte.

Gruß
Mazel

Chemiker 28. Mär 2007 19:26

Re: TTreeNode aussuchen u. weitere Knoten anhängen
 
Hallo Mazel,

Vielen Dank für deine Antwort.
Du hast mich auf den richtigen Weg gebracht, ich habe mich damit schon min. 20h beschäftigt. Ich wollte schon mein Notebook aus dem Fenster werfen, aber manchmal sieht man den Wald vor lauter Bäumen nicht.

Delphi-Quellcode:
{
  Alle Datensätze durchlaufen und die MaBez an die entprechenden MaGruppe1 an-
  hängen.
  }
  for I := 1 to Anzahl do
  begin
    MSBez.MSLesen:= i;     // Datensatz lesen

    for z := 0 to m_Ebene1.Count - 1 do // Die Schleife wird solange durchlaufen bis die Anzahl der Knoten in m_Ebene1 erreicht ist
     begin
    if (m_Ebene1.Item[z].Text = MSBez.MaGruppe1) then     // Prüfen zu welchen Knoten der m_Ebene1 der Unterknoten gehört.
      begin
        // Items aussuchen an welcher Stelle angehängt werden soll.
             if (NOT(IsDuplicateEintrag(m_Ebene3,MSBez.MaBez,TRUE))) then // Duplikat nicht eintragen
        begin
          m_Ebene3:= TreeView1.Items.AddChild(m_Ebene1.Item[z],MSBez.MaBez);//Unter den Ensprechenden Knoten der m_Ebene1 eintragen
       end;
Nun funktioniert alles tadellos, dank deiner Hilfe.

Bis bald Chemiker

Mazel 28. Mär 2007 19:38

Re: TTreeNode aussuchen u. weitere Knoten anhängen
 
Freut mich, dass ich helfen konnte :)

Gruß
Mazel


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