Ver Mensaje Individual
  #11  
Antiguo 04-09-2011
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.210
Reputación: 22
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
El anterior código no termina de funcionar como esperaba. Propongo otra solución, esta vez para usar en el evento OnMouseDown.

El funcionamiento es el que sigue: Al pulsar el botón del ratón provocamos una espera igual al tiempo de doble click del sistema. si durante la espera se vuelve a pulsar el ratón, se trata de un doble click y salimos. En caso contrario es un click.

Tiene un pequeño efecto de espera en la ejecución cuando se trata de un click, pues tras la primera pulsación no se puede saber si habrá una segunda que determine un doble click o no.

Código de la Macro:
Código:
#define RETURN_IF_DBLCLICK()                     \
   static lock = false;                          \
   if(lock){lock = false; return;}               \
   lock = true;                                  \
   clock_t start = clock();                      \
   while (clock()-start < GetDoubleClickTime()){ \
      Application->ProcessMessages();            \
      if(!lock) return;                          \
   }                                             \
   lock = false;
Ejemplo:
Código:
void __fastcall TTexClick::Label1MouseDown(TObject *Sender,
      TMouseButton Button, TShiftState Shift, int X, int Y)
{
   //Salimos si encontramos doble click
   RETURN_IF_DBLCLICK();

   // Ahora el código del evento click, siempre detrás...
   Label2->Caption = "UN SOLO CLICK";
   Beep(1000, 50);
}

Saludos.
Responder Con Cita