【问题标题】:Any way to detect if a form has been clicked? [closed]有什么方法可以检测表单是否被点击? [关闭]
【发布时间】:2013-11-25 04:49:10
【问题描述】:

德尔福 XE

有什么方法可以检测表单是否收到了鼠标点击?表单中的 OnClick 事件仅在表单的空白部分触发。任何有控件的部分都不会响应。

【问题讨论】:

  • 对不起,我没有。你能看一下标题和第一段,那没有改变,没有一个字母。我在添加背景时犯了错误,结果与所提出的具体问题无关。请恢复我的编辑以使问题更清楚,以免其他人在您给出答案时(针对不同的问题)不会像您一样不经意地感到困惑。你回答了一个关于 OnActivate 的问题,我问了一个关于 OnClick 的问题。
  • 请再次阅读我的问题。我把你和背景混淆了,那是我的错。只关注标题和第一段。就是那个问题。您可能错过了,但第一句话中有一个问号。
  • 没问题。祝你好运。
  • 这个问题有答案吗?会对答案感兴趣。你有很高的声誉,所以你必须非常了解你的材料。
  • 对不起。首先,您指责我无法阅读您写的文字,然后您寻求我的帮助,然后您指责我对您的问题投了反对票,并认为我这样做是因为我为回答您在第一次特别提出的问题而感到尴尬地方?对。首先,这里的投票是匿名的,除非有人明确表示他们投反对票,否则你不应该指责他们这样做。其次,您完全有可能因为您的问题不清楚(它与您提出的问题不同)而被否决了。第三,侮辱你寻求免费帮助的人是个坏主意。

标签: delphi delphi-xe mouseclick-event onmouseclick


【解决方案1】:

您需要过滤排队的消息以在全局级别检测鼠标事件。

  1. TApplication.OnMessage 添加处理程序。
  2. 随便听WM_MOUSEDOWNWM_MOUSEUP,如果目标窗口句柄是窗体的句柄,还是子控件的句柄,则响应。
  3. 确保将消息的 Handled 参数保留为 False,以便将消息传递到其目标。

如果您真的想检测表单激活,请使用OnActivate

【讨论】:

  • 我确实尝试过 OnActivate 但出于某种原因它只触发一次。我应该补充一点,表单驻留在一个 DLL 中,这可能会使事情复杂化。感谢您的建议,但我会试一试。
  • OnActivate 就是答案。我们应该修复你的代码,这样才能正常工作。
  • 对于那些可能好奇的人,我设法让 OnActivate 运行我移动代码以使用包的工作。如果在这里不宜提及,请原谅我的无知。
  • 没关系。我们不知道以前出了什么问题,因为我们不知道您的应用程序的组织结构。包肯定会让跨模块代码更干净。
猜你喜欢
  • 2022-06-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-21
  • 2013-01-18
  • 1970-01-01
相关资源
最近更新 更多