Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 23-07-2007
Avatar de MaMu
MaMu MaMu is offline
Miembro
 
Registrado: abr 2006
Ubicación: Argentina
Posts: 863
Poder: 19
MaMu Va por buen camino
Destrucción de Formas MDIChild

Tengo una aplicación MDI, en la cual voy creando las MDIChild a medida que las necesito y las destruyo al cerrar las mimas, esto sin problemas.
Pero quiciera hacer que solo me permita una forma MDIChild a la vez, es decir, si creo una forma, y luego intento crear otra, primero, verificar si alguna forma esta creada y luego cerrarla y destruirla, recien ahi crear la nueva forma.

Como puedo hacer esto?

Yo las creo asi

Código Delphi [-]
MDIChild1:=TMDIChild1.Create(self);

y la destruyo en OnClose, asi:

Código Delphi [-]
  MDIChild1 := nil;
  action := cafree;

Intente hacer lo siguiente, para determinar si hay otra forma creada, asi

Código Delphi [-]
procedure cerrameformas;
begin
   if assigned(MDIChild1) then MDIChild1 Close;
   if assigned(MDIChild2) then MDIChild2 Close;
   if assigned(MDIChild3) then MDIChild3 Close;
end;
 
//entonces, al crear una nueva:
 
begin
   cerrameformas;
   MDIChild1:=TMDIChild1.Create(self);
end;

Funcioar, me funciona, pero... si lo ejecuto un par de veces seguidas, me tira error. Como tendria que hacer??

Saludos y gracias
__________________
Código Delphi [-]
 
try 
ProgramarMicro(80C52,'Intel',MnHex,True);
except
On Exception do
MicroChip.IsPresent(True);
end;
Responder Con Cita
  #2  
Antiguo 23-07-2007
Avatar de axesys
axesys axesys is offline
Miembro
 
Registrado: ene 2007
Ubicación: Los Mochis Sinaloa
Posts: 208
Poder: 18
axesys Va por buen camino
Yo uso el siguiente procedimiento pero no se si funcion con mdi

Código Delphi [-]
procedure TfrmMenu.CerrarVentanasAbiertas;
var
  i: integer;
begin
  for i:=0 to Screen.FormCount - 1 do
    if Screen.Forms[i].Name <> Name then
      Screen.Forms[i].Close;
end;
Responder Con Cita
  #3  
Antiguo 23-07-2007
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: may 2003
Ubicación: Colombia
Posts: 7.058
Poder: 30
jhonny Va camino a la famajhonny Va camino a la fama
Así, ¿Te funciona?:

Código Delphi [-]
  if Application.MainForm.MDIChildCount = 1 then
  begin
    Application.MainForm.MDIChildren[0].Close;
  end;

Aunque realmente podrias ser:

Código Delphi [-]
  if Application.MainForm.MDIChildCount = 2 then
  begin
    Application.MainForm.MDIChildren[0].Close;
  end;

Ya que no estoy seguro de que cuando se este creando dicho TForm nuevo, el ChildCount sea igual a 1 o 2.

//Edito: Ese codigo es asi, siempre y cuando el formulario principal de tu aplicación sea el formulario MDI "padre". De lo contrario, no debe ir MainForm si no, el nombre de dicho formulario MDI "padre".
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!"

http://www.purodelphi.com/
http://www.nosolodelphi.com/

Última edición por jhonny fecha: 23-07-2007 a las 20:40:17.
Responder Con Cita
  #4  
Antiguo 23-07-2007
Avatar de MaMu
MaMu MaMu is offline
Miembro
 
Registrado: abr 2006
Ubicación: Argentina
Posts: 863
Poder: 19
MaMu Va por buen camino
Cita:
Empezado por jhonny

Código Delphi [-]
 

  if Application.MainForm.MDIChildCount > 0 then   begin

    Application.MainForm.MDIChildren[numero_mdi_child].Close;
  end;
Y si lo quiciera generalizar, como obtengo el numero del MDIChild que esta abierto?
Saludos
__________________
Código Delphi [-]
 
