Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Comportamiento de Forms MDI (https://www.clubdelphi.com/foros/showthread.php?t=76763)

fwhite 25-11-2011 15:42:47

Comportamiento de Forms MDI
 
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:
Código Delphi [-]
  TMDIChild.Create(Self);

Saludos.

fwhite 25-11-2011 17:28:35

La child la creo así:

Código Delphi [-]
 
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:
Código Delphi [-]
...
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:
Código Delphi [-]
...

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

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.


La franja horaria es GMT +2. Ahora son las 04:04:36.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi