Ver Mensaje Individual
  #5  
Antiguo 01-11-2010
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Reputación: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
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; // por: if Assigned(Form2) ...
end;

Me gusta un poco más que la anterior. Aunque no estoy seguro que sea la mejor forma...

Saludos.

Última edición por ecfisa fecha: 01-11-2010 a las 22:37:27.
Responder Con Cita