Ir al contenido


Foto

[C++ Builder] Gestión del evento de movimiento del ratón a nivel de aplicación


  • Por favor identifícate para responder
1 respuesta en este tema

#1 Vivas84

Vivas84

    Member

  • Miembros
  • PipPip
  • 23 mensajes

Escrito 12 marzo 2012 - 05:53

¡Buenos días!

Estoy tratando de gestionar que si no se mueve el ratón en una determinada cantidad de tiempo, llamémosle TiempoInactivo, se active un salvapantallas propio que tenemos en una aplicación.

No es muy complicado, teniendo el evento OnMouseMove, en el que cada vez que se mueve el ratón, se le asigna a un contador el valor TiempoInactivo, y se activa un timer que cada segundo le va restando 1 hasta que llega a 0. Al llegar a 0, se muestra la ventana del salvapantallas.

El problema, es que el evento OnMouseMove está ligado al formulario y no a la aplicación, así que la única forma que se me ocurre de hacerlo de forma decente es que exista un evento de gestión de movimiento del ratón a nivel de aplicación, de forma que si yo abro otra ventana y muevo el ratón en otra ventana, la cuenta atrás no siga.

Otra forma, un poco chapucera es tener el contador como variable global, e implementar el OnMouseMove en todos los formularios, de forma un poco manual y rústica...

Saludos.
  • 0

#2 escafandra

escafandra

    Advanced Member

  • Administrador
  • 4.107 mensajes
  • LocationMadrid - España

Escrito 12 marzo 2012 - 01:54

Tienes dos opciones. Puedes realizar un Hook al ratón o usar un Timer.

Para este caso, en el que el timer puede ser de un tiempo alto, quizás es preferible por ser menos complejo y mas fácil de entender.

Básicamente en el timer se miraría la posición Global de mouse, si no se ha movido desde la última vez... SE opone en marcha el salvapantallas propio.

Un ejemplo sería esto:


cpp
  1. void __fastcall TForm1::Timer1Timer(TObject *Sender)
  2. {
  3.     static TPoint oldPoint;
  4.     TPoint Point;
  5.     ::GetCursorPos(&Point);
  6.     if (Point.x == oldPoint.x && Point.y == oldPoint.y) Beep();
  7.     ::GetCursorPos(&oldPoint);
  8. }



Saludos.
 
  • 1




IP.Board spam blocked by CleanTalk.