加入剪贴板链最佳实践



继我关于自定义格式剪贴板的文章之后,我正在考虑编写自己的自定义剪贴板和监控组件的可能性。

声明之前:

ClipboardWindow:=SetClipboardViewer(Form1.Handle);

我在一个样本代码中看到了我研究的以下片段:

OpenClipboard(Form1.Handle); 
EmptyClipboard; 
CloseClipboard;

而另一些根本不包括清理代码。我很困惑。

我相信Clipbrd.TClipboard.Clear只是以VCL的方式做同样的事情。

我的问题是:

在加入clipboard chain之前清除剪贴板是强制性的吗?

不,不需要清除剪贴板。的确,你不应该。其他剪贴板监视器会对更新做出不必要的反应,用户可能想粘贴你刚刚销毁的东西。此外,剪贴板链监控不仅仅是将自己添加到链中。您必须将事件传递到下一个窗口(SetClipboardViewer中的结果句柄),并且在应用程序退出时,您必须将自己从链中删除。此外,您需要避免不必要地阻塞剪贴板。通常,这意味着等待注册剪贴板事件,直到您准备好实际处理事件。例如,不要把它作为启动的第一件事,如果你随后要打开一个对话框,询问用户想把数据存储在哪里,他是否有许可证密钥,等等

我有一些建议,以及常见的陷阱:http://www.clipboardextender.com/developing-clipboard-aware-programs-for-windows/6

  1. 规则尽可能简单:如果你想删除剪贴板内容(这样其他应用程序就不能使用它),请删除它。如果不想,请保留它。

  2. 你不知道你的用户是想保留数据,还是想实现一些花哨的东西?你知道那些应用程序(Paint Shop Pro就是其中之一)会问:"你在剪贴板中留下了一个大图像(10MB的数据)。你想保留它还是清除它?"你可以做一些类似的事情。:)

最新更新