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 07-09-2005
elcigarra elcigarra is offline
Miembro
 
Registrado: may 2005
Posts: 269
Poder: 19
elcigarra Va por buen camino
Transferir propiedades a un hijo

Vuelvo al ejemplo de mi hilo anterior:

Supongan que tengo un componente de tipo TCustomControl. Dentro de él, entre las variables privadas creo una (FEdit) de tipo TEdit. y dentro del constructor:

Código Delphi [-]
 constructor Create(AOwner: TComponent);
 begin
   inherited create(AOwner);
   FEdit := TEdit.create(self);
   FEdit.Parent := self;
   {...}
 end;
Ahora... como el componente que registro es de tipo TCustomControl, obviamente solo estarán publicadas (published) en diseño las propiedades del mismo, y ninguna del TEdit;

Supongan que yo quiero que aparezcan publicadas TAMBIEN las del componente hijo (o sea en nuestro caso las del EDIT). Hay alguna forma de hacerlo en bloque o la única forma es hacer:

Código Delphi [-]
 TMicomp.SetPropiedad(Value: {...});
 begin
   {...}
   FPropiedad := Value;
   FEdit.FPropiedad:=Value;
   {...}
 end;
para cada una?.

Además de ser tedioso y excesivamente extenso en código la verdad no estoy seguro como hacer para hacer una propiedad falsa para el componente padre del tipo compatible con la del TEdit en el caso que solo esté definida en su clase, p.ej "CharCase".

Última edición por dec fecha: 07-09-2005 a las 12:40:52. Razón: (Encerrar el código fuente en la etiqueta DELPHI)
Responder Con Cita
  #2  
Antiguo 07-09-2005
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
¿Por qué no simplemente publicas toda la subcomponente?

Código Delphi [-]
type
  TMiControl = class(TCustomControl)
  private
    FEdit: TEdit;
    procedure SetEdit(Value: TEdit);

  public
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;

  published
    property Edit: TEdit read FEdit write SetEdit;
  end;

implementation

{ TMiControl }

constructor TMiControl.Create(AComponent: TComponent);
begin
  inherited;

  FEdit := TEdit.Create(Self);
  FEdit.Parent := Self;
  FEdit.SetSubComponent(true);
end;

destructor TMiControl.Destroy;
begin
  FEdit.Free;
  inherited;
end;

procedure TMiControl.SetEdit(const Value: TEdit);
begin
  FEdit.Assign(Value);
end;

De esta manera la propiedad Edit aparecerá en el inspector de objetos similar, por ejemplo, a la propiedad Font del formulario: con un + a la izquierda que al expandirlo mostrará todas las propiedades de la componente Edit.

Esto lo acabo de probar en Delphi7. Creo recordar que en Delphi6 había algún problema con SetSubComponent.

// Saludos
Responder Con Cita
  #3  
Antiguo 09-09-2005
Avatar de DarkDrakon
DarkDrakon DarkDrakon is offline
Miembro
 
Registrado: abr 2005
Ubicación: Tacna - Peru
Posts: 46
Poder: 0
DarkDrakon Va por buen camino
Talking Aki te va

No crees ke seria mas sencillo solo al crear tu nuevo componente, ke herede no del componente TCustomControl, sino directamente del componente TEdit.

Código:
 unit NewComp; 
 
interface
 
uses
Classes, ....; 
 
type
TNewComp = class(TEdit)
private
{...}
Asi el constructor solo seria ::

Código:
 constructor TNewComp.Create(AOwner : TComponent); 
begin
inherited Create(AOwner); {Llama al constructor original (heredado)}
{...}
end;
Eso es todo lo ke yo haria
__________________
Dark Drakon::


"Ego sum Draco dormiens ... Aut insanit Draco, aut Versus facit..."


Última edición por DarkDrakon fecha: 09-09-2005 a las 01:05:28.
Responder Con Cita
  #4  
Antiguo 09-09-2005
elcigarra elcigarra is offline
Miembro
 
Registrado: may 2005
Posts: 269
Poder: 19
elcigarra Va por buen camino
Es cierto, aunque si lo que quisiera es un TEdit, yo no haría un componente nuevo, sinó que usaría el de la paleta Standard .

El componente que estaba haciendo es un poco más complejo que un TEdit, de hecho la variable interna de la cual quería publicar propiedades no era un TEdit sinó un particular descendiente de TCustomComboBox que yo mismo había creado, aunque el TControl tenía también un TEdit, etre otras propiedades nuevas.

No importa la idea original, si pretendo que la respuesta sea sencilla trato de hacer la pregunta sencilla, es decir, solamente pregunto lo que no sé. Adaptar la respuesta a mis complejidades particulares es un divertimento que a los que no somos profesionales de la programación no nos gusta renunciar Me gusta que me enseñen a jugar al ajedrez pero no que elijan la pieza que muevo... si pierdo, preguntaré después porqué.

De todas formas esto fue dicho con buena onda y agradecimiento no solo a DarkDrakon sino a todos amigos de este foro de quien he aprendido mucho, más y mejor que en mis pocos cursos de informática. Y si no suelo escribir este agradecimiento es porque lo considero sobreentendido.

un abrazo
Responder Con Cita
  #5  
Antiguo 09-09-2005
Avatar de yusnerqui
yusnerqui yusnerqui is offline
Miembro
 
Registrado: mar 2004
Ubicación: Cuba
Posts: 679
Poder: 21
yusnerqui Va por buen camino
Leiste la respuesta de roman, te sirvió???.

Cita:
Empezado por elcigarra
Y si no suelo escribir este agradecimiento es porque lo considero sobreentendido.
Pues yo, aunque plasmo mi agradecimiento por adelantado, también lo hago después de recibir la respuesta, comentando además, si esta me fue útil o como se solucionó el problema en cuestión. Considero que es la única forma que tengo de pagar a aquellas personas que sacrifican su tiempo para ayudarme desinteresadamente, y se por experiencia , que a esas personas que aportan soluciones les interesa saber si su consejo dio resultado. Pero en fin, cada cual con su estilo.

Saludos
__________________
Lo importante no es llegar primero, sino saber llegar.

Para que puedas llegar mejor lee la Guia de Estilo

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


La franja horaria es GMT +2. Ahora son las 11:36: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