PDA

Ver la Versión Completa : Form MDIChild se queda minimizado y no se cierra.


Angel.Matilla
20-09-2018, 09:51:57
Gracias a todos los que me ayudasteis en mi anterior hilo sobre este tema. Tengo ahora otro problema que no veo como resolver y me tiene perplejo.


Otro de los formularios que he definido como MDIChild en la aplicación me está despistando un montón.
1. Lo llamo así:
void __fastcall TfMenu::DatFijClick(TObject *Sender)
{
Application->CreateForm(__classid(TfDatFij), &fDatFij);
fDatFij->Show();
}Se abre sin ningún problema y se muestra bien, pero a la hora de cerrarlo me hace esto:
https://preview.ibb.co/c5USZz/Pantalla.jpg
me lo deja minimizado abajo a la izquierda. El código que tengo puesto para cerrarlo es este:
void __fastcall TfDatFij::Button11Click(TObject *Sender)
{
this->Close();
}//---------------------------------------------------------------------------

void __fastcall TfDatFij::FormKeyPress(TObject *Sender, char &Key)
{
if (Key == 27)
{
Key = 0;
Button11Click(NULL);
return;
}
}Da lo mismo que pulse en el botón asociado al evento, que pulse en el cuadro CERRAR del formulario o que pulse la tecla escape; siempre me lo deja minimizado y no lo entiendo ya que el código para cerrar es el mismo que en otros formularios que funcionan bien y las propiedades son las mismas.

Angel.Matilla
20-09-2018, 09:54:25
Se me está aocurriendo una cosa: ¿Puede ser que ese comportamiento se deba a que está asociado a una opción secundaria de un TMainMenu en vez de la opción prinicpal?

Casimiro Notevi
20-09-2018, 10:05:06
Del libro La cara oculta de Delphi 4 y también en La cara oculta de C++ Builder.
Si la aplicación es MDI la ventana principal debe tener en FormStyle el valor fsMDIForm, mientras que cada ventana hija debe tener el estilo fsMDIChild.

Esto no quita que existan ventanas dentro de la aplicación cuyo estilo sea fsNormal o fsStayOnTop, principalmente cuadros de diálogo con ejecución modal.

Cuando una ventana tiene el estilo fsMDIForm o fsMDIChild no puede cambiar su propiedad Visible a False. Además, el valor inicial del parámetro Action en el
evento OnClose es caMinimize, con lo que al intentar cerrar una ventana hija MDI lo que lograremos es minimizarla, en realidad.

Angel.Matilla
20-09-2018, 11:37:53
Del libro La cara oculta de Delphi 4 y también en La cara oculta de C++ Builder.
Me sonrojo de vergüenza por no haber caido en la cuenta. :(

Casimiro Notevi
20-09-2018, 12:52:56
Con la de cosas que hay que mantener todo el día en la cabeza... estaríamos todos siempre rojos :)

Young
21-09-2018, 17:17:18
En resumen en el evento OnClose debe asignar caFree al parámetro Action para que se cierre y libere el formulario.

Saludos.