【发布时间】:2012-02-13 01:52:12
【问题描述】:
有可能吗?如果可以,您将如何实现自己的剪贴板?
我的意思是能够像 Windows 剪贴板一样在其中复制和粘贴任何内容,但实际上不会干扰系统剪贴板。
为了更好地了解这是我尝试过的:
uses
ClipBrd;
...
procedure TMainForm.actCopyExecute(Sender: TObject);
var
MyClipboard: TClipboard;
begin
MyClipboard := TClipboard.Create;
try
MyClipboard.AsText := 'Copy this text';
finally
MyClipboard.Free;
end;
end;
它的工作原理是将字符串“复制此文本”复制到剪贴板,但它会覆盖 Windows 剪贴板上的任何内容。
以上内容必须只是创建 Windows 剪贴板的一个实例,而不是实际创建您自己的。
请注意,自定义剪贴板可以保存任何数据,而不仅仅是纯文本。它应该与 Windows 剪贴板一样工作,但不会干扰它(丢失上面的任何内容)。
如何做到这一点?
谢谢。
【问题讨论】:
-
你应该这样做
Clipboard.AsText := 'Copy this text';;无需创建TClipboard的新实例。 -
是的,我知道。我的评论跑题了。
-
创建一个列表,复制的时候把东西放进去,粘贴的时候再拿出来。
-
对我来说这个问题听起来像:
"I'd like to create a wheel, just like a wheel, but it shouldn't be a wheel"。呃,如果它是圆形的并且像轮子一样工作,那么它就是轮子。请解释为什么您认为您需要自己的私人剪贴板,因为目前您只是在尝试重新发明轮子。 -
如果您只想对自己的类型进行特殊处理,那么 RegisterClipboardFormat 是要走的路,@Ken 的答案就是要走的路。这样,您还可以(如果适用)使用系统剪贴板在您自己的应用程序实例之间复制和粘贴。