Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos


Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 23-05-2008
hibero hibero is offline
Miembro
 
Registrado: nov 2003
Posts: 104
Poder: 15
hibero Va por buen camino
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
Responder Con Cita
  #2  
Antiguo 23-05-2008
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.498
Poder: 22
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
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.
__________________
Twitter
Código
Blog
WhatsApp para consultas rápidas y asesorías profesionales: +52 1 2711260117
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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
Que componente descendiente de TStringGrid me recomiendan?? DANY OOP 12 02-12-2010 23:30:02
Editor de columnas en descendiente de TCustomDbEdit GuerreroDelphi OOP 0 20-01-2008 06:39:46
Descendiente de TCustomDbGrid GuerreroDelphi Varios 4 31-12-2007 04:14:15
Algún componente Descendiente de dbGrid para enlazar a más de 1 tabla ???? AGAG4 Varios 2 06-11-2006 11:07:44
Descendiente de TCollectionItem de solo lectura adlfv OOP 3 15-09-2005 16:59:55


La franja horaria es GMT +2. Ahora son las 14:05:03.


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