delphi – 上下文菜单与Word自动化消失
当我在OleContainer(inplace)中编辑Word文档时,我切换到另一个Word文档,然后我切换回来,我不能再使用我的rightmouse按钮了。上下文菜单不会显示。
这发生在Word 2000,而不是Word 2007(我不知道其他版本)。 如何摆脱这种行为? 如何复制: >创建一个新的VCL应用程序 编辑: Windows Server 2003企业版 Microsoft Word 2000(9.0.6926 SP-3) 我使用Delphi 7(构建8.1)来创建应用程序。 解决方法
当通过ActiveX托管Office应用程序时,您会发现某些Office应用程序的某些版本对于通知窗口激活更改可笑,这可能会特别影响其上下文菜单。
基本上,如果您在失去或获得焦点时不告诉他们,并且每当您的顶级窗口获得或失去焦点时(即使他们的窗口中的孩子控制没有获得关注),那么他们可以去干线。 这是我打了很长时间的东西,特别令人沮丧的是,当你不得不告诉应用程序他们比你更了解的位置(比如当他们失去或直接获得焦点时),或者当他们创建一个弹出菜单,使焦点远离他们,并且必须以不同的方式处理一些其他应用程序/窗口的焦点,你将被遗弃…呃。 无论如何,Office应用程序应该公开一个IOleInPlaceActiveObject接口,您应该确保调用其OnFrameWindowActivate方法来告诉它关于激活/停用。 从记忆中,快速浏览我自己的托管办公室的代码,这是最重要的事情之一。忽略也是一件容易的事情,想想“呃,这不是什么关系……为什么会关心窗口是否活跃?”你可能会认为这只会导致一些小的化妆品问题(如果没有出现活动的话),但是可能导致整个事情被锁定或崩溃。相信我,办公室关心这样的事情太多了!我得到的印象是,在办公室的封面下,从合作多任务处理的时代起,仍然有一个非常老的单线程设计,当两个窗口似乎同时处于活动状态时,可能会感到困惑。 对不起,我不能给出更多的建议,而不仅仅是指向这个方向…编写ActiveX主机是一个黑色的艺术(所有的文档是面向被托管,不是主机()和唯一的方式,我得到我自己的代码工作经历了几个月的尝试和错误,并进行了大量的调试,这是一场噩梦,不幸的是。 最后一条建议:不要害怕为特定应用程序硬编码。这是IE本身所做的,使用注册表设置来控制哪些klud应用于什么(我怀疑有些硬编码到代码中)。 ActiveX是一个很不明确的混乱,各种控件都有自己的怪癖和错误,并且不可能编写一个干净,通用的主机与所有这些。 (修改一个修改将会破坏另一个)。您还将发现仅在IE尝试接口时才能正常工作,只因为它们只能通过IE进行测试;做点事情略有不同,它们分崩离析。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |