PDA

Ver la Versión Completa : Problema con Forms MDI


novato03
04-09-2007, 05:21:54
Hola amigos del clubdelphi, estoy tratando de invocar un formulario fsMDIChild
desde un formulario fsMDIForm, pero al hacerlo con el siguiente código...:confused:


procedure TForm1.Button1Click(Sender: TObject);
begin
form2:=TForm2.Create(self);
try
Form2.ShowModal;
finally
Form2.Free;
end;
end;


me presenta el siguiente error...
------------------------------------------------------------------------
Project Project1.exe raised exception class EInvalidOperation with message 'Cannot make a visible window modal'. Process stopped. Use Step or Run to continue.
-------------------------------------------------------------------------

El asunto es que le coloque la propiedad visible a false pero dice que el formulario no puede estar Hide, de tal forma que lo deje en True.

Por cierto en Project del menu el formulario esta en la ventana de Available forms.

Si alguien me puede dar una ayudita con esto se lo agradecería, gracias de antemano.

Delphius
04-09-2007, 05:25:41
Hola novato03,
Tu error está en que estas tratando de mostrar modalmente una ventana hija. Y esto está fuera del uso esperado.
No tiene sentido alguno mostrar modalmente una ventana hija. En vez de usar ShowModal, emplea Show().

Saludos,

novato03
04-09-2007, 05:36:36
Empleo el show pero no me muestra nada, solo un parpadeo y listo:confused:

Delphius
04-09-2007, 05:47:46
Hola,
Mira, yo di por entendido que el uso del try/except lo destruirías.... ¿porque no te fijas lo que realmente haces?

Si tu indicas:
try
form2.show
finally
form2.free;
end;

Lo que consigues es crear e inmediatamente liberar el form2. La forma correcta:
form2 := TForm2.Create(selft);
form2.Show;

El uso del try/finally tal como lo tenias inicialmente te serviría si crearas ventanas modales, no MDIChild.

Saludos,

novato03
04-09-2007, 05:59:35
Muchas gracias amigo delphius, funciona muy bien el único detalle es que cuando presiono el botón de salir el formulario solo se minimiza, acaso hay otra forma de cerrar estos formularios child?:confused:

Delphius
04-09-2007, 06:08:37
En una aplicacion MDI, ese es el comportamiento esperado. Lo habitual, si tu deseas que se cierre debes setear el valor de la variable action del evento onClose, por caFree:

procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action := cafree;
end;

Saludos,

novato03
04-09-2007, 06:16:54
Muchas gracias por tu ayuda amigo Delphius, ahora funciona perfectamente....Gracias:)