Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
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-08-2006
Avatar de chrids506
chrids506 chrids506 is offline
Miembro
 
Registrado: abr 2006
Posts: 70
Poder: 19
chrids506 Va por buen camino
Problema con Jerarquias en un Componente

Saludos comunidad, mi pregunta es relacionada con el componente que estoy haciendo, es un decendiente de un TPanel, pero tiene que crear otro panel adentro por ejemplo,

Form1
-Panel1
--Panel2

hasta ahí todo bien, pero a la hora de revisar el arbol de componentes aparece

Form1
-Panel1

y el panel 2 ni idea, aunque existe no aparece, mi pregunta como debo crear el panel 2 para que aparezca correctamente?

Gracias de antemano,
Saludos,
Chrids
Responder Con Cita
  #2  
Antiguo 16-08-2006
[maeyanes] maeyanes is offline
Capo de los Capos
 
Registrado: may 2003
Ubicación: Campeche, México
Posts: 2.732
Poder: 24
maeyanes Va por buen camino
Como estás creando el panel dos?

Le estás asignando su propiedad Parent? Esta debe apuntar al Panel1 que es el que lo va a contener:

Código Delphi [-]
constructor TMiPanel.Create(AOwner: TComponent);
begin
  inherited;
  FPanelHijo := TPanel.Create(Self); // Creo panel2 y su owner es panel1
  FPanelHijo.Parent := Self; // Panel2 se muestra dentro de panel1
  // Sigo inicializando mi componente...
end;

Saludos...
Responder Con Cita
  #3  
Antiguo 16-08-2006
Avatar de chrids506
chrids506 chrids506 is offline
Miembro
 
Registrado: abr 2006
Posts: 70
Poder: 19
chrids506 Va por buen camino
así lo creo, pero no se que hago mal

FPanelTit representa al Panel2

Código Delphi [-]
constructor TExpPanel.Create(AOwner : TComponent);
begin
   inherited Create(AOwner);       {Llama al constructor original (heredado)}

   //////////////////Panel2 >>>
    FPanelTit := TPanel.Create(self);  {Creamos el Panel}
    FPanelTit.Height := 60;
    FPanelTit.width := width;
    FPanelTit.top := 0; 
    FPanelTit.left := 0;
    FPanelTit.parent := self;
    FPanelTit.visible := true;

  ...

Última edición por chrids506 fecha: 16-08-2006 a las 19:03:22.
Responder Con Cita
  #4  
Antiguo 16-08-2006
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Creo que tienes que añadir:

Código Delphi [-]
FPaneTit.SetSubcomponent(true);

para que el IDE no se confunda y sepa que FPanelTit pertenece al ExpPanel y no al formulario donde lo colocas.

// Saludos
Responder Con Cita
  #5  
Antiguo 16-08-2006
[maeyanes] maeyanes is offline
Capo de los Capos
 
Registrado: may 2003
Ubicación: Campeche, México
Posts: 2.732
Poder: 24
maeyanes Va por buen camino
Lo que sucede es que el panel que creas de esta forma no se guarda en la forma al no ser su owner la forma.

Para lograr lo que quieres, tienes que redefinir el método GetChildren de tu componente:

Código Delphi [-]
procedure TExpPanel.GetChildren(Proc: TGetChildProc; Root: TComponent);
begin
  Proc(FPanelTit)
end;

Para más información busca en la ayuda de Delphi...


Saludos...
Responder Con Cita
  #6  
Antiguo 16-08-2006
Avatar de chrids506
chrids506 chrids506 is offline
Miembro
 
Registrado: abr 2006
Posts: 70
Poder: 19
chrids506 Va por buen camino
Muchas gracias lo voy a probar
Responder Con Cita
  #7  
Antiguo 16-08-2006
Avatar de chrids506
chrids506 chrids506 is offline
Miembro
 
Registrado: abr 2006
Posts: 70
Poder: 19
chrids506 Va por buen camino
a ver si entendí, agrego esto en los protected:

Código Delphi [-]
   protected
    { Protected declarations }
   procedure GetChildren(Proc: TGetChildProc; Root: TComponent);

agrego este procedimiento:

Código Delphi [-]
procedure TExpPanel.GetChildren(Proc: TGetChildProc; Root: TComponent);
begin
  Proc(FPanelTit)
end;

y lo creo así:

Código Delphi [-]
constructor TExpPanel.Create(AOwner : TComponent);
begin
   inherited Create(AOwner);       {Llama al constructor original (heredado)}

   //////////////////Panel2 >>>
    FPanelTit := TPanel.Create(self);  {Creamos el Panel}
    FPanelTit.Height := 60;
    FPanelTit.width := width;
    FPanelTit.top := 0; 
    FPanelTit.left := 0;
    FPanelTit.parent := self;
    FPanelTit.visible := true;

  ...

o no?

P.D.:Muchas gracias a los 2 por el tiempo que han dedicado a responderme
Responder Con Cita
  #8  
Antiguo 16-08-2006
[maeyanes] maeyanes is offline
Capo de los Capos
 
Registrado: may 2003
Ubicación: Campeche, México
Posts: 2.732
Poder: 24
maeyanes Va por buen camino
Así es, solo que en la declaración del método tienes que poner la directiva override.

También puedes probar el método que comentó Román, puede que simplifique más las cosas. La verdad no sabía que existía ese método.


Saludos...
Responder Con Cita
  #9  
Antiguo 16-08-2006
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Hace mucho tiempo que no hago estas cosas pero creo recordar que SetSubcomponent apareció en no se cuál versión para facilitar lo que antes se hacía como indica Marcos.

// Saludos
Responder Con Cita
  #10  
Antiguo 16-08-2006
Avatar de chrids506
chrids506 chrids506 is offline
Miembro
 
Registrado: abr 2006
Posts: 70
Poder: 19
chrids506 Va por buen camino
Muchas gracias, probaré los 2
Responder Con Cita
  #11  
Antiguo 16-08-2006
Avatar de chrids506
chrids506 chrids506 is offline
Miembro
 
Registrado: abr 2006
Posts: 70
Poder: 19
chrids506 Va por buen camino
Entonces según la tecnica que propones el componente se tendría que crear así:

Código Delphi [-]
constructor TExpPanel.Create(AOwner : TComponent);
begin
   inherited Create(AOwner);       {Llama al constructor original (heredado)}

   //////////////////Panel2 >>>
    FPanelTit := TPanel.Create(self);  {Creamos el Panel}
   
    FPanelTit.SetSubcomponent(true);
   
    FPanelTit.Height := 60;
    FPanelTit.width := width;
    FPanelTit.top := 0; 
    FPanelTit.left := 0;
    FPanelTit.parent := self;
    FPanelTit.visible := true;

  ...

verdad?
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
problema al instalar componente cuscus OOP 2 25-05-2005 16:07:16
Problema con componente dbexpress VolaRe Conexión con bases de datos 0 27-07-2004 12:20:40
Problema con Componente kalimero Varios 4 28-06-2004 17:44:08
Problema en componente. setry2 OOP 2 08-10-2003 16:27:54
Problema con un componente craven OOP 2 06-05-2003 02:59:24


La franja horaria es GMT +2. Ahora son las 11:23:12.


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