PDA

Ver la Versión Completa : Comportamiento de Forms MDI


fwhite
25-11-2011, 15:42:47
Hola amigos:
Otra vez con mis problemas. Tengo dos forms, una con FormStyle fsMDIFORM y la otra fsMDICHILD. El problema es que al pulsar el boton para abrir la child ésta no se muestra. Visible lo tengo en True.
Haber quien me puede ayudar. Graciñas.

oscarac
25-11-2011, 16:09:58
y como lo estas activando?

form1.show?
form1.showmodal?

ecfisa
25-11-2011, 16:13:14
Hola.

Al ser MDI, debería mostrarse con el solo echo de crearlo:

TMDIChild.Create(Self);


Saludos.

fwhite
25-11-2011, 17:28:35
La child la creo así:


With fmChild.Create(Self) do
try
Show;
finally
Free;
end;

ecfisa
25-11-2011, 18:09:17
Hola fwhite.

No es necesario invocar al método Show ya que si la propiedad FormStyle esta declarada como fsMDIChild, la propiedad Visible se pone a True automáticamente.

Si llamas a la creación desde la instancia (frMDIChild) como en tu código, te va a dar error. Hay que llamarla desde la clase (TfrMDIChild). Por otro lado, si utilizás Free, al ser la ventana no modal, retorna inmediatamente y por supuesto con Free se libera y por tanto cierra al instante de ser abierta.

Aunque existen otros modos, te pongo un ejemplo de como podés mostrarla.

MDIForm:

...
uses Unit2; { unit de frMDIChild }

procedure TfrMDIForm.Button1Click(Sender: TObject);
begin
if not Assigned(frMDIChild) then // si no existe
TfrMDIChild.Create(Self); // crearla/mostrarla
end;


MDIChild:

...

procedure TfrMDIChild.FormClose(Sender: TObject; var Action: TCloseAction);
begin
// hace que la ventana se cierre (las ventanas MDIChild por defecto se minimizan)
Action:= caFree;
end;

procedure TfrMDIChild.FormDestroy(Sender: TObject);
begin
frMDIChild:= nil; // por: if not Assigned(frMDIChild)...
end;


Por último te pongo un enlace que te va a aclarar el uso de MDI Aplicaciones MDI (http://www.infonegocio.com/tudela2/delphiladero/docs/mdi/mdi1.htm)

Edito: Me olvidaba... Quitá el form MDIChild de la lista: Proyect -> Options -> Forms -> Auto-create forms:

Saludos.

fwhite
26-11-2011, 11:20:59
Hola a todos.
Ecfisa, he probado como me dices, pero el resultado es igual. He mirado la página que me indicas, lo hago como en ella se detalla y el resultado es el mismo. No se que puede pasar.
Un saludo.

fwhite
26-11-2011, 13:03:05
Hola otra vez:
Graciñas por vuestras respuestas. Ya he descubierto lo que me pasaba. La ventana child se mostraba correctamente, pero se escondía detras de un panel de unos componentes externos a Delphi y por eso no la vía.
Un saludo.