TClipboard 封裝 Windows 剪貼板,提供統一介面存取文字、圖片、自訂格式資料。屬於 TPersistent 衍生類別,全域單一實例由 VCL 管理,勿自行建構/銷毀。
| 屬性 | 型別 | 說明 |
|---|---|---|
| AsText | AnsiString | 剪貼板文字內容。讀取時若非文字格式拋出異常,建議先用 HasFormat(CF_TEXT) 檢查。 |
| FormatCount | int | 目前剪貼板包含的格式數量(唯讀)。 |
| Formats | Word __property Formats[int Index] | 索引存取所有已註冊格式 ID。 |
| 方法 | 說明 |
|---|---|
Assign(TPersistent* Source) | 從剪貼板取得物件或複製物件到剪貼板(支援圖片、元件等)。 |
Clear() | 清空剪貼板內容。 |
Open() / Close() | 手動開啟/關閉剪貼板(通常由內部方法自動處理)。 |
GetAsHandle(Word Format) | 取得指定格式的 Windows 控制碼資料。 |
GetComponent(TPersistent* Owner, TPersistent* Parent) | 從剪貼板貼上元件(需 Owner/Parent 參數)。 |
GetTextBuf(char* Buffer, int BufSize) | 取得文字到緩衝區(避免 AnsiString 配置開銷)。 |
HasFormat(Word Format) | 檢查剪貼板是否包含指定格式(如 CF_TEXT, CF_BITMAP)。 |
SetAsHandle(Word Format, HANDLE Handle) | 以 Windows 控制碼形式放入指定格式資料。 |
SetComponent(TPersistent* Component) | 複製元件到剪貼板。 |
SetTextBuf(const char* Buffer) | 寫入文字緩衝區到剪貼板。 |
#include <Clipbrd.hpp>
void CopyText() {
Clipboard()->AsText = Edit1->Text;
}
void PasteText() {
if (Clipboard()->HasFormat(CF_TEXT))
Edit1->Text = Clipboard()->AsText;
}
void CopyImage() {
Clipboard()->Assign(Image1->Picture); // TPicture 支援 Assign
}
void PasteImage() {
if (Clipboard()->HasFormat(CF_BITMAP))
Image1->Picture->Assign(Clipboard());
}
Word MyFormat = RegisterClipboardFormat("MyAppDataFormat");
void SetCustomData(void* data, int size) {
HGLOBAL hMem = GlobalAlloc(GMEM_MOVEABLE | GMEM_DDESHARE, size);
void* p = GlobalLock(hMem);
memcpy(p, data, size);
GlobalUnlock(hMem);
Clipboard()->SetAsHandle(MyFormat, hMem);
}
#include <Clipbrd.hpp> 並 uses Clipbrd(Delphi)或包含標頭(C++)。Clipboard() 函式回傳單一實例指標,線程安全由 VCL 內部處理。Open()/Close() 減少系統開銷。SetAsHandle 傳入的控制碼所有權移交給系統,勿自行釋放。TClipboard 讓剪貼板操作變得簡單安全,是 VCL 應用程式資料交換的基石。