• 【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;

  • 相关阅读:
    Ionic移动应用框架
    JavaScript为iphone添加到主屏幕
    移动前端:在手机上隐藏地址工具栏
    Swipe.js支持网页点击和数字导航
    String类的概述和常用方法
    今天的学习
    集合的区别
    面向对象总结
    面向对象的封装
    方法的多态中的重写
  • 原文地址:https://www.cnblogs.com/caibirdy1985/p/4232940.html
Copyright © 2020-2023  润新知