... perdón por el rollo anterior. Me concentro ahora en vuestros comentarios.
DarKraZY : He entendido perfectamente. Dos pequeños comentarios a tu explicación. Falta 'Property' en el código expuesto y especificar que la 'Property' debe de ser definida tanto en Form2 como en Form3. En ningun caso esa propiedad se refiere al Form1. Sólo quería aclararlo para otros foristas.
Código Delphi
[-]TForm1 = class(TForm);
Procedure TForm1.ButtonClick(Sender: TObject);
begin
Form2 := TForm2.Create(Self);
Form2.DataSetForm := IBDataSet1;
end;
Código Delphi
[-]TForm2 = class(TForm);
...
private
FDataSetForm : TIBDataSet;
public
property DataSetForm: TIBDataSet read FDataSetForm write FDataSetForm;
end;
Procedure TForm2.ButtonClick(Sender: TObject);
var
Aux : Integer;
begin
Aux := DataSetForm.FieldByName('CAMPO1').Value;
Form3 := TForm3.Create(Self);
Form3.DataSetForm := DataSetForm;
end;
Código Delphi
[-]TForm3 = class(TForm);
...
private
FDataSetForm : TIBDataSet;
public
property DataSetForm: TIBDataSet read FDataSetForm write FDataSetForm;
end;
Procedure TForm3.ButtonClick(Sender: TObject);
var
Aux : Integer;
begin
Aux := DataSetForm.FieldByName('CAMPO1').Value;
end;
Román : Pasar parámetros por propiedades. También lo entendí ya perfectamente. Quiero añadir un pequeño detalle que me he dado cuenta al implementarlo:
Código Delphi
[-]type
TForm3 = class(TForm)
private
FParam: Integer;
public
property Param: Integer read FParam write FParam;
end;
Al construir el formulario en p.ej. Form2
Código Delphi
[-]
procedure TForm2.ButtonClick(Sender: TObject);
Form3 := TForm3.Create(Application);
Form3.Param := 84;
end;
Me he dado cuenta, está claro, que durante la creación de Form3, el parámetro no está disponible. Por tanto tengo que reubicar todo aquello que dependa de ese parámetro a otro evento, por ejemplo el OnActivate del Form3.
Por último. Otro pequeño detalle referente a los campos de un IBDataSet cualquiera.
Al 'pasarlo' a otros formularios mediante la opción de 'property' siempre tengo que acceder a los valores utilizando FieldByName('CAMPO'). Me he dado cuenta en general en mi programa que al permitir utilizar valores null, si accedo al valor mediante IBDataSet1CAMPO.Value, si el campo es null me devuelve 0, tanto si es 0 como si es null. (Personalmente me viene bien que sea así, pero que dentro de la BD diferencie entre 0 y null).
En cambio si accedo por IBDataSet1.FieldByName('CAMPO').Value y preguntar por su valor, Delphi (2006 VCL.NET en mi caso) diferencia entre 0 y null y en un If tengo que preguntar ambas opciones:
Código Delphi
[-]if (IBDataSet1.FieldByName('CAMPO').IsNull) or
(IBDataSet1.FIeldByName('CAMPO').Value = 0) then ...
Una vez más gracias a todos.
Estoy en ello ... como dice por ahí algún avatar !