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 30-09-2004
sur-se sur-se is offline
Miembro
 
Registrado: may 2003
Posts: 212
Poder: 21
sur-se Va por buen camino
Guardar propiedades en el form

Hola. Trabajo con Delphi 5 y he creado un componente heredado de otro al que le he añadido una serie de propiedades que necesitaba, pero me ocurre una cosa extraña. Algunas de las propiedades no guardan el valor que le asigno desde el Object Inspector, es decir, desde Delphi le doy una propiedad, cierro el módulo, lo vuelvo a abrir y vuelve a aparecer el valor por defecto. No me ocurre con todas, sólo con algunas. He mirado el form en texto y efectivamente, las propiedades aparecen pero con el valor por defecto.
He repasado el componente y no utilizo default en las property, sino que en el create del objeto se dan los valores por defecto (así tengo entendido que es como hay que hacerlo), y después si en Delphi le asigno otro valor a una propiedad, prevalece este último.

Un ejemplo de propiedad que tengo y que no se guarda es el siguiente:
Código:
TMiPanel = class(TPanel)
  private
    { Private declarations }
    ....
    FLineWidth  : integer;
    ...
  public
    constructor Create(AOwner: TComponent); override;
    ...
  published
    ...
    property LineWidth  : integer read FLineWidth write SetLineWidth;
    ...
En el create del componente tengo:
Código:
... FLineWidth:=0; ...
El procedimiento es:
Código:
procedure TMiPanel.SetLineWidth(const Value: integer);
begin
  FLineWidth := Value;
  Paint();
end;
¿que raro no?
¿Alguien sabe de donde puede venir el problema?
Salu2.
Responder Con Cita
  #2  
Antiguo 30-09-2004
sur-se sur-se is offline
Miembro
 
Registrado: may 2003
Posts: 212
Poder: 21
sur-se Va por buen camino
Problema encontrado

Hola, me contesto a mi mismo rápidamente porque me he dado cuenta donde esta el error. Al escribir el problema me dado cuenta. Parece que contando el problema rápidamente se encuentra la solución.
No le he puesto el default a la propiedad. Tendría que ponerle el default 0 para que si no es 0, lo guarde en el fichero. Que tontería.
Pero ahora ya que estamos se me plantea otra duda. También me ocurre que no se me guarda el ParentColor, que viene heredado del TPanel del que desciende mi componente. ¿Como hago para que si lo almacene? ¿Le tendría que añadir property ParentColor default False; o algo así al código?.
Responder Con Cita
  #3  
Antiguo 30-09-2004
[basti] basti is offline
Miembro Premium
 
Registrado: ago 2004
Posts: 388
Poder: 20
basti Va por buen camino
Creo que deberías quitar FLineWidth := 0 del evento onCreate, puesto que este evento se ejecuta después de asignar los valores a las propiedades. Si quieres que por defecto el valor sea 0, entonces lo mejor es añadir una clausula Default a la definición de la propiedad.

un saludo
Responder Con Cita
  #4  
Antiguo 30-09-2004
[basti] basti is offline
Miembro Premium
 
Registrado: ago 2004
Posts: 388
Poder: 20
basti Va por buen camino
Bueno me has adelantado en la respuesta. A tu segunda pregunta, para heredar una propiedad simplemente tienes que declararla dentro de tu clase sin añadirle nada:

Código Delphi [-]
TMiPanel = class (TPanel)
  private
     ...
  public
     ...
  published
     property ParentColor;
  
end;

un saludo
Responder Con Cita
  #5  
Antiguo 30-09-2004
sur-se sur-se is offline
Miembro
 
Registrado: may 2003
Posts: 212
Poder: 21
sur-se Va por buen camino
Hola, efectivamente para heredar la propiedad hago eso, property ParentColor, el tema era añadirle el default para que la almacene en el form, si la propiedad padre no lo hace. Así pues le he puesto property ParentColor default True;. Funciona perfectamente. De todas formas, el problema con PartentColor venía por otro proceso que no me había dado cuenta, así que lo he quitado y ya va bien. Principalmente el problema estaba en el FLineWidth.

Respecto a lo de quitar FLineWidth:=0 del create del componente, eso no lo puedo hacer porque si no entonces el componente no tiene valor por defecto para esa propiedad cuando se crea, ya que según tengo entendido, el default en la property al diseñar un componente sólo sirve para indicar que se debe o no almacenar el valor en el form si es diferente al valor de default. Por las pruebas que he hecho funcion así pero ¿alguién puede confirmarlo?
Gracias por las respuestas y salu2.
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 06:19:50.


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