Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 27-08-2004
jollodel jollodel is offline
Miembro
 
Registrado: jul 2004
Posts: 22
Poder: 0
jollodel Va por buen camino
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
Responder Con Cita
  #2  
Antiguo 27-08-2004
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
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.

Última edición por Lepe fecha: 27-08-2004 a las 11:28:56.
Responder Con Cita
  #3  
Antiguo 27-08-2004
jollodel jollodel is offline
Miembro
 
Registrado: jul 2004
Posts: 22
Poder: 0
jollodel Va por buen camino
Graciasssss

Todo funciona perfectamente!! Eres una maquina!!
Gracias
Responder Con Cita
  #4  
Antiguo 27-08-2004
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
¿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
Responder Con Cita
  #5  
Antiguo 27-08-2004
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
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
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 22:24:59.


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
Copyright 1996-2007 Club Delphi