Hola que tal, bueno tengo un problema al liberar Form creados en tiempo de ejecución, el siguiente codigo me funciona perfectamente:
Código Delphi
[-] {si el Form no esta creado se crea y se muestra, y si le vuelven a dar click al boton entonces solo lo muestra.} if not Assigned(Form_Prueba) then begin Application.CreateForm(TForm_Prueba, Form_Prueba); Form_Prueba.Show; end else begin if Form_Prueba.WindowState <> wsNormal then Form_Prueba.WindowState := wsNormal; Form_prueba.SetFocus ; end;
Como esta en modo "Show" se libera el mismo Form desde el evento OnClose con FreeAndNil y funciona bien.
Código Delphi
[-]procedure TForm_Prueba.FormClose(Sender: TObject; var Action: TCloseAction); begin FreeAndNil(Form_Prueba); end;
Pero si deseo agregar un botón "Salir" en mi Form_Prueba al llamar a "Close" me genera un error... supongo que esto es por que FreeAndNil termina los procesos pendientes... y como OnClose es llamado desde otro evento a pesar de hacer el FreeandNil, regresa a terminar el evento OnClick (esto lo probe poniendo Showmessages y si regresa)
Código Delphi
[-]procedure TForm_Prueba.btnSalirClick(Sender: TObject); begin //Showmessage(''); close; //Showmessage(''); {Este se msg se muestra a pesar del FreeAndNil} end;
{*************************************************************************************************** ***************}
Anteriormente tenia en el OnClose el llamado a Release, pero al perecer no libera al Form:
Código Delphi
[-]procedure TForm_Prueba.FormClose(Sender: TObject; var Action: TCloseAction); begin release; end;
por al hacer la siguiente validación, el Assigned alparecer si lo encuentra :
Código Delphi
[-] if not Assigned(Form_Prueba) then ... end;
Esto me confunde, ya que se supone que Release internamente hace su propio Free... y lo ocupaba por que el Release sirve para cuando se quiere liberar el mismo Form que lo invoco a diferencia del Free que es para liberar externamente...
La pregunta general es ¿Como puedo liberar correctamente mi Form desde su evento Onclose y desde un botón "Salir" que invoque a Close; Y que respete la validación: ?
Código Delphi
[-] if not Assigned(Form_Prueba) then begin Application.CreateForm(TForm_Prueba, Form_Prueba); Form_Prueba.Show; end else begin if Form_Prueba.WindowState <> wsNormal then Form_Prueba.WindowState := wsNormal; Form_prueba.SetFocus ; end;
De antemano gracias y ojala puedan ayudarme!
Buen día saludos.