Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

 
 
Herramientas Buscar en Tema Desplegado
  #9  
Antiguo 26-10-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
Cita:
Empezado por ramonibk
Vereis que al fina pongo la variable DoClose a True. esto es por que me encontre con el problema que al intentar cerrar el PC si la aplicacion se encuentra con el DoClose:=False no me permite cerrar el PC

y despues en el OnShow del Form lo ponfo de nuevo a false.
Buena observación aunque tu enfoque implica que la sesión de Windows no podrá cerrarse a menos que tu aplicación esté oculta.

Este "problema" con el cierre de sesión de Windows es, desde mi punto de vista, un problema que siempre ha estado presente en Delphi y Borland simplemente no ha querido modificarlo.

El punto es que cuando el usuario intenta cerrar la sesión de Windows, el sistema manda un mensaje WM_QUERYENDSESSION a todas las aplicaciones y la VCL traduce este mensaje igual que si fuera un WM_CLOSE (cerrar la ventana) de manera que no podemos distinguir si la petción de cerrar la ventana es porque se intenta cerrar la aplicación o porque se intenta cerrar la sesión de Windows.

La manera de solucionar esto es creando un manejador para el mensaje WM_QUERYENDSESSION:

Código Delphi [-]
type
  TForm1 = class(TForm)
  private
    procedure WMQueryEndSession(var Msg: TWMQueryEndSession);
  end;

en donde indiquemos en alguna variable que se está terminando la sesión de Windows para que en OnCloseQuery podamos detectarlo (quizá la misma variable DoClose).

Pero hay que tener cuidado en que el mensaje WM_QUERYENDSESSION puede cancelarse si alguna aplicación se niega a terminar (por ejemplo un editor con archivos sin guardar donde el usuario decida cancelar el cierre). Para ello hay también que implementar un maejador para el mensaje WM_ENDSESSION y verificar que la sesión realmente se termina examinando el valor de Msg.EndSession.

// Saludos
Responder Con Cita
 



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 10:42:33.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi