Delphi Clipboard[6] SetAsHandle、GetAsHandle 自定義格式,以指定格式處理資料
阿新 • • 發佈:2022-04-14
{該文首發於部落格園 滔Roy,無須授權即可轉發,請自覺保留頭部申明}
Delphi Clipboard[6] SetAsHandle、GetAsHandle 自定義格式,以指定格式處理資料
1、SetAsHandle //將控制代碼以給定格式放置在剪貼簿上(將指定控制代碼表示的資料放在剪貼簿上)
procedure SetAsHandle(Format: Word; Value: THandle);
procedure TClipboard.SetAsHandle(Format: Word; Value: THandle); begin Open; try Adding; SetClipboardData(Format, Value); finally Close; end; end;
- SetAsHandle使用指定格式將指定控制代碼(值)表示的資料寫入剪貼簿。
- 注意:不要在將控制代碼傳遞給SetAsHandle後刪除它。該控制代碼屬於剪貼簿,剪貼簿將釋放它。
2、GetAsHandle //以指定格式處理的原始視窗從剪貼簿返回資料(以指定格式返回剪貼簿中資料的Windows控制代碼)
function TClipboard.GetAsHandle(Format: Word): THandle; begin Open; try Result := GetClipboardData(Format); finally Close; end; end;
- GetAsHandle使用Windows控制代碼從剪貼簿中檢索資料。
- GetAsHandle返回的控制代碼不歸應用程式所有,只有在剪貼簿開啟時才有效。如果需要更長時間,請將資料複製到另一個控制代碼。
3、示例
Type TMyTest = record Name: string[100]; ID:Integer; end; var CF_TAOROY:Word; procedure TForm1.BitBtn1Click(Sender: TObject); var Data: THandle; DataPtr: Pointer; PRec: ^TMyTest; begin Data := GlobalAlloc(GMEM_MOVEABLE+GMEM_DDESHARE, SizeOf(TMyTest)); try PRec := GlobalLock(Data); DataPtr := GlobalLock(Data); try PRec.ID:=100; PRec.Name:='滔Roy'; Clipboard.SetAsHandle(CF_TAOROY, Data); finally GlobalUnlock(Data); end; except GlobalFree(Data); //注意:由GlobalAlloc函式分配給剪貼簿的記憶體,在傳遞資料的過程中,只有發生異常時才需要呼叫GlobalFree來釋放記憶體,Win會接管對剪貼簿記憶體的管理 raise; end end; procedure TForm1.BitBtn2Click(Sender: TObject); var PRec: ^TMyTest; Data: THandle; begin if not Clipboard.HasFormat(CF_TAOROY) then Exit; Data := Clipboard.GetAsHandle(CF_TAOROY); PRec := GlobalLock(Data); try Memo1.Lines.Add(IntToStr(PRec.ID)); Memo1.Lines.Add(PRec.name); finally GlobalUnlock(Data); end; end; initialization CF_TAOROY := RegisterClipboardFormat('TaoRoy Format'); //自定義格式
注意:由GlobalAlloc函式分配給剪貼簿的記憶體,在傳遞資料的過程中,只有發生異常時才需要呼叫GlobalFree來釋放記憶體,Win會接管對剪貼簿記憶體的管理
建立時間:2022.04.14 更新時間: