Cita:
|
Empezado por dchaparro
Código Delphi [-]
procedure TFormBase.BtnNuevoClick(Sender: TObject);
begin
with TFormEditBase.Create(Application) do
try
ShowModal;
finally
Free;
end;
|
El problema aquí es que el formulario base no conoce cuáles serán los descendientes del formulario de edición.
Si te fijas, tu necesitarías poder tener
TFormEditBase1.Create(Application)
TFormEditBase2.Create(Application)
...
TFormEditBaseN.Create(Application)
según sea el caso. Pero la sentencia debe estar en el formulario base y no en cada descendiente. Entonces requerirías poner la clase del formulario de edición (TFormEdit1, TFormEdit2, etc.) en una variable que tomase uno de estos valores según corresponda. Pero si lees detenidamente verás que es un poco extraño: los valores de dicha variable serían
tipos de datos de manera que, ¿cuál sería el tipo de datos de tal variable?
La respuesta es: referencias de clase. Las referencias de clase son tipos de datos cuyas variables (variables de este tipo) toman como valores otros tipos de datos.
Para usarla declara una para tu formulario base de edición:
Código Delphi
[-]
type
TFormEditBase = class(TForm)
...
end;
TFormEditBaseClass = class of TFormEditBase;
Así, una variable de tipo TFormEditBaseClass podrá tomar como valores cualquier clase descendiente de TFormEditBase.
En la práctica lo que podrías hacer es agregar una de estas variables al formulario base:
Código Delphi
[-]
type
TFormBase = class(TForm)
protected
FormEditClass: TFormEditBaseClass;
end;
y cambiar la creación del formulario de edición así:
Código Delphi
[-]
procedure TFormBase.BtnNuevoClick(Sender: TObject);
begin
with FormEditClass.Create(Application) do
try
ShowModal;
finally
Free;
end;
Entonces, lo único que debes hacer es asignar el tipo correcto en el momento adecuado, por ejemplo, en el constructor de cada descendiente de TFormBase:
Código Delphi
[-]
constructor TFormBaseN.Create(AOwner: TComponent);
begin
inherited;
FormEditClass := TFormEditBaseN;
end;
Para más información busca "Class references" en la ayuda de Delphi.
// Saludos