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.