在Delphi中,剪切板类TClipboard定义在Clipbrd单元中。使用剪切板功能前,需要在代码中包含Clipbrd单元。
uses Clipbrd;
下面是一个简单的示例,演示如何将窗体标题复制到剪切板,并从剪切板中读取内容:
procedure TForm1.Button1Click(Sender: TObject); var clip: TClipboard; begin clip := TClipboard.Create; {创建剪切板对象} clip.AsText := Self.Caption; {将窗体标题放入剪切板} ShowMessage(clip.AsText); {从剪切板读取内容,显示结果为窗体标题} clip.Free; {释放剪切板对象} end;
上述示例可以通过简化代码来实现相同的功能:
procedure TForm1.Button1Click(Sender: TObject); begin Clipboard.AsText := Self.Caption; ShowMessage(Clipboard.AsText); {显示窗体标题} end;
这里的Clipboard是什么?它是不是和Screen一样的类型变量?答案是否定的!Clipboard实际上是一个无参函数,定义在Clipbrd单元中,返回一个TClipboard类型的对象。这种设计非常巧妙,使得我们可以直接使用Clipboard对象而无需显式创建和释放。
除了使用TClipboard的AsText属性,我们还可以使用SetTextBuf方法将文本放入剪切板,以及使用GetTextBuf方法从剪切板中读取文本。
{使用 SetTextBuf} procedure TForm1.Button1Click(Sender: TObject); begin Clipboard.SetTextBuf(PChar(Self.Caption)); {按参数类型要求,需要转换为PChar} ShowMessage(Clipboard.AsText); {显示窗体标题} end;
{使用 GetTextBuf,需要提供一个缓冲区} procedure TForm1.Button2Click(Sender: TObject); var arr: array[0..255] of Char; begin Clipboard.AsText := Self.Caption; Clipboard.GetTextBuf(arr, Length(arr)); ShowMessage(arr); {显示窗体标题} end;
{如果不提供缓冲区,需要自己申请并释放内存} procedure TForm1.Button3Click(Sender: TObject); var pc: PChar; begin Clipboard.AsText := Self.Caption; GetMem(pc, 256); {申请内存} Clipboard.GetTextBuf(pc, 256); ShowMessage(pc); {显示窗体标题} FreeMem(pc); {释放内存} end;