Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 16-09-2007
Avatar de mightydragonlor
[mightydragonlor] mightydragonlor is offline
Miembro Premium
 
Registrado: feb 2007
Ubicación: Medellín-Colombia
Posts: 587
Poder: 18
mightydragonlor Va por buen camino
Crear Un Object Tree View

Hola a todos, deseo saber como puedo insertar en un Tree View los Controles y sus Componentes existentes en un Formulario, como lo hace el object Tree View, lo que pasa es que puedo listarlos todos en un tree view pero no puedo hacer que queden como nodos los Controles y como subnodos los componentes, ¿alguien puede ayudarme?.
Responder Con Cita
  #2  
Antiguo 16-09-2007
Avatar de xEsk
[xEsk] xEsk is offline
Miembro Premium
 
Registrado: feb 2006
Posts: 454
Poder: 19
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
  #3  
Antiguo 16-09-2007
Avatar de mightydragonlor
[mightydragonlor] mightydragonlor is offline
Miembro Premium
 
Registrado: feb 2007
Ubicación: Medellín-Colombia
Posts: 587
Poder: 18
mightydragonlor Va por buen camino
Muchas Gracias xEsk, la verdad es que me es de gran ayuda.
y tambien tengo otra duda, como puedo hacer para que los componentes en run time parezcan como en tiempo de diseño (crear, arrastrar y cambiar tamaño).

Última edición por mightydragonlor fecha: 16-09-2007 a las 04:07:53.
Responder Con Cita
  #4  
Antiguo 16-09-2007
Avatar de xEsk
[xEsk] xEsk is offline
Miembro Premium
 
Registrado: feb 2006
Posts: 454
Poder: 19
xEsk Va por buen camino
Prueba buscando "Form Designer" en Google, Torry's, etc...

Mira aqui, a ver si encuentras algo util: "Form Designer" en Torry's

Saludos.
Responder Con Cita
  #5  
Antiguo 16-09-2007
esocrates esocrates is offline
Miembro
 
Registrado: may 2003
Ubicación: Argentina
Posts: 210
Poder: 22
esocrates Va por buen camino
Estoy tratando de estudiar el código aportado por xEsk pero no entiendo dónde debo escribir la primera parte del mismo:
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;
Recibo el siguiente mensaje de error
Undeclared identifier: 'AddSubControls'

Muchas gracias por la ayuda y disculpen mi ignorancia.
Un saludo y hasta pronto
Responder Con Cita
  #6  
Antiguo 16-09-2007
Avatar de xEsk
[xEsk] xEsk is offline
Miembro Premium
 
Registrado: feb 2006
Posts: 454
Poder: 19
xEsk Va por buen camino
Hola esocrates,

Añade:
Código Delphi [-]
procedure AddSubControls(ParentNode: TTreeNode; ParentControl: TControl);
arrriba en las declaraciones del TForm:

Ejemplo:
Código Delphi [-]
  TForm1 = class(TForm)
    procedure Button1Click(Sender: TObject);
  private
    procedure AddSubControls(ParentNode: TTreeNode; ParentControl: TControl);
  public
    { Public declarations }
  end;
Si lo pones en "Private", este procedure será sólo visible desde este "Form", si lo metes en "Public" entonces será visible para el resto de unidades (que conozcan a esta UNIT).

Cualquier otra duda, ya sabes.

Saludos.

Última edición por xEsk fecha: 16-09-2007 a las 16:47:26.
Responder Con Cita
  #7  
Antiguo 16-09-2007
esocrates esocrates is offline
Miembro
 
Registrado: may 2003
Ubicación: Argentina
Posts: 210
Poder: 22
esocrates Va por buen camino
Hola xEsk:
Gracias por responder.Lo que no sé es dónde se escribe este segmento de código.
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;
Un saludo
Responder Con Cita
  #8  
Antiguo 16-09-2007
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Ese código es la implementación del método "AddSubControls()" de la clase "TForm1". Eso es lo que puede verse. Así que ese código ha de ir en la "implementation" de la unidad en que se declare la clase a la que pertenece y el mismo método.

Código Delphi [-]
unit Unit1;

interface

// Esta es la interface de esta unidad, aquí vamos a declarar
// la clase TForm1, que cuenta con el método "AddSubControls()"

uses
  Forms;

type
  TForm1 = class(TForm)
  private
    procedure AddSubControls(ParentNode: TTreeNode; ParentControl: TControl);
  end;

implementation

// Y aquí está la implementación de la clase TForm1 declarada en la interface
// Aquí se implementa el método "AddSubControls()" de la clase TForm1

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;

end.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #9  
Antiguo 16-09-2007
esocrates esocrates is offline
Miembro
 
Registrado: may 2003
Ubicación: Argentina
Posts: 210
Poder: 22
esocrates Va por buen camino
¡¡Muchas gracias xEsk y dec !!
Con este código y las respectivas aclaraciones he aprendido un montón de cosas.
Un saludo y hasta pronto
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
tree view con check boxes k_bron Varios 2 05-09-2006 20:44:26
Como evitar que un tree view colapse jsanchez OOP 1 24-07-2006 20:02:04
tree view danielsalazar Varios 1 08-09-2005 17:54:19
pregunta de vital importancia (tree view) profesor012 Varios 4 03-10-2004 10:47:32
Tree View (problemas) jymy788 Varios 3 19-08-2004 17:14:29


La franja horaria es GMT +2. Ahora son las 06:08:31.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi