Hola,
Cita:
Empezado por Troi
Tratando de buscar la solucion, he intentado todo eso que has dicho. (He agregao algunas cosas mas) y naena.
|
Porque me habré explicado como el culo.
A ver, supongamos el siguiente código fuente:
Código Delphi
[-]
type
TPanelEx = class(TPanel)
private
FPropiedad: string;
public
constructor Crear(propiedad: string);
published
property Propiedad: string read FPropiedad write FPropiedad;
end;
implementation
constructor TPanelEx.Crear(propiedad: string);
begin
Self.FPropiedad := propiedad;
Self.Caption := ''; end;
Ahí tenemos una clase que hereda de "TPanel" y añade una "Propiedad" a esta última. Ahora bien, en el constructor de la clase "TPanelEx"... ¿dónde se crea el propio "TPanel"? En ningún sitio, luego, si tratamos de acceder a la propiedad "Caption", que es de la clase "TPanel", obtendremos una violación de acceso muy linda.
¿Entonces? Pues tenemos que llamar al constructor de la clase "TPanel" desde el constructor de la clase "TPanelEx". Hasta aquí lo normal, pero, ¿qué ocurre con el constructor de "TPanel"? Pues que necesita un parámetro "Owner", de tipo "TComponent". Es decir, que no podría hacerse simplemente así:
Código Delphi
[-]
constructor TPanelEx.Crear(propiedad: string);
begin
inherited Create; Self.FPropiedad := propiedad;
Self.Caption := ''; end;
¿Y qué podemos hacer? Bien. Puesto que "TPanel" cuenta con un constructor que necesita un parámetro de tipo "TComponent", démosle ese parámetro a partir de uno en el constructor de "TPanelEx", más o menos así:
Código Delphi
[-]
type
TPanelEx = class(TPanel)
private
FPropiedad: string;
public
constructor Crear(AOwner: TComponent; propiedad: string);
published
property Propiedad: string read FPropiedad write FPropiedad;
end;
implementation
constructor TPanelEx.Crear(AOwner: TComponent; propiedad: string);
begin
inherited Create(AOwner);
Self.FPropiedad := propiedad;
Self.Caption := ''; end;
¿Se entiende ahora mejor o sigo explicándome como el culo? Je, je, je.