剪切板類 TClipboard 定義在 Clipbrd 單元, 使用前先要 uses Clipbrd;
uses Clipbrd;
procedure TForm1.Button1Click(Sender: TObject);
var
clip: TClipboard;
begin
clip := TClipboard.Create; {建立}
clip.AsText := Self.Text; {把窗體標題放入剪切板}
ShowMessage(clip.AsText); {從剪切板讀取, 返回結果是: Form1}
{因為剪切板是全局的, 此時可以在其他地方粘貼一試}
clip.Free; {釋放}
end;
根據 Delphi 給我們提供的方便, 上面的例子可以簡化為:
uses Clipbrd;
procedure TForm1.Button1Click(Sender: TObject);
begin
Clipboard.AsText := Text;
ShowMessage(Clipboard.AsText); {Form1}
end;
這個 Clipboard 是什麼? 是不是和 Screen 一樣的類型變量?
答案是否定的! Clipboard 只是個函數, 是一個無參函數, 是定義在 Clipbrd 單元的一個全局函數, 它返回一個 TClipboard 類型的變量, 當我看到這個函數的源碼時, 真是感覺又學了一招, 非常精巧的思路.
除了用 TClipboard.AsText 屬性, 我們還可以使用 SetTextBuf 把文本放入剪切板、使用 GetTextBuf 讀出剪切板中的文本.
uses Clipbrd;
{使用 SetTextBuf}
procedure TForm1.Button1Click(Sender: TObject);
begin
Clipboard.SetTextBuf(PChar(Text)); {按參數類型要求, 需要轉換一下}
ShowMessage(Clipboard.AsText); {Form1}
end;
{使用 GetTextBuf 就和使用 API 差不多, 需要給個緩沖區}
procedure TForm1.Button2Click(Sender: TObject);
var
arr: array[0..255] of Char;
begin
Clipboard.AsText := Text;
Clipboard.GetTextBuf(arr, Length(arr));
ShowMessage(arr); {Form1}
end;
{如果不給緩沖區, 那你自己得申請並釋放內存}
procedure TForm1.Button3Click(Sender: TObject);
var
pc: PChar;
begin
Clipboard.AsText := Text;
GetMem(pc, 256); {申請內存}
Clipboard.GetTextBuf(pc, 256);
ShowMessage(pc); {Form1}
FreeMem(pc); {釋放內存}
end;