【发布时间】:2013-09-12 20:42:45
【问题描述】:
我的 Delphi 7 应用程序有两个 TPageControls,它们之间有一个 TSplitter。每个 TPageControl 上有两个 TTabSheets。每个 TTabSheet 是一个 TWebBrowser。有图片吗?
这种组件排列的问题是无法跟踪鼠标的位置,因为TWebBrowser没有OnMouseMove事件,而且在这堆ClientAligned组件下也永远不会触发TForm的OnMouseMove事件。
我需要知道的是鼠标在任何时候都相对于应用程序的 XY 位置。 IOW,我需要知道鼠标何时移动,何时移动,一个函数会:
GetMouseLocationNow(var X, Y : Integer);
我该怎么做?
【问题讨论】:
-
为什么需要坐标追踪?您在这些浏览器中显示的内容是什么?我要求建议您比一些定期询问坐标更好的方法,因为例如滚动偏移,这些坐标甚至可能与显示的 Web 浏览器的内容不匹配。
-
我需要知道何时将焦点设置在鼠标下方的 TWebBrowser 上。这样,当用户使用鼠标滚轮时,TWebBrowser 内容将滚动。由于始终有两个 TWebBrowser 可见,因此我需要一些方法来知道将焦点设置在哪个 TWebBrowser 上。我只能通过跟踪鼠标位置来做到这一点。
-
如果您的目标是具有鼠标滚动控件功能,我认为您需要全局捕获鼠标滚动事件并询问光标下哪个控件而不是鼠标移动跟踪。
-
您的建议很有趣,但我想知道捕捉鼠标滚动事件是否为时已晚,看看在触发滚动事件后仍然需要关注 TWebBrowser。
-
不,你不会设置焦点。您只需将
WM_MOUSEWHEEL消息发送到光标下的控件。我已经看到此功能仅在没有窃取焦点的情况下实现。当用户只是将鼠标悬停并滚动滚轮时,他们会窃取控件的焦点,这很烦人。但是没关系。总之祝你好运! ;-)
标签: delphi