delphi - 如何捕获表单外的鼠标点击(如 Delphi 中的 Code Insight)

标签 delphi

我喜欢 Delphi Code Insight 窗口(表单上的自定义列表框基本上没有边框)的想法,您可以在其中单击表单外部,它会自动关闭它。

我的第一个想法是分别在FormCreate和FormDestroy中调用SetCapture/ReleaseCapture。我在 FormMouseMove 上将表单的标题设置为 X/Y,但它不会更新表单外部的坐标。

如果我从 MouseDown 和 MouseUp 中调用 SetCapture/ReleaseCapture,它会按预期更新坐标,从而证明这个概念确实有效。

我也尝试过其他事情,例如在 OnShow 事件中发布 WM_USER,并从那里调用 SetCapture,但它仍然不会更新坐标。然后我尝试了 TApplicationEvents 组件 (OnMessage),但这也不起作用。

我已经阅读了几篇文章,但无法找到我想要的内容。有些文章在 MouseMove 中调用了 SetCapture,但是当鼠标光标从窗体外部开始时,这不起作用。嗯...

下一步是使用 WindowsHook,但这就是我停止的地方。我知道如何实现一个,但似乎我在这里遗漏了一些非常明显的东西。必须有一种更简单的方法来做到这一点。

有什么想法吗? :)

干杯, 亚诺

最佳答案

通过将 TApplicationEvents 添加到表单并使用事件 OnDeactivate 可以更轻松地完成您想要的操作。 。每当应用程序失去焦点时就会触发该事件。

关于delphi - 如何捕获表单外的鼠标点击(如 Delphi 中的 Code Insight),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4524943/

相关文章:

Delphi:DBGrid选项未保存?

java - 在 Java 中将毫秒转换为 TDateTime

image - 如何在Delphi中使TImage透明?

delphi - 为什么不可见组件不会触发 OnUpdate

delphi - 解码错误

delphi - Tdws单位性能

multithreading - TTimer.OnTimer是否会使工作线程与主线程同步?

delphi - 使用 onmousedown、onmouseup 和 click 事件时无法捕获所有点击

delphi - 如何通知 Free Pascal 编译器为编译的应用程序设置区域设置 ID

delphi - 将 ODBC 数据源与 Delphi 2006+ 连接的正确方法?