Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   duda al crear un descendiente de tpanel (https://www.clubdelphi.com/foros/showthread.php?t=56686)

hibero 23-05-2008 20:53:38

duda al crear un descendiente de tpanel
 
he creado un nuevo componente descendiente de tpanel.

En el metodo oncreate tengo el siguiente codigo

Código Delphi [-]
 constructor TMiPanel.Create(AOwner:TComponent)
 begin
    Inherited Create(AOwner);
    Caption:='';
    color:=clred;
 end;

si inserto un nuevo componente de la clase TMiPanel en un formulario me sigue apareciento el texto por defecto "MiPanel1". El caso es que la siguiente linea en la que cambio el color al panel a rojo si que funciona

Alguien sabe porque cuando creo un nuevo panel no aparece sin caption

saku2

Al González 23-05-2008 21:07:52

Aparentemente es porque el diseñador (Designer) de Delphi le da el nombre al componente después de haberlo instanciado y agregado al formulario. Y esto parece estar afectando de paso al propio título (propiedad Caption) del componente.

Echando un vistazo en el código fuente de la VCL (carpeta C:\Archivos de programa\Borland\Delphi7\Source\VCL), parece ser que todo se debe a la forma en que trabaja el método virtual TControl.SetName (ver Controls.pas):

Código Delphi [-]
procedure TControl.SetName(const Value: TComponentName);
var
  ChangeText: Boolean;
begin
  ChangeText := (csSetCaption in ControlStyle) and
    not (csLoading in ComponentState) and (Name = Text) and
    ((Owner = nil) or not (Owner is TControl) or
    not (csLoading in TControl(Owner).ComponentState));
  inherited SetName(Value);
  if ChangeText then Text := Value;
end;

Hay ciertas condiciones que le hacen determinar que el texto del control (en este caso, la propiedad Caption del panel) debe ser igualado al nuevo nombre dado.

Afortunadamente es un método virtual, y eso quiere decir que lo puedes redefinir (Override) en tu nuevo componente para evitar que suceda eso cuando no lo desees.

Espero te sea de utilidad, no dejes de comentarnos.

Al González. :)


La franja horaria es GMT +2. Ahora son las 01:10:48.

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