2012-02-23 32 views
16

Si se presiona un botón del mouse y se muestra una ventana, esa ventana recibirá el evento MouseUp cuando se suelte el botón del mouse.Detectar si el botón del mouse ya está presionado antes de que el formulario muestre

¿Es posible detectar, una vez que se muestra la ventana, si el botón del mouse ya está presionado o no?

+0

es posible que desee ver GetAsyncKeyState (VK_LBUTTON) – ComputerSaysNo

+5

Tenga en cuenta que 'GetAsyncKeyState' devuelve el estado físico del botón del mouse, mientras que' GetKeyState' devuelve lógico (con respecto a lo que ha establecido en la opción 'Cambiar botones primarios y secundarios' en el mouse ajustes). – TLama

Respuesta

16

me gustaría probar esto:

procedure TForm1.FormShow(Sender: TObject); 
begin 
    if GetKeyState(VK_LBUTTON) and $8000 <> 0 then 
    ShowMessage('Left mouse button is pressed...') 
    else 
    ShowMessage('Left mouse button is not pressed...') 
end; 
+3

Gracias, esto es correcto ... casi. El resultado de GetKeyState necesita ser comparado con $ 8000 (ver http://stackoverflow.com/a/3422706/41338) para verificar si se han configurado los bits correctos. – RobS

+0

Tienes toda la razón. ¡Gracias! Actualizaré la publicación. Lo siento por ser engañoso. – TLama

+2

+1 para explicar CÓMO – EMBarbosa

9

Para responder a su pregunta directamente, se puede probar para el estado de botón del ratón con GetKeyState o GetAsyncKeyState. El código de clave virtual que necesita es VK_LBUTTON.

La diferencia entre estos es que GetKeyState informa el estado en el momento en que el mensaje en cola activo actualmente se publicó en su cola. Por otro lado, GetAsynchKeyState le proporciona el estado en el instante en que llama al GetAsynchKeyState.

De la documentación de GetKeyState:

El estado de la clave de regresar de esta función cambiará de un hilo lee los mensajes clave de su cola de mensajes. El estado no refleja el estado de nivel de interrupción asociado con el hardware. Use la función GetAsyncKeyState para recuperar esa información. Una aplicación llama a GetKeyState en respuesta a un mensaje de entrada de teclado. Esta función recupera el estado de la clave cuando se generó el mensaje de entrada.

Sospecho que usted debe utilizar GetKeyState pero no se puede estar 100% seguro porque no sé realmente lo que está tratando de lograr con esta información.

+0

Gracias por la útil explicación de la diferencia entre las dos funciones. Tiene razón en que GetKeyState es lo que necesito. La información adicional aburrida sobre por qué necesito esto es que estoy creando un formulario cuyo resultado se basa en el último botón del mouse lanzado. Originalmente estaba contando los botones del mouse mientras estaban presionados y los contaba como liberados, pero a veces uno de los botones del mouse se podía presionar antes de que se mostrara el formulario. Sin embargo, este comando significa que ahora puedo verificar en cada evento de mouse si todavía se presiona alguno de los otros botones del mouse. – RobS

+2

+1 para explicar POR QUÉ – EMBarbosa

Cuestiones relacionadas