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 04-09-2006
Avatar de gluglu
[gluglu] gluglu is offline
Miembro Premium
 
Registrado: sep 2004
Ubicación: Málaga - España
Posts: 1.455
Poder: 21
gluglu Va por buen camino
Cerrar MDI Child con ALT-F4

Hola compañeros !

Como puedo cerrar un MDI Child cuando el usuario pulsa Alt-F4 sin que se cierre la aplicación entera ?!

Cada vez que pulso Alt-F4 al tener un form MDI Child activo, lo que hace es pasar directamente la pulsación al form principal y por lo tanto me cierra toda la aplicación. Tengo incluso puesto en el form 'Child' la propiedad KeyPreview = True.

Un saludo
__________________
Piensa siempre en positivo !
Responder Con Cita
  #2  
Antiguo 04-09-2006
[maeyanes] maeyanes is offline
Capo de los Capos
 
Registrado: may 2003
Ubicación: Campeche, México
Posts: 2.732
Poder: 23
maeyanes Va por buen camino
Esto se debe a que Alt-F4 se usa para cerrar la aplicación y Ctrl-F4 para cerrar las ventanas hijas...

Podrías probar con el siguiente código el cual no he probado:

Código Delphi [-]
// TForm1 debe tener KeyPreview = True

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if (Key = VK_F4) and (ssAlt in Shift) and (MDIChildCount > 0) then
    ActiveMDIChild.Close
end;

Este código verifica si existen ventanas hijas abiertas, si es así, cierra la ventana hija activa, de otra manera, se cierra la aplicación...


Saludos...
Responder Con Cita
  #3  
Antiguo 05-09-2006
Avatar de gluglu
[gluglu] gluglu is offline
Miembro Premium
 
Registrado: sep 2004
Ubicación: Málaga - España
Posts: 1.455
Poder: 21
gluglu Va por buen camino
Gracias Marcos !

Pero a pesar de todo no funciona.

Aunque el proceso de la ventana principal entre al código que propones, también cierra automáticamente la ventana principal, por lo que no me permite ejecutar el código que ponga en el OnKeyDown, incluso si pongo además Key := 0

Alguna otra propuesta ?
__________________
Piensa siempre en positivo !
Responder Con Cita
  #4  
Antiguo 05-09-2006
Avatar de gluglu
[gluglu] gluglu is offline
Miembro Premium
 
Registrado: sep 2004
Ubicación: Málaga - España
Posts: 1.455
Poder: 21
gluglu Va por buen camino
Buscando, buscando ... encontré algo y añadí otro poco, y me funciona correctamente.

Código:
TMainForm = class(TForm)
...
  public
    procedure AppMessage(var Msg: TMSG; var HAndled: Boolean);
...
 
procedure TMainForm.FormCreate(Sender: TObject);
begin
  Application.OnMessage := AppMessage;
end;
 
procedure TMainForm.AppMessage(var Msg: TMSG; var Handled: Boolean);
begin
  Handled := False;
  case Msg.Message of
    WM_SYSKEYDOWN:
      if Msg.wParam = VK_F4 then begin
        if MDIChildCount > 0 then begin
          ActiveMDIChild.Close;
          Handled := True;
        end
        else Handled := False;
      end;
  end;
end;
De esta manera, si queda alguna ventana MDIChild abierta, con Alt-F4 se cerrará la ventana MDIChild, hasta que se llegue al Form Principal que se cerrará también correctamente con Alt-F4 en ese caso.

Además quedan funcionales todas las opciones de cerrar las ventanas MDIChild o principal de cualquier otra manera, por ejemplo pulsando en la 'X' correspondiente.

Si hago click en la 'X' de una ventana MDIChild, sólo se cerrará esta. Y si hago click en la 'X' de la ventana principal, se cerrará directamente toda la aplicación. Si se desea preguntar si se quiere finalizar la aplicación habiendo ventanas abiertas, se puede añadir en el evento OnClose u OnCloseQuery del Form principal.

Saludos a todos !
__________________
Piensa siempre en positivo !
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
mdi form and child ale21alito Varios 9 07-02-2008 01:04:05
CONTROL+TAB en PAGECONTROL dentro de MDI-CHILD amadis OOP 2 11-08-2005 08:09:40
MDI Child que no se cierran senpiterno Varios 5 25-11-2004 06:14:37
Paneles Child JoseQ Varios 1 21-07-2004 11:09:52
Liberar memoria al cerrar un child. Bahamut Varios 2 04-05-2004 08:58:51


La franja horaria es GMT +2. Ahora son las 20:24:33.


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