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 20-09-2012
_CALI _CALI is offline
Miembro
 
Registrado: mar 2008
Posts: 99
Poder: 17
_CALI Va por buen camino
al minimizar un MDIChild este no se activa correctamente

Hola y gracias como siempre,
tengo un problema al minimizar un Formulario MDIChild en una aplicación MDI sencilla,
cuando llamo al formulario hijo y lo minimizo aparece activo (azulito), pero cuando abro mas formularios y trato de minizarlos estos no se activan, siempre aparece activo el primer formlario que minimize; me di cuenta que el mensaje WM_MDIACTIVATE no funciona, talvez deba sobreescribir algun procedimiento de ventana en fin, agradesco de antemano su ayuda

Gracias
Responder Con Cita
  #2  
Antiguo 20-09-2012
Avatar de movorack
[movorack] movorack is offline
Miguel A. Valero
 
Registrado: feb 2007
Ubicación: Bogotá - Colombia
Posts: 1.346
Poder: 20
movorack Va camino a la famamovorack Va camino a la fama
Hola, sería bueno que compartieras un poco del código que usas. Podrias estar minimizando un form modal y eso impediría que interactues con el resto de la aplicación hasta que no reciba la respuesta del modal
__________________
Buena caza y buen remar... http://mivaler.blogspot.com
Responder Con Cita
  #3  
Antiguo 20-09-2012
Avatar de AzidRain
[AzidRain] AzidRain is offline
Miembro Premium
 
Registrado: sep 2005
Ubicación: Córdoba, Veracruz, México
Posts: 2.914
Poder: 21
AzidRain Va camino a la fama
Si fuera modal no podria abrir mas ventanas, falta código para descifrarlo.
__________________
AKA "El animalito" ||Cordobés a mucha honra||
Responder Con Cita
  #4  
Antiguo 20-09-2012
_CALI _CALI is offline
Miembro
 
Registrado: mar 2008
Posts: 99
Poder: 17
_CALI Va por buen camino
gracias por su pronta respuesta, en realidad trabajo con dos formularios,
uno que es principal y el otro que es Hijo, es una aplicación básica MDI, ninguno es Modal.

MainForm FormStyle: fsMDIForm
FrmChild: FormStyle: fsMDIChild

en donde en el formulario principal (MainForm)tengo un menu al cual llamo al hijo de la ste manera:

Código Delphi [-]
procedure TFrmMain.MDIChild1Click(Sender: TObject);
begin
FrmChild := TFrmChild.Create(Application);
end;

cuando ejecuto la aplicacion... primero llamo al hijo y lo minimizo hasta ahi Ok,
pero cuando vuelvo a llamar al hijo o mejor dicho creo otra instancia del mismo y lo minimizo ahi esta el problema,
se minimiza bien pero este ultimo deberia estar activo, sin embargo el formulario minimizado previamente sige teniendo el foco o su barra de titulo sige activa (azul fuerte) por decirlo de otra manera, cuando el ultimo formulario minizado deberia estar activo

es una llamada básica al hijo, incluso note que en los demos que viene delphi con respecto a aplicaiones MDI tienen el mismo problema.

Última edición por _CALI fecha: 20-09-2012 a las 04:41:08.
Responder Con Cita
  #5  
Antiguo 20-09-2012
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Cita:
Es una llamada básica al hijo...
Hola _CALI.

De esa forma permite abrir mas de una instancia del mismo MDIChild cosa que normalmente no es deseable.

Para crear o activar el minimizado:
Código Delphi [-]
(* Crear MDIChild  *)
procedure TfrmMDIForm.AbrirMDIChild(AClass: TFormClass);
var
  i: Integer;
begin
  for i:= MDIChildCount-1 downto 0 do
    if MDIChildren[i] is AClass then                   //  ¿ Se encontro ?
    begin
      if MDIChildren[i].WindowState = wsMinimized then // ¿ Minimizado ?
        MDIChildren[i].WindowState:= wsNormal;         // => Restaurar
      Exit; // nada mas que hacer aquí...
    end;
  // no se encontró => Crearlo y traerlo al frente
  with AClass.Create(Self) do
    BringToFront;
end;
De este modo, si el MDIChild ya fué creado lo restaura, si no crea una nueva instancia.


Si deseas que el form que es llamado quede seleccionado y permanezca minimizado en lugar de restaurarse, sólo cambiá por la línea en negrita:
Código Delphi [-]
(* Crear MDIChild  *)
procedure TfrmMDIForm.AbrirMDIChild(AClass: TFormClass);
var
  i: Integer;
begin
  for i:= MDIChildCount-1 downto 0 do
    if MDIChildren[i] is AClass then                   //  ¿ Se encontro ?
    begin
      if MDIChildren[i].WindowState = wsMinimized then // ¿ Minimizado ?
       MDIChildren[i].Show;      
      Exit; // nada mas que hacer aquí...
    end;
  // no se encontró => Crearlo y traerlo al frente
  with AClass.Create(Self) do
    BringToFront;
end;

Llamada ejemplo: (para ambos casos)
Código Delphi [-]
procedure TfrmMDIForm.ToolButton1Click(Sender: TObject);
begin
  AbrirMDIChild(TfrmMDIChild1);
end;

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #6  
Antiguo 20-09-2012
_CALI _CALI is offline
Miembro
 
Registrado: mar 2008
Posts: 99
Poder: 17
_CALI Va por buen camino
Gracias ecfisa

El bringToFront soluciona en parte mi problema , me dio la idea atraves de tu código he interceptar el mensaje WM_SYSCOMMAND
del formulario hijo, resuelve en parte mi problema puesto que si hay formularios hijo abiertos (no minimizados estos ahora se quedan inactivos y el minizado esta activo), estoy cerca gracias denuevo.


Código Delphi [-]
procedure TFrmChild.WMSYSCommand(var Message: TWMSYSCommand);
begin
inherited;
if Message.CmdType = SC_MINIMIZE then
   BringToFront;

end;
Responder Con Cita
  #7  
Antiguo 20-09-2012
_CALI _CALI is offline
Miembro
 
Registrado: mar 2008
Posts: 99
Poder: 17
_CALI Va por buen camino
bueno aqui solucione mi problema

Código Delphi [-]
procedure TFrmChild.WMSYSCommand(var Message: TWMSYSCommand);
begin
inherited;
if Message.CmdType = SC_MINIMIZE then
  if Application.MainForm.ActiveMDIChild.WindowState = wsMinimized then
     BringToFront;
// SetWindowPos(Self.Handle,HWND_TOP,0,0,0,0,SWP_NOMOVE or SWP_NOSIZE);
end;

si hay alhuna otra respuesta agredecere mucho
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
Cerrar MDIChild desde otro MDIChild Lenny Varios 2 14-12-2011 21:06:34
MDI no se maximiza correctamente Lepe OOP 4 26-08-2010 18:42:37
Click en minimizar ventana y minimizar aplicacion dmassive Varios 5 16-02-2009 17:01:16
MDIChild abre otro MDIChild Paulao Varios 6 10-04-2008 18:02:05
Enlazar con base de datos este donde este 4-0 C++ Builder 5 12-01-2007 20:33:00


La franja horaria es GMT +2. Ahora son las 18:37:37.


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