Ver Mensaje Individual
  #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
Reputación: 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