2016-06-09 31 views

回答

2

我认为对此的回答可能是“否”,因为在调用Acrobat.MenuItemExecute('Copy')之前,必须在包含要复制的文本的窗口上调用BringToFront,否则调用MenuItemExecute( '复制')将失败,即使文档托管在Acrobat自己的窗口中。当文档窗口托管在您的应用中而不是Acrobat中时,我看不出如何成功完成此操作。

但是,有几件事情可以添加到您的q,这可能有助于获得更好的答案。 [...]

更新请忽略我的意见在这个答案的话,我无法重现,我不能使用OpenInWindowEx开在窗口中选择文本行为的早期版本。事实上,我现在可以选择正确的文本,我以前忽略的是我已经将我的TPanel的Enabled属性设置为False

不幸的是,我仍然无法成功地调用Acrobat.MenuItemExecute('Copy'),我开始认为在托管窗口中没有办法做到这一点。我还没有找到一个明确的列表,但谷歌工作人员发现的各种意见谷歌发现明确指出,许多MenuItemExecute字符串只是在使用OpenInWindowEx时不起作用。

但是,这可能不是唯一的方法来检索选择的文本回到Delphi应用程序。

如果你看一下托管窗口使用像WinSpyWindow Detective一个工具,你会看到,包含面板窗口中是一个整体主机的Acrobat窗口,包括AVL_AVView一个与窗口文本“AVPageView”这是我想象的显示PDF文本的实际窗口。

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

+0

MartynA先生,谢谢你的回答,但我对q不了解。 –

+0

查看我的答案更新。 – MartynA

+0

我只使用qAVDoc.OpenInWindowEx(FFilename,Panel1.handle,0,True,0,0,2,0,0,0);而不是AVDoc.Open(FFileName,FFileName);它显示了pdf文件。我可以通过键盘上的CTRL + C选择文本(或一个单词),然后我可以成功地从文本框中选择文本。但我无法使用下面的命令来管理选择和复制文本。 qAcrobat.MenuItemExecute( '复制') –