我喜欢 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/