Si no he entendido mal, tú quieres mostrar en un TreeView todos los controles que hay en un formulario (como en el Delphi (Structure)), y que estos estén anidados correspondientemente (Padre -> Hijo -> SubHijo -> Etc...):
Te he hecho este código, que creo que realiza lo que tu buscas:
Código Delphi
[-]procedure TForm1.AddSubControls(ParentNode: TTreeNode; ParentControl: TControl);
var
n: Integer;
lNode: TTreeNode;
begin
if ParentControl is TWinControl then
for n:=0 to TWinControl(ParentControl).ControlCount - 1 do
begin
lNode:=TreeView1.Items.AddChild(ParentNode, Format('%s: %s', [TWinControl(ParentControl).Controls[n].Name, TWinControl(ParentControl).Controls[n].ClassName]));
AddSubControls(lNode, TWinControl(ParentControl).Controls[n]);
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
AddSubControls(TreeView1.Items.Add(nil, Format('%s: %s', [Self.Name, Self.ClassName])), Self);
end;
Lo he probado, añadiendo un montón de TPanels, TGroupBox, etc... y funciona bien.
Este es el resultado de un Formulario de prueba, para probar que funciona:
Código:
Form1: TForm1
Panel1: TPanel
Button1: TButton
Edit1: TEdit
ListBox1: TListBox
GroupBox1: TGroupBox
Panel2: TPanel
Button2: TButton
Button3: TButton
TreeView1: TTreeView
Edit2: TEdit
Panel3: TPanel
Panel4: TPanel
Memo1: TMemo
GroupBox2: TGroupBox
Label2: TLabel
Button4: TButton
Panel5: TPanel
Label1: TLabel
RadioGroup1: TRadioGroup
ListBox2: TListBox
Esto es lo que se genera dentro del "TreeView".
Saludos.