Delphi发布复制到Windows剪贴板

时间:2015-11-19 10:35:08

标签: windows delphi delphi-xe2 clipboard

我们目前有几个客户报告说我们的Delphi XE2 Win32应用程序中的复制到剪贴板功能不起作用,然后粘贴到Excel后会导致旧的剪贴板内容被粘贴。

我们只是使用Clipboard.AsText复制类似CSV的文本,并添加了一些调试以确保我们在构建CSV字符串的例程中不会发生静默崩溃。周围没有异常处理,所以任何异常都应该只显示给用户(没有报告)。

之前有没有人遇到这样的事情,如果有的话,最好的解决方案是什么?我注意到在C#-land中,根据How to handle blocked Clipboard and other oddities,默认行为是以100ms的延迟重试10x。除非将这种行为写入WinAPI,否则Delphi包装器似乎不会这样做吗?

我认为这是用户机器问题,而不是我们应用中的问题,尽管他们显然没有在其他软件中遇到这种情况。在内部,我们有一个用户,第一个Ctrl-C失败,但第二个成功(相当可靠),但测试超过5台其他机器没有显示任何内容。

由于对丢失代码的评论(我原本没有放任何东西,因为那里没有真正的东西) - 伪代码实现

Data := BuildCSVString();
Clipboard.AsText := Data;
StatusBar.Caption := 'Data copied to clipboard';

因此失败的范围不大。

用户看到StatusBar GUI更新,因此Clipboard例程正在运行。报告是剪贴板保持不变,而不是它被清除,因此BuildCSVString例程也不会失败并返回'',

这里没有太大的空间来构建可重现的代码(否则我现在可能已经修复了它),我只是想知道是否有其他人遇到过这个以及最好的方法来解决它。

1 个答案:

答案 0 :(得分:0)

在Excel显示失败后立即将用户粘贴到记事本中以排除Excel。这将告诉您复制数据是否存在问题,或者Excel是否在粘贴数据时遇到问题。或者,如果存在混合剪贴板问题,其中数据以多种格式出现在剪贴板上,来自不同来源(可能发生)。