Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Organizar ventanas (https://www.clubdelphi.com/foros/showthread.php?t=13694)

jollodel 27-08-2004 09:43:28

Organizar ventanas
 
Hola! Mi problema es el siguiente, tengo una aplicacion con 4 MDIChild organizadas con Tile (del formulario padre). Lo que kiero es que cuando cierre una de ellas se vuelvan a organizar de nuevo ocupando el espacio dejado por la ventana cerrada. Por el momento he probado en a meter la instruccion Application.MainForm.Tile en el evento OnClose de la ventana pero no funciona. Me deja el es espacio vacio dejado por la ventana cerrada. Se os ocurre alguna idea. El caso seria esperar a q la ventana desapareciera por completo.

Tb he probado en el evento OnDestroy y na d na. Pinchando despues sobre un boton que haga Application.MainForm.Tile si que funciona, pero de lo que se trata es de que se haga de forma dinamica!!

Espero vuestras respuestas!!

Un abrazo ;)

Lepe 27-08-2004 11:26:15

Hola, en realidad si te funciona, pero cuando se ejecuta el evento OnClose, la ventana sigue ahí todavia, por tanto no notas la diferencia.

La forma mas facil, es que inhabilites la X de cerrar las ventanas hijas, y en la ventana padre, pones un boton de "Cerrar Ventana Actual", despues de cerrar la ventana hija activa, llamas al Title.

Código Delphi [-]
 if mainform.activemdichildwindow <> nil then 
begin
    formmdi.activemdichildWindow.close;
    application.processmessages;
end;
 Main.tile;

Puede que haya un método mas sofisticado, retocando el Destructor de las ventanas hijas para informar de cuando se ha cerrado, pero no sé si va funcionaría.

Lo digo de memoria, así que comprueba la sintaxis.



Espero que sea una solucion para ti.

jollodel 27-08-2004 14:17:02

Graciasssss
 
Todo funciona perfectamente!! Eres una maquina!!
Gracias

roman 27-08-2004 17:57:57

¿Y por qué privar al usuario de métodos tradicionales para cerrar una ventana habiendo otras formas de solucionar esto?

Al momento de construir un formulario hijo:

Código Delphi [-]
with TChildForm.Create(Self) do
  // Pedirle al hijo qe nos avise cuando se muera
  FreeNotification(Self);

// Reacomodar ventanas
Tile;

Para recibir la notificación de defunción del hijo redefinimos el método Notification del padre:

Código Delphi [-]
procedure TMainForm.Notification(AComponent: TComponent; Operation: TOperation);
begin
  inherited;

  // Si la noticia viene de un hijo y éste se ha muerto, reacomodar ventanas
  if (AComponent is TChildForm) and (Operation = opRemove) then
    Tile;
end;

Para asegurar que el hijo muera usamos su evento OnClose:

Código Delphi [-]
procedure TChildForm.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  Action := caFree;
end;

// Saludos

roman 27-08-2004 18:03:13

Por cierto: deshabilitar el botón cerrar (la X), al menos mediante la propiedad BorderIcons, no impide que el formulario se cierre con Ctrl-F4.

// Saludos


La franja horaria es GMT +2. Ahora son las 07:19:13.

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