try 
ProgramarMicro(80C52,'Intel',MnHex,True);
except
On Exception do
MicroChip.IsPresent(True);
end;
Responder Con Cita
  #5  
Antiguo 23-07-2007
Avatar de MaMu
MaMu MaMu is offline
Miembro
 
Registrado: abr 2006
Ubicación: Argentina
Posts: 863
Poder: 19
MaMu Va por buen camino
SOLUCIONADO

Pero ahora tengo una duda, cada vez que creo y destruyo un MDICHild, este se va creando pero se forma en una posicion diferente, es decir, en cascada, a pesar de ser el unico creado. Existe alguna forma de evitar ese efecto como de maximizacion cada vez que se crea la forma MDIChild??? porque esteticamente queda feo, osea creo la MDIChild maximizada, y me gustaria que la muestre ya maximizada, sin ese efecto visual de maximizarse. No se si se entiende lo que pregunto.
__________________
Código Delphi [-]
 
try 
ProgramarMicro(80C52,'Intel',MnHex,True);
except
On Exception do
MicroChip.IsPresent(True);
end;
Responder Con Cita
  #6  
Antiguo 24-07-2007
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: may 2003
Ubicación: Colombia
Posts: 7.058
Poder: 30
jhonny Va camino a la famajhonny Va camino a la fama
En alguna parte, después de cerrar el MDIChild coloca:

Código Delphi [-]
 
ShowWindow(Handle, SW_MAXIMIZE); //Donde Handle puede ser por ejemplo: Form2.Handle o el que necesites maximizar.

Espero que funcione.
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!"

http://www.purodelphi.com/
http://www.nosolodelphi.com/
Responder Con Cita
  #7  
Antiguo 24-07-2007
Avatar de MaMu
MaMu MaMu is offline
Miembro
 
Registrado: abr 2006
Ubicación: Argentina
Posts: 863
Poder: 19
MaMu Va por buen camino
Cita:
Empezado por jhonny
En alguna parte, después de cerrar el MDIChild coloca:


Código Delphi [-]
ShowWindow(Handle, SW_MAXIMIZE); //Donde Handle puede ser por ejemplo: Form2.Handle o el que necesites maximizar.


Espero que funcione.
No me funciona, se sigue produciendo el mismo efecto. Osea, se crea el MDIChild y si pudieramos verlo en cámara lenta, notariamos como se crea la ventanida y al cabo de cierto tiempo esta se agiganta hasta ocupar el area cliente. Intente engañar su creacion, forzando su tamaño MaxWidth y MaxHeight (en constraints) y mejora notablemente el efecto. Pero no se como hacer, digamos, para "resetear" la posicion inicial de cualquier ventana hija, esto es, cuando se van creando, se posicionan en cascada y aunque sea una sola la que siempre se crea, al destruir esta y crear otra, esta nueva ventana hija, toma la posicion del segundo lugar, y no la del primero, y asi hasta llegar a la X posicion, en donde luego vuelve a empezar. Claramente en las primeras el efecto no se nota tanto, pero en las otras si, y es bastate feo. Como puedo solucionar esto? Imaginense que crean una ventana hija, de 10 x 10, y al cabo de milisegundos explota y se expande hasta ocupar una area de 300 x 300, queda bastante feo el efecto visual.

Saludos
__________________
Código Delphi [-]
 
try 
ProgramarMicro(80C52,'Intel',MnHex,True);
except
On Exception do
MicroChip.IsPresent(True);
end;
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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
activar mdichild Io Varios 4 30-07-2006 20:17:20
ScrollBar en MDIChild marlok Varios 2 08-05-2006 18:45:24
help MDIChild !! kye_z Varios 6 18-11-2004 20:10:56
Problema con MDIChild thecarlos Varios 9 16-01-2004 00:08:43
Menu en MDIChild seti OOP 5 09-07-2003 12:10:25


La franja horaria es GMT +2. Ahora son las 02:06:02.


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