Ver Mensaje Individual
  #6  
Antiguo 01-07-2005
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Reputación: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
A ver. Creo que ya nos liamos.

El código que pones no es correcto según la aclaración que hice en el último mensaje.

En frm1, para abrir el segundo formulario pones:


Código Delphi [-]
if frm2 = nil then
begin
  frm2 := Tfrm2.Create(Self);
end;

frm2.Show;

En el evento OnClose del segundo formulario pones:


Código Delphi [-]
procedure Tfrm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  Action := caFree;
  frm2 := nil;
end;

Si el segundo formulario está abierto entonces frm2 es distinto de nil y la condición en el primer código evita que se cree de nuevo.

Cuando cierras el segundo formulario, la asignación Action := caFree hace que el formulario se destruya y la asignación frm2 := nil vuelve a poner a nil la variable con la que te refieres al formulario. Entonces, cuando vuelves a intentar abrirlo, la condición (frm2 = nil) es ahora cierta y se vuelve a crear.

En cualquiera de los dos casos el formulario se muestra. Si ya existía, frm2.Show garantiza que se ponga al frente en caso de haber estado oculto por otra ventana.

// Saludos
Responder Con Cita