Delphi Clipboard[5] SetComponent、GetComponent -元件在剪貼簿中的操作
阿新 • • 發佈:2022-04-14
{該文首發於部落格園 滔Roy,無須授權即可轉發,請自覺保留頭部申明}
Delphi Clipboard[5] SetComponent、GetComponent -元件在剪貼簿中的操作
1、SetComponent //將元件複製到剪貼簿
procedure TClipboard.SetComponent(Component: TComponent); var MemStream: TMemoryStream; begin MemStream := TMemoryStream.Create; try MemStream.WriteComponent(Component); SetBuffer(CF_COMPONENT, MemStream.Memory^, MemStream.Size); finally MemStream.Free; end; end;
2、GetComponent //從剪貼簿中檢索元件
function TClipboard.GetComponent(Owner, Parent: TComponent): TComponent; var Data: THandle; DataPtr: Pointer; MemStream: TMemoryStream; Reader: TReader; begin Result := nil; Open; try Data := GetClipboardData(CF_COMPONENT); if Data = 0 then Exit; DataPtr := GlobalLock(Data); if DataPtr = nil then Exit; try MemStream := TMemoryStream.Create; try MemStream.WriteBuffer(DataPtr^, GlobalSize(Data)); MemStream.Position := 0; Reader := TReader.Create(MemStream, 256); try Reader.Parent := Parent; Result := Reader.ReadRootComponent(nil); try if Owner <> nil then Owner.InsertComponent(Result); except Result.Free; raise; end; finally Reader.Free; end; finally MemStream.Free; end; finally GlobalUnlock(Data); end; finally Close; end; end;
- 使用GetComponent檢索儲存在剪貼簿上的元件。
- 所有者成為檢索元件的所有者,父級成為其父級。Owner通常是一個表單,但兩個引數都可以是nil(Delphi)或NULL(C++)。
- 在從剪貼簿讀取類之前,必須通過呼叫RegisterClass來註冊它。如果試圖讀取未註冊的類,則會出現EClassNotFound異常。
3、示例
//複製Edit
var Cpt:TComponent; begin Clipboard.SetComponent(Edit1); { 將按鈕複製到剪貼簿 } if Clipboard.HasFormat(CF_COMPONENT) then begin Cpt:=Clipboard.GetComponent(Self, GroupBox1); TEdit(Cpt).Text:='這是滔Roy複製的Edit1'; TEdit(Cpt).Left:=20; TEdit(Cpt).Top:=20; end; end; //複製按鈕 var Cpt:TComponent; begin Clipboard.SetComponent(BitBtnTest); { 將按鈕複製到剪貼簿 } BitBtnTest.Caption := 'TaoRoyButton1'; { 重新命名仍在表單上的按鈕 } //現在從剪貼簿中檢索按鈕並將其新增到GroupBox1 //請注意,剪貼簿按鈕名為BitBtnTest,而源按鈕已重新命名為"TaoRoyButton1" if Clipboard.HasFormat(CF_COMPONENT) then begin Cpt:=Clipboard.GetComponent(Self, GroupBox1); TBitBtn(Cpt).Left:=20; TBitBtn(Cpt).Top:=50; end; end;
注意:這裡用到了 HasFormat(CF_COMPONENT) ,而CF_COMPONENT是Delphi內建的元件剪貼簿格式
建立時間:2022.04.14 更新時間: