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 27-09-2010
LuisAlf:: LuisAlf:: is offline
Miembro
 
Registrado: nov 2009
Posts: 60
Poder: 15
LuisAlf:: Va por buen camino
Error al entrar en sesion windows

Hola a todos de nuevo!!

Como dije anteriormente, he estado trabajando con una aplicación tipo gadget...
Desde hace tiempo que lo monte en mi Laptop, he tenido un problema que no tengo ni idea de como resolverlo....

Lo que pasa es que cada vez que trato de entrar a mi sesion ya sea por inactividad o por cerrarla, mi windows 7 me manda un error de que el programa a dejado de trabajar correctamente, y muchas ventanitas de error...

Segun supongo yo, creo que es por el timer que mueve la form, es que siempre se esta moviendo la aplicacion y cuando se cierra sesion algo pasa, eso creo yo...

La cuestion es que como soluciono ese problema? como detengo el timer antes de que se cierre sesion o antes de que se suspenda?..

Los dejo con mis dudas y cualquier ayuda pues sera bienvenida!

Última edición por LuisAlf:: fecha: 27-09-2010 a las 23:55:55. Razón: escritura
Responder Con Cita
  #2  
Antiguo 05-10-2010
Avatar de Ñuño Martínez
Ñuño Martínez Ñuño Martínez is offline
Moderador
 
Registrado: jul 2006
Ubicación: Ciudad Catedral, Españistán
Posts: 6.000
Poder: 25
Ñuño Martínez Tiene un aura espectacularÑuño Martínez Tiene un aura espectacular
Me da la sensación de que creas muchos TTimer y cada ventana de error se corresponde con uno de ellos. No sé los detalles, pero posiblemente cada TTimer cree un hilo nuevo, de ahí el problema.

La solución está en capturar el mensaje de cierre de sesión, que ahora mismo no recuerdo cuál es pero está descrito en la documentación del API.
__________________
Proyectos actuales --> Allegro 5 Pascal ¡y Delphi!|MinGRo Game Engine
Responder Con Cita
  #3  
Antiguo 05-10-2010
LuisAlf:: LuisAlf:: is offline
Miembro
 
Registrado: nov 2009
Posts: 60
Poder: 15
LuisAlf:: Va por buen camino
Mira...

Nada mas manejo dos timers...
Estuve comentando codigo...hasta ver cual era el del conflicto y si es dentro de uno de los timers...
Es una funcion que utilizo para detectar que el cursor esta fuera de la forma...
Código Delphi [-]
  if PtInRect(Self.BoundsRect, Mouse.CursorPos) then...

Y es en este bloque donde sale el error....detectado por Windows cuando trato de entrar al escritorio...(ya que si quito el if no me vuelve a saltar el error de la aplicacion al entrar al escritorio)

Entonces...como le hago para detener el timer antes de que se suspenda la laptop....???
Estuve implementando el manejador para el mensaje WM_QUERYENDSESSION
Pero no me ejecuta el showmessage que pongo en el...
Responder Con Cita
  #4  
Antiguo 15-10-2010
Avatar de Ñuño Martínez
Ñuño Martínez Ñuño Martínez is offline
Moderador
 
Registrado: jul 2006
Ubicación: Ciudad Catedral, Españistán
Posts: 6.000
Poder: 25
Ñuño Martínez Tiene un aura espectacularÑuño Martínez Tiene un aura espectacular
Disculpa la tardanza.

Cita:
Empezado por LuisAlf:: Ver Mensaje
Estuve implementando el manejador para el mensaje WM_QUERYENDSESSION
Pero no me ejecuta el showmessage que pongo en el...
Si no recuerdo mal, cuando la ventana de la aplicación recibe el mensaje WM_QUERYENDSESSION ya está todo el pescado vendido, no hay marcha atrás; es decir, la aplicación va a terminarse sí o sí. En los tiempos del Win16, Mr. Norton recomendaba no usar la API cuando se procesaba este mensaje, con excepción de unas pocas funciones que liberan recursos (o más específicamente los handlers de estos recursos). Existía una forma de "colgar" el sistema que consistía en intentar crear una ventana nueva en ese momento asignándole como "padre" la ventana principal de la aplicación. El cuelgue se producía, según creo, porque dicha ventana quedaba huérfana, dejando recursos y mensajes en el limbo.

Supongo (y es una suposición) que el "ShowMessage" intenta asignar la ventana principal de tu aplicación como "padre", pero al no existir esta el sistema simplemente ignora la petición. Pero ya digo que es una suposición, porque hace mucho que no me veo en estos bretes.
__________________
Proyectos actuales --> Allegro 5 Pascal ¡y Delphi!|MinGRo Game Engine
Responder Con Cita
  #5  
Antiguo 17-10-2010
LuisAlf:: LuisAlf:: is offline
Miembro
 
Registrado: nov 2009
Posts: 60
Poder: 15
LuisAlf:: Va por buen camino



Que onda!!

Gracias por responder...

Sabes que encontre el motivo de porque sale ese error...

Estuve programando el xeyes en otra aplicacion y me di cuenta que tambien le pasa lo mismo....

Y Yo creo que es por las propiedades del objeto mouse.curpos.X y mouse.curPos.y.....

Ya que en los dos utilizo el acceso a las propiedades del mouse....

Cualquiera que quiera intentarlo para probar lo que les dijo..

pongan un timer que se este ejecutando muy rapido para que este leyendo estas propiedades del mouse....claro en una lap con windows 7..no se si pase lo mismo en una pc...
Código Delphi [-]
var coordenadax:integer;
begin
      coordenadax:=mouse.curPos.X;
end;

y traten de suspenderla y entrar otra vez a su session y el error se produce luego restaurada la session...

La verdad no se como proceder...
Responder Con Cita
  #6  
Antiguo 19-10-2010
Avatar de Ñuño Martínez
Ñuño Martínez Ñuño Martínez is offline
Moderador
 
Registrado: jul 2006
Ubicación: Ciudad Catedral, Españistán
Posts: 6.000
Poder: 25
Ñuño Martínez Tiene un aura espectacularÑuño Martínez Tiene un aura espectacular
¡Pues claro que falla, jomío! ¿A quién se le ocurre utilizar un "timer" para leer la posición del ratón? Si es que...

Después de la bronca, te recomiendo que replantees la aplicación. Casi es mejor que utilices un bucle (cuasi)infinito para hacer esto. Lo que no tengo muy claro es dónde colocarlo, pero sería tal que así:

Código Delphi [-]
TMiForm = CLASS (TFORM)
{ ... blablabla ... }
PRIVATE
(* Marca de final.  Poner a FALSE en "OnCreate" y a TRUE en "OnClose". *)
  Terminar: BOOLEAN;
{ ... blablabla ... }
(* El meollo de la cuestión. *)
  PROCEDURE BuclePrincipal;
  BEGIN
    REPEAT
      coordenadax:=mouse.curPos.X;
      coordenadax:=mouse.curPos.X;
      Application.ProcessMessages;
    UNTIL Terminar;
  END;

Como digo, el problema aquí reside en desde dónde llamar al método "BuclePrincipal".
__________________
Proyectos actuales --> Allegro 5 Pascal ¡y Delphi!|MinGRo Game Engine
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
Mensaje Inicio Sesion windows XP cacu Windows 3 19-02-2009 16:57:31
Obtener id de la Sesion de Windows pedrnsanmar API de Windows 4 13-05-2008 16:32:11
Bloqueo de sesión Windows XP Val API de Windows 2 11-10-2007 08:23:10
Cerrar sesion Windows XP Caral Windows 9 19-09-2006 00:42:34
Sesion (de Windows) Oculta Jose_Pérez Redes 1 25-06-2005 16:43:08


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


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