继我关于自定义格式剪贴板的文章之后,我正在考虑编写自己的自定义剪贴板和监控组件的可能性。
声明之前:
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
-
规则尽可能简单:如果你想删除剪贴板内容(这样其他应用程序就不能使用它),请删除它。如果不想,请保留它。
-
你不知道你的用户是想保留数据,还是想实现一些花哨的东西?你知道那些应用程序(Paint Shop Pro就是其中之一)会问:"你在剪贴板中留下了一个大图像(10MB的数据)。你想保留它还是清除它?"你可以做一些类似的事情。:)