PDA

Ver la Versión Completa : Como crear una forma MDI?


bustio
13-01-2005, 17:14:28
HOla:
Tengo una gran duda. Necesito en mi aplicacion que una de sus formas sea al estilo MDI. Me fui guiando por el ejemplo que trae el Delphi y hice todo lo que esta ahi, pero no trabaja.
Lo primero que hice fue a mi forma MDIForm le puse la propiedad fsMDIForm, a la hija le di la propiedad MDIChild, quite la Child del DPR(Application.CreateForm(TMDIChild, MDIChild)), luego, en el boton que crea la forma hija le puse este segmento de codigo:



procedure TFrmCrearCuestionarios.CrearPregunta(aNombre: String);
var
Child: TMDIChild;
begin
{ create a new MDI child window }
Child := TMDIChild.Create(Application);
Child.Caption := Name;
end;



y cuando presiono este boton, salta esta excepcion:....


Project TM2.exe raised exception class EInvalidOperation with message 'Cannot create form. No MDI forms are currently active'. Process stopped. Use Step or Run to continue.


Acaso sera por que en las formas que no sean AutoCreateForms no se pueden crean MDIForms??
Acepto cualquier sugerencia!!

Salu2...

Lazaro Bustio Martinez

squenda
13-01-2005, 21:09:47
Hola Bustio

Mira yo cuando creo una aplicacion lo que hago es lo siguiente:

1. Creo una forma y en su propiedad "FormStyle" elijo la opcion "fsMDIForm" y la pongo en formas que se autocrean.

2. Creo otra forma y en su propiedad "FormStyle" elijo la opcion "fsMDIChild" pero no la cambio de directorio y la quito del autocreate.

3. Para mandar llamar la forma child coloco el siguiente codigo en el boton o menu correspondiente:

procedure TMain.Razas1Click(Sender: TObject);
begin
if frm_Razas = nil then
begin
application.CreateForm(Tfrm_Razas,frm_Razas);
frm_Razas.Show;
end;
end;

la primer linea "if Frm_Razas = Nil then" es para validar que no se abra dos veces la misma form y en el evento OnClose de dicha form coloco "Frm_Razas := nil"

y listo!! Aparece la forma.

Espero te sirva.

bustio
12-10-2005, 05:40:29
Hola Bustio

procedure TMain.Razas1Click(Sender: TObject);
begin
if frm_Razas = nil then
begin
application.CreateForm(Tfrm_Razas,frm_Razas);
frm_Razas.Show;
end;
end;



Espero te sirva.

Asi mismo lo hago.. lo unico es que cuando le doy al boton "CERRAR"(X) en la forma hija no se cierra sino que se minimiza y se va a la esquina inferior izquierda de la pantalla.. como hacer para que en verdad se cierre??

Lepe
12-10-2005, 12:29:50
En el evento FormClose de la ventana hija, pon: Action := cafree;

saludos