加入剪贴板链最佳实践

时间:2012-01-10 06:39:06

标签: delphi winapi clipboard

继我自定义格式剪贴板上的post之后,我正在考虑编写自己的自定义剪辑板监视组件的可能性。

声明之前:

ClipboardWindow:=SetClipboardViewer(Form1.Handle);

我在示例代码中看到过,我研究了以下片段:

OpenClipboard(Form1.Handle); 
EmptyClipboard; 
CloseClipboard;

而其他人根本不包括清洁代码。我很困惑。

我相信Clipbrd.TClipboard.Clear就像VCL一样。

我的问题是:

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

2 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:0)

  1. 规则尽可能简单:如果要删除剪贴板内容(以便其他应用程序无法使用它),请将其删除。如果没有,请保留它。

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