Hola de nuevo.
Probando con Trace Into a ver por qué OnShow se disparaba en diferente órden que en los Forms SDI, se me ocurrió otra forma de hacerlo:
MDIForm:
Código Delphi
[-]
uses Unit2;
procedure TForm1.Button1Click(Sender: TObject);
begin
TForm2.Mostrar(1234);
end;
MDIChild:
Código Delphi
[-]
type
TForm2 = class(TForm)
procedure FormShow(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure FormCreate(Sender: TObject);
private
f_id_Ajuste: Integer;
public
property IDAjuste: Integer read f_id_Ajuste write f_id_Ajuste;
class procedure Mostrar(Num: Integer);
end;
var
Form2: TForm2;
implementation {$R *.dfm}
procedure TForm2.FormCreate(Sender: TObject);
begin
...
...
OnShow:= nil;
end;
class procedure TForm2.Mostrar(Num: Integer);
begin
if not Assigned(Form2) then
Form2:= Create(nil);
with Form2 do
begin
f_id_Ajuste:= Num;
OnShow:= FormShow;
FormShow(nil);
end;
end;
procedure TForm2.FormShow(Sender: TObject);
begin
Caption:= IntToStr(f_id_Ajuste);
end;
procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action:= caFree;
Form2:=nil; end;
Me gusta un poco más que la anterior. Aunque no estoy seguro que sea la mejor forma...
Saludos.