Ver Mensaje Individual
  #2  
Antiguo 16-09-2007
Avatar de xEsk
[xEsk] xEsk is offline
Miembro Premium
 
Registrado: feb 2006
Posts: 454
Reputación: 21
xEsk Va por buen camino
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.

Última edición por xEsk fecha: 16-09-2007 a las 02:56:35.
Responder Con Cita