是否可以将Acrobat.MenuItemExecute('Copy');
命令与AVDoc.OpenInWindowEx(FFilename, Panel1.handle, 0, True, 0,0, 2, 0, 0, 0);
在Delphi 7和Acrobat XI Pro中?
如果您能帮我举例说明,我会很高兴的。
最佳答案
我认为答案可能是“否”,因为在调用Acrobat.MenuItemExecute('Copy')之前,有必要在包含要复制文本的窗口上调用BringToFront,否则调用MenuItemExecute('Copy')即使将文档托管在Acrobat自己的窗口之一中也将失败。当您将文档窗口而不是Acrobat托管在应用程序中时,我看不到如何成功完成此操作。
但是,您可以在q中添加一些内容,可能有助于获得更好的答案。 [...]
更新请忽略此答案的早期版本中的评论,说我无法重现无法在使用OpenInWindowEx打开的窗口中选择文本的行为。实际上,我现在可以选择合适的文本了,以前忽略的是将TPanel的Enabled
属性设置为False
。
不幸的是,我仍然无法成功调用Acrobat.MenuItemExecute('Copy'),而且我开始认为无法在托管窗口中执行此操作。我还没有找到确定的列表,但是Google员工发现Adobe员工的各种评论清楚地表明,许多MenuItemExecute字符串只是在使用OpenInWindowEx时不起作用。
但是,这可能不是将所选文本检索回Delphi应用程序的唯一方法。
如果您使用WinSpy
或Window Detective
之类的工具查看托管窗口,您会看到面板窗口中包含的是Acrobat窗口的全部主机,包括一个AVL_AVView,其中包含窗口文本“ AVPageView”,我想是显示PDF文本的实际窗口。
我认为解决方案的关键是您的观察,我已经确认,在窗口中按Ctrl-C可以将文本复制到剪贴板。到目前为止,我还无法使用keybd_event调用,各种Delphi“ SendKeys”例程以及将WM_COPY消息发送到AVPageView窗口之类的技术来实现等效的代码。我敢肯定这是有可能的,但是我还没有找到办法。