我正在使用Delphi形式的OLE容器中使用Word,尽管IDE在很大程度上与此问题无关。
到目前为止,我一直无法找到解决上述问题的方法,而且我在我的应用程序中创建并维护了自己的文字处理程序,因为我无法找到拦截Word中超链接点击的方法。嵌入式MS Word将是理想的解决方案,除非Word不公开onHyperlinkClick事件。
我的嵌入式文字处理器需要接管对超链接点击的控制,因为它没有导航到特定网址,但会触发运行相当复杂的功能,我不能/不希望尝试在Word中处理
在没有MS Word事件的情况下,我猜这样做的唯一方法是通过Windows钩子。我对钩子不是很熟悉,并且对于这是否是解决问题的最佳方法表示感谢。为了它的工作,我需要钩子能够:
在MS Word中,我需要一个公开的函数,它将屏幕坐标转换为word文档中对象的位置。我已经浏览了Word VBA参考文献,并且找不到任何直接明显的功能,但我有一种感觉,我之前已经看到过对这样一个函数的引用。
对于这是否是一种可行且明智的方法的任何反馈将不胜感激。
答案 0 :(得分:0)
我找到了上面的答案。实现起来相当复杂。它涉及鼠标和键盘钩。
VBA for Word有一个RangeFromPoint函数,您可以查询该函数以找出鼠标光标下方的范围。然后,您查询范围对象以获取其超链接。
您无法在挂钩过程中查询范围,因为它会导致线程冲突。我添加了一个间隔为1毫秒的计时器,该计时器在挂钩程序中启用。如果您想自己处理链接,这会让生活变得困难。我决定查询mousedown而不是mousemove,因为后者可能会占用大量资源。因此,如果您希望以正常方式处理鼠标,则必须每次都禁用鼠标并在钩子程序之外进行模拟。
还有其他所有问题需要处理,例如z级别较高的其他窗口可能位于你的ole容器上。您需要检查光标是否属于这些窗口。
你还需要确保你没有处理在mousedown时按下特殊键(例如移位)的mousedown,否则你将禁用选择。
按Enter键处理链接的打开要容易得多。
如果Word提供了一个超链接点击事件,那将会容易得多!