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

时间:2012-02-23 12:36:07

标签: windows delphi winapi delphi-7

如果按下鼠标按钮并显示一个窗口,当释放鼠标按钮时窗口将收到MouseUp事件。

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

2 个答案:

答案 0 :(得分: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;

答案 1 :(得分:9)

要直接回答您的问题,您可以使用GetKeyStateGetAsyncKeyState测试鼠标按钮状态。您需要的虚拟密钥代码为VK_LBUTTON

这些之间的区别在于GetKeyState报告当前活动排队消息发布到队列时的状态。另一方面,GetAsynchKeyState会在您拨打GetAsynchKeyState的瞬间为您提供状态。

来自GetKeyState的文档:

  

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

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