AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

GetNext implementieren

Ein Thema von _frank_ · begonnen am 8. Okt 2006 · letzter Beitrag vom 9. Okt 2006
Antwort Antwort
Benutzerbild von _frank_
_frank_

Registriert seit: 21. Feb 2003
Ort: Plauen / Bamberg
922 Beiträge
 
Delphi 3 Professional
 
#1

GetNext implementieren

  Alt 8. Okt 2006, 23:25
Hi,

ich bin dabei eine Hintergrund-Klasse für meinen DFMeditor zu schreiben, nur leider habe ich bisschen Probleme mit der recursiven getNext-funktion...

Da der komplette Code bisschen viel ist, hab ich den mal hier http://coder.cycnus.de/entry.php?id=963 geposted.

TCompInfo stellt eine Komponente dar, hat 2 Listen (sub-Komponenten und Eigenschaften) und so entsteht ein Baum. Diesen will ich zur Anzeige rekursiv durchlaufen, um diese Struktur in einem Treeview darzustellen:

Delphi-Quellcode:
var Comp:TCompInfo;
    Prop:TPropInfo;
    tn:TTreenode;
    i:integer;
begin
  comp:=rootcomp;
  tn:=nil;
  while assigned(comp) do
  begin
    tn:=treeview1.items.Add(tn,comp.name+':'+comp.TypeName);
    for i:=0 to comp.Properties.Count-1 do
    begin
      prop:=comp.Properties.GetItem(i);
      Treeview1.Items.AddChild(tn,prop.Name+' = '+prop.Value);
    end;
    comp:=comp.GetNext;
  end;
end;

ich habe festgestellt das das "result:=FParent.GetNext;" falsch ist, da dort dann wieder mit item 0 angefangen wird (result:=FComponents.GetItem(0)) und somit eine Endlosschleife erzeugt wird. Wie könnte ich das lösen?

Gruß Frank
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#2

Re: GetNext implementieren

  Alt 9. Okt 2006, 08:45
Guten Morgen Frank.

Um deine Baumstruktur rekursiv in eine TreeView zu laden genügt es, wenn die Laderoutine rekursiv ist. Deine Komponente muss lediglich eine Möglichkeit zur Iteration über die Unterkomponenten anbieten - und das tut sie ja auch ohne GetNext().

Delphi-Quellcode:
procedure AddNodes(nodes: TTreeNodes; nParent: TTreeNode; ciRoot: TCompInfo);
var
  i: Integer;
  ci: TCompInfo;
  tn: TTreeNode;
begin
  with ciRoot.Components do
    for i := 0 to Pred(Count) do
    begin
      ci := Items[i];
      tn := nodes.AddChildObject(nParent, DisplayName(ci), ci);
      AddNodes(nodes, tn, ci);
    end;
end;
In der Funktion DisplayName() kannst du den Anzeigenamen für die jeweilige Komponente erzeugen. Der Aufruf könnte so aussehen:

Delphi-Quellcode:
begin
  with TreeView do
  begin
    Items.BeginUpdate;
    Items.Clear;
    AddNodes(Items, nil, rootComp);
    Items.EndUpdate;
  end;
end;
Alles nur getippt und nicht getestet.

Grüße vom marabu
  Mit Zitat antworten Zitat
Antwort Antwort


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 05:52 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