如何使用MenuItemExecute()与AVDoc.OpenInWindowEx()

时间:2016-06-09 13:30:06

标签: delphi

是否可以使用AVDoc.OpenInWindowEx(FFilename, Panel1.handle, 0, True, 0,0, 2, 0, 0, 0);命令 {{1}} 在 Delphi 7 Acrobat XI Pro

如果你帮我举个例子,我会很高兴。

1 个答案:

答案 0 :(得分:2)

我认为答案可能是“不”,因为在调用Acrobat.MenuItemExecute('Copy')之前,必须在包含要复制的文本的窗口上调用BringToFront,否则调用MenuItemExecute('即使文档托管在Acrobat自己的一个窗口中,复制')也会失败。当文档窗口在您的应用程序中托管,而不是Acrobat时,我看不出如何成功地做到这一点。

但是,您可以添加一些内容来帮助您获得更好的答案。 [...]

更新请忽略我在此答案的早期版本中的评论,说我无法重现我无法在使用OpenInWindowEx打开的窗口中选择文本的行为。事实上,我现在可以选择正常的文字,我之前忽略的是我已将TPanel的Enabled属性设置为False

不幸的是,我仍然无法成功调用Acrobat.MenuItemExecute('Copy'),我开始认为在托管窗口中无法执行此操作。我还没有找到明确的列表,但谷歌发现的Adobe工作人员发表的各种评论清楚地表明,许多MenuItemExecute字符串在使用OpenInWindowEx时无法正常工作。

然而,这可能不是将所选文本检索回Delphi应用程序的唯一方法。

如果使用WinSpyWindow Detective等工具查看托管窗口,您会看到面板窗口中包含的是一整套Acrobat窗口,包括带有Window文本的AVL_AVView窗口我想象的“AVPageView”是显示PDF文本的实际窗口。

我认为可能的解决方案的关键是你的观察,我已经确认,在窗口中按Ctrl-C将文本复制到剪贴板。到目前为止,我还没有能够使用keybd_event调用,各种Delphi“SendKeys”例程以及向AVPageView窗口发送WM_COPY消息等技术来实现代码的等效。我确信它一定是可能的,但我还没有找到办法。