在表单显示之前检测是否已按下鼠标按钮

Rob*_*obS 16 windows delphi winapi delphi-7

如果按下鼠标按钮并显示一个窗口,则释放鼠标按钮时窗口将接收MouseUp事件.

一旦显示窗口,是否可以检测是否已按下鼠标按钮?

TLa*_*ama 16

我会试试这个:

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;
Run Code Online (Sandbox Code Playgroud)

  • 谢谢,这是正确的....差不多.需要将GetKeyState的结果与$ 8000(请参阅http://stackoverflow.com/a/3422706/41338)进行比较,以检查是否设置了正确的位. (3认同)

Dav*_*nan 9

要直接回答您的问题,您可以使用GetKeyState或测试鼠标按钮状态GetAsyncKeyState.您需要的虚拟密钥代码是VK_LBUTTON.

它们之间的区别在于GetKeyState报告当前活动排队消息发布到队列时的状态.另一方面,GetAsynchKeyState在你打电话的那一刻给你一个状态GetAsynchKeyState.

来自以下文件GetKeyState:

当该线程从其消息队列中读取关键消息时,从该函数返回的密钥状态会发生变化.状态不反映与硬件相关的中断级状态.使用GetAsyncKeyState函数检索该信息.应用程序调用GetKeyState以响应键盘输入消息.此函数在生成输入消息时检索键的状态.

我怀疑你应该使用GetKeyState但我无法100%确定,因为我实际上并不知道你想用这些信息实现什么.