• 【Windows】如何判断当前鼠标是否按下左键或右键


    在delphi中,很多窗体和控件的鼠标事件里面已经将鼠标按键状态封装好传给响应事件的函数,所以这种情况直接使用就可以,但在某些时候,我们没有这些事件可以处理时,想判断鼠标按键是否按下的状态,就需要借助API或者消息了,使用API和消息可分别应对2种不同情形:

    1)使用API: GetAsyncKeyState,适合实时检测,下面代码演示判断鼠标是否按下左键

    function IsMouseLButtonDown():Boolean;
    begin
       Result := (Windows.GetAsyncKeyState(VK_LBUTTON) and $FF00) > 0;
    end;

    注:GetAsyncKeyState也可以用于检测键盘各种按键的状态,如可以检测CTRL按键、F1按键等是否按下,具体查MSDN;

    有时候判断鼠标的时机比较特殊,需要在用户按下鼠标后才去检测,这时候API是没法检测的,因为API是获取当前时刻的状态,用户按下后,鼠标按键已经被放开,这时候使用API去检测,只能检测到没有鼠标按键按下,这种情况下我们需要使用下面消息的方式。

    2)使用消息,同样也是delphi代码,不过其他语言都是相通的,毕竟都是使用Windows的资源

     在Application的OnMessage事件中处理(如果重载Form的WndProc窗口过程,将无法检测到控件或菜单等的消息)

    .....

    ...

    Application.OnMessage := MessageEvent;

    .......

    ....

    procedure TForm1.MessageEvent(var Msg: TMsg; var Handled: Boolean);
    begin
     if Msg.message = WM_LBUTTONDOWN then
     begin
       //鼠标左键被按下,其他按键使用其他消息,如 WM_RBUTTONDOWN、WM_MBUTTONDOWN等
     end;
    end;

  • 相关阅读:
    android 上传文件到百度云
    android 学习参考
    利用SSH在本机和远程服务器之间传输文件或文件夹
    指定GPU运行python程序
    ubuntu18.04调整终端字体大小
    ubuntu18.04安装搜狗输入法
    pip install .whl文件时is not a supported wheel on this platform.解决方法
    jmeter实现mysql的增删改查
    jmeter实现天气webservice请求
    常见算法 python实现
  • 原文地址:https://www.cnblogs.com/caibirdy1985/p/4232940.html
Copyright © 2020-2023  润新知