Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

Saber cuando el raton esta quieto un periodo de tiempo

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Consultas
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: Saber cuando el raton esta quieto un periodo de tiempo Responder citando

Buenas...

Querria saber como una aplicacion puede reconocer que el puntero del raton esta inmovil durante un periodo de T segundos y entonces realizar las operaciones pertinentes.

Gracias
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Buscando la ayuda de Builder hay un evento OnMouseMove, y trae código de ejemplo, dentro de TControl. Otra cosa que se me ocurre es comprobar cada x milisegundos con un TTimer las coordenadas del cursor.
_________________
Un saludo

Necesitamos tu ayuda: Envía AI al 27595 (Coste 1,20 euros + IVA)
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

Ok mirare eso.... gracias por contestarme
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Tienes la función del API "GetLastInputInfo", que te puede servir.

En el foro tienes un ejemplo del uso de la misma posteado por juanma:

    [Inactividad Teclado y Raton]
    https://cppbuilder.es/viewtopic.php?p=42630#42630
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Gracias Leo.. Gracias juanma
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Buenas..

Combinando timer con la posicion del raton en cada momento he implementado este codigo para que me detecte cuando el raton esta quieto

Código:
class TForm1 : public TForm
{
__published:   // IDE-managed Components
        TLabel *Label1;


private:   // User declarations

        TTimer *Timer;
        float Tiempo;

        void __fastcall TimerTimer(TObject *Sender);

 int PosRatonX;
 int PosRatonY;

void __fastcall WMMove (TMessage Message);
BEGIN_MESSAGE_MAP
 VCL_MESSAGE_HANDLER(WM_MOUSEMOVE, TMessage, WMMove);
END_MESSAGE_MAP (TForm);



Código:


//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
  Timer = new TTimer(this);
  Timer->OnTimer = TimerTimer;
  this->Tiempo = 0.0;

  PosRatonX =0;
  PosRatonY =0;

}


void __fastcall TForm1::WMMove(TMessage Message)
{
  int PosX = LOWORD(Message.LParam);
  int PosY = HIWORD(Message.LParam);

  if (PosRatonX != PosX  || PosRatonY !=PosY)
   {
     Label1->Caption = "En Movimiento";

     Timer->Enabled = false;
     this->Tiempo   = 0;

     Timer->Enabled = true;
   }

   PosRatonX  = PosX;
   PosRatonY  = PosY;

}



void __fastcall TForm1::TimerTimer(TObject *Sender)

{
  this->Tiempo = Tiempo + 0,5;

  if(this->Tiempo>0,5)
   {
     Label1->Caption = "Quieto";
   }
}


La verdad es que funciona mas o menos pero me gustaria que el tiempo de espera ha que detecte el raton quieto ("a que muestre Label1->Caption = "Quieto"") sea menor... Tambien me da la sensacion de que aveces al mover el raton (en una aplicacion mas compleja) no realiza la operacion que debe realizar inmediatamente al "ponerse en marcha" el cursor.
Alguien puede indicarme como mejorar o cambiar el codigo para que las "sensaciones" sean mas fluidas

Nota: necesito que el movimiento del raton sea detectado con el procedimiento WMMove.

Gracias
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Prueba de esta manera en la que espera 1 segundo a decir que está quieto:
Código:

__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
  Timer->Interval = 100;
}
//---------------------------------------------------------------------------

void __fastcall TForm1::WMMove(TMessage Message)
{
   Timer->Enabled = false;
   Label1->Caption = "En Movimiento";
   Timer->Enabled = true;
}

void __fastcall TForm1::TimerTimer(TObject *Sender)
{
   LASTINPUTINFO plii;
   plii.cbSize = sizeof(LASTINPUTINFO);
   GetLastInputInfo(&plii);
   if(GetTickCount() - plii.dwTime >= 1000)
     Label1->Caption = "Quieto";
}


Saludos.
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Muchisimas gracias ,lo probare... seguro que me vale, como siempre.
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mostrar mensajes de anteriores:   
Cambiar a:  
No puedes publicar temas nuevos en este foro
No puedes responder a temas en este foro
No puedes editar tus mensajes en este foro
No puedes borrar tus mensajes en este foro
No puedes votar en las encuestas de este foro


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.