【问题标题】:How to detect mouse back and forward click in Delphi?如何在Delphi中检测鼠标前后点击?
【发布时间】:2014-12-19 23:20:34
【问题描述】:

我有一个 Trust GXT-25 鼠标,它有 4 个按钮:左、右、后退和下一个。

我只能左右抓。如何检测 Delphi XE3 中剩下的 2 个事件?

【问题讨论】:

标签: delphi delphi-xe3 mouseclick-event


【解决方案1】:

根据鼠标实现这些按钮的方式,您必须:

  1. 直接处理WM_XBUTTONDOWNWM_XBUTTONUP 消息,或WM_APPCOMMAND 消息。有关详细信息,请参阅 MSDN:

    About Mouse Input: XBUTTONs

    可以通过使用ApplicationEvents.OnMessage 事件处理程序来实现 Delphi:

    const
      {$EXTERNALSYM MK_XBUTTON1}
      MK_XBUTTON1 = $20;
      {$EXTERNALSYM MK_XBUTTON2}
      MK_XBUTTON2 = $40;
      {$EXTERNALSYM XBUTTON1}
      XBUTTON1 = $1;
      {$EXTERNALSYM XBUTTON2}
      XBUTTON2 = $2;
    
    procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG;
      var Handled: Boolean);
    begin
      case Msg.message of
        WM_XBUTTONDOWN:
          case LoWord(Msg.wParam) of
            MK_XBUTTON1: { Handle Back };
            MK_XBUTTON2: { Handle Forward };
          end;
        WM_XBUTTONUP:
          case HiWord(Msg.wParam) of
            XBUTTON1: { Handle Back };
            XBUTTON2: { Handle Forward };
          end;
      end;
    end;
    
  2. 使用Raw Input API注册您想要的窗口以接收WM_INPUT鼠标输入消息。

【讨论】:

  • 我在 FormMouseDown 事件中添加了一个 showmessage 函数,但如果它仅在我用左键或右键单击时显示。
  • @roll 那是因为它们不是标准的鼠标按钮。因此,Windows 不承认这些按钮。如果你有一个有 30 个按钮的鼠标怎么办?你认为 Windows 知道所有这些按钮的作用吗?这取决于制造商如何实施它们。您将需要捕获 Windows 消息,OnMouseDown 事件不会为您提供所需的信息,因为它只识别标准鼠标按钮。
  • 好的,但是怎么做呢?
  • @roll 按照 Remy 在他的回答中提供的建议和链接 :-)
  • (假设鼠标驱动程序甚至首先使用该消息
【解决方案2】:

根据鼠标驱动程序,甚至有可能按下一个特殊的鼠标按钮甚至不会产生任何鼠标事件,而是驱动程序可能会以编程方式发送键盘命令。

您正在谈论后退和下一步按钮。这些按钮是否用于浏览器中的后退和前进导航?

如果他们这样做了,那么鼠标驱动程序很可能会为此生成与键盘等效的快捷方式,即(ALT+Left 用于返回,ALT+Right 用于下一步)。

所以我建议您尝试使用 OnKeyDown 和 OnKeyUp 事件来查看是否是这种情况。

【讨论】:

  • 更不用说,许多用户输入设备都有自己的控制面板,可以改变不同按钮的作用。例如,在我的 Microsoft 键盘上,我可以让浏览器的后退/下一步按钮打开猫图片。
猜你喜欢
  • 2011-11-21
  • 2016-03-24
  • 1970-01-01
  • 2018-03-17
  • 1970-01-01
  • 2020-04-18
  • 2018-01-04
  • 2017-04-10
  • 2021-09-06
相关资源
最近更新 更多