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 26-03-2010
ElDuc ElDuc is offline
Miembro
 
Registrado: jul 2004
Posts: 197
Poder: 20
ElDuc Va por buen camino
Componentes en tiempo de diseño

Señores,

Sigo luchando por aprender sobre la creación de componentes, pero encuentro muchos problemas, ha ver si pudierais ayudarme.

Tengo un componente no visual y me interesaría que cuando lo inserto en un formulario me creara otro componente, visual o no, dentro de ese formulario, por ejemplo un TLabel o un TADOConnection. ESTAMOS EN TIEMPO DE DISEÑO.

Ni siquiera sé si eso es posible.

Espero que alguien pueda sacarme de este estancamiento.
Responder Con Cita
  #2  
Antiguo 26-03-2010
andres1569 andres1569 is offline
Miembro
 
Registrado: may 2003
Posts: 908
Poder: 22
andres1569 Va por buen camino
Sí que se puede hacer.

Si dicho componente "adjunto" lo creas en el mismo constructor Create, debes pasarle como Owner el mismo que recibes, para que dependa del mismo formulario. Si el componente "adjunto" es visual, es decir un Control, debes decidir dónde se ubicará, si dentro del formulario o bien dentro de un Panel por ejemplo, asignándole la propiedad Parent:

Código Delphi [-]
constructor MiComponente.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  ConexADO := TADOConnection.Create(AOwner);
  (...)
  MiLabel := TLabel.Create(AOwner);  
  if AOwner is TWinControl then MiLabel.Parent := TWinControl(AOwner);
end;

Lo más normal, al trabajar en diseño, es que el Owner sea el formulario sobre el que estés trabajando.

Saludos
__________________
Guía de Estilo
Responder Con Cita
  #3  
Antiguo 26-03-2010
ElDuc ElDuc is offline
Miembro
 
Registrado: jul 2004
Posts: 197
Poder: 20
ElDuc Va por buen camino
Gracias Andres1569

Yo ya había probado algo parecedo
Código Delphi [-]
Constructor _TgvApplication.Create(AOwner:TComponent);
Begin
Inherited Create(AOwner);
Label_1:=TLabel.Create(AOwner);
Label_1.Parent:=TWinControl(AOwner);
End;

No condiciono la asignación de Parent porque previamente ya lo había hecho poniento un breakpoint y comprobando el tipo AOwner.

También he probado de utilizar ComponentState, pero poniendo un breakpoint en tiempo de diseño no me funciona, no sé si tiene algo que ver.

Pero no me funciona, ¿qué piensas que hago mal?

Última edición por ElDuc fecha: 26-03-2010 a las 23:00:17.
Responder Con Cita
  #4  
Antiguo 26-03-2010
andres1569 andres1569 is offline
Miembro
 
Registrado: may 2003
Posts: 908
Poder: 22
andres1569 Va por buen camino
¿Qué es lo que no funciona? ¿No te aparece el Label por ningun sitio?

El objeto Owner, ¿de qué clase es? ¿es realmente un formulario? Si es un Control trata de obtener el formulario padre mediante GetParentForm(Owner) a ver qué te devuelve.

Ahora no tengo a mano el Delphi y te hablo de memoria, pero hace años implementé algo así, puede que haya que acceder al diseñador (propiedad FormDesigner -o Designer- de un TForm) pero esto desde Delphi 6 plantea problemas pues no está permitido durante RunTime utilizar clases propias del diseño (contenidas en la unit DsgnIntf.pas)

Siento no poder ayudarte más en este momento ...
__________________
Guía de Estilo
Responder Con Cita
  #5  
Antiguo 27-03-2010
ElDuc ElDuc is offline
Miembro
 
Registrado: jul 2004
Posts: 197
Poder: 20
ElDuc Va por buen camino
Angry

Estoy haciendo muchas pruebas, pero no funciona.

Es como si el método Create de mi componente sólo se ejecutara cuando ejecuto el programa (Run) pero no cuando inserto mi componente en el formularioa, que es cuando realmente necesito crear el otro componente en el formulario.

Posiblemente sea otro método o evento lo que debo controlar.
Responder Con Cita
  #6  
Antiguo 27-03-2010
ElDuc ElDuc is offline
Miembro
 
Registrado: jul 2004
Posts: 197
Poder: 20
ElDuc Va por buen camino
Es evidente que está sucediendo lo que he descrito en el post anterior.

Ge conseguido que mi componente no visual cree otro componente visual en el momento que ejecuto el programa, método Create del componente, pero no cuando inserto el componente no visual en el formulario que es cuando yo lo necesito.

Creo que debo actuar sobre otro método o evento, ¿sabéis en cual?
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
No veo, en tiempo de diseño los nombres de los componentes QuarkBcn Varios 3 19-12-2007 09:38:31
eventos en tiempo de diseño jar OOP 0 27-01-2007 22:09:11
Indices En Tiempo De Diseño?? amadis Conexión con bases de datos 0 12-04-2006 20:22:01
Diseño en tiempo de ejecucion Nelson Alberto Impresión 2 26-01-2006 09:34:12
Instalar componentes solo en tiempo de diseño DarKraZY Varios 0 19-08-2003 16:47:37


La franja horaria es GMT +2. Ahora son las 09:53:43.


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