![]() |
![]() |
| Paypal | FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
|||||||
| Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
|
Herramientas | Buscar en Tema | Desplegado |
|
#2
|
||||
|
||||
|
Por defecto, cuando cierras un formulario, la acción a seguir es como sigue:
si el formulario es MdiChild se minimiza (como ya notaste) si el formulario no es MdiChild se oculta Este comportamiento pede alterarse usando el evento OnClose del formulario y ajustando el parámetro Action al valor de tu preferencia: caHide - oculta el formulario caFree - destruye el formulario caMinimize - minimiza el formulario caNone - no hace nada (no cierra el formulario) Pero con formularios MdiChild no es posible usar caHide de manera que sólo te queda destruirlo. Ahora bien, lo recomendado en aplicaciones MDI es quitar todos los formularios MdiChild de la lista 'Auto-create forms' en el menú Project|Options|Forms a fin de que no se creen automáticamente. Tú debes crearlos manualmente: Código:
with TMdiChildForm.Create do Show; Nota que con este método el usuario podrá abrir varias copias del formulario- lo cual, por otro lado es lo normal en una aplicación MDI. En ocasiones se requiere poder abrir una sóla copia- hecho que a mi parecer no tiene mucho sentido pero no lo discuto. Para ello debes poder detectar, en el código de arriba si ya ya está abierto o no el formulario para crearlo sólo en caso de que no esté abierto. Hay varias maneras de hacer esto. Una de ellas- no me gusta pero es muy práctica y fácil -es usar la variable que Delphi crea por tí cuando agregas el formulario durante el diseño: Código:
type
TMdiChildForm = class(TForm)
...
end;
var
MdiChildForm: TMdiChildForm;
Código:
if MdiChildForm <> nil then begin MdiChildForm := TMdiChildForm.Create(nil); MdiChildForm.Show; end; Código:
Action := caFree; MdiChildForm := nil; |
|
|
|