PDA

Ver la Versión Completa : Guardar propiedades en el form


sur-se
30-09-2004, 09:56:03
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:
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:
... FLineWidth:=0; ...

El procedimiento es:
procedure TMiPanel.SetLineWidth(const Value: integer);
begin
FLineWidth := Value;
Paint();
end;

:confused: ¿que raro no?
¿Alguien sabe de donde puede venir el problema?
Salu2.

sur-se
30-09-2004, 10:11:12
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?.

basti
30-09-2004, 10:14:25
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

basti
30-09-2004, 10:17:58
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:


TMiPanel = class (TPanel)
private
...
public
...
published
property ParentColor;

end;


un saludo

sur-se
30-09-2004, 18:38:12
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.