![]() |
GetNext implementieren
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 ![]() 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 |
Re: GetNext implementieren
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:
In der Funktion DisplayName() kannst du den Anzeigenamen für die jeweilige Komponente erzeugen. Der Aufruf könnte so aussehen:
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;
Delphi-Quellcode:
Alles nur getippt und nicht getestet.
begin
with TreeView do begin Items.BeginUpdate; Items.Clear; AddNodes(Items, nil, rootComp); Items.EndUpdate; end; end; Grüße vom marabu |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:05 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz