剪切板是哪个区域的 使用剪切板[3]:SetComponent、GetComponent
使用剪切板[3]:SetComponent、GetComponent
本例演示把一个组件(TEdit)放入剪切板 又取出(放到一个 TPanel 上)的过程
放入剪切板的方法是个过程: SetComponent(要放入的组件);
取出的方法是个函数: GetComponent(指定属主 指定父窗口): 函数返回取出的组件的句柄
取出以前 最好要判断一下当前剪切板中是不是个组件: HasFormat(CF_PONENT);
取出以前还必须要注册要取出的组件类 譬如: RegisterClasses([TEdit]);
准备工作: 在窗体上添加 TEdit TPanel 和三个按钮
本例效果图:
=224>
unit Unit ;
interface
uses Windows Messages SysUtils Variants Classes Graphics Controls Forms Dialogs StdCtrls ExtCtrls;
type TForm = class(TForm) Button : TButton; Button : TButton; Button : TButton; Edit : TEdit; Panel : TPanel; procedure Button Click(Sender: TObject); procedure Button Click(Sender: TObject); procedure Button Click(Sender: TObject); end;
var Form : TForm ;
implementation
{$R * dfm}
uses Clipbrd;
var obj: TComponent; {用于接受 GetComponent 的返回值}
procedure TForm Button Click(Sender: TObject);begin Clipboard SetComponent(Edit ); TButton(Sender) Caption := 复制 ;end;
procedure TForm Button Click(Sender: TObject);begin RegisterClasses([TEdit]); if Clipboard HasFormat(CF_PONENT) then obj := Clipboard GetComponent(nil Panel ); TButton(Sender) Caption := 粘贴 ;end;
procedure TForm Button Click(Sender: TObject);begin if Assigned(obj) then obj Free; TButton(Sender) Caption := 删除 ;end;
一般情况下 应该把 RegisterClasses() 过程提前放置(起码可以避免反复执行) 譬如在 Form OnCreate 事件中
大家好像都习惯再提前到 initialization 程序修改如下 unit Unit ;
interface
uses Windows Messages SysUtils Variants Classes Graphics Controls Forms Dialogs StdCtrls ExtCtrls;
type TForm = class(TForm) Button : TButton; Button : TButton; Button : TButton; Edit : TEdit; Panel : TPanel; procedure Button Click(Sender: TObject); procedure Button Click(Sender: TObject); procedure Button Click(Sender: TObject); end;
var Form : TForm ;
![剪切板是哪个区域的 使用剪切板[3]:SetComponent、GetComponent](http://img.zhputi.com/uploads/0106/0106b610e0cc5c9c2be2949703df28c817556.jpg)
implementation
{$R * dfm}
uses Clipbrd;
var obj: TComponent;
procedure TForm Button Click(Sender: TObject);begin Clipboard SetComponent(Edit ); TButton(Sender) Caption := 复制 ;end;
procedure TForm Button Click(Sender: TObject);begin if Clipboard HasFormat(CF_PONENT) then obj := Clipboard GetComponent(nil Panel ); TButton(Sender) Caption := 粘贴 ;end;
procedure TForm Button Click(Sender: TObject);begin if Assigned(obj) then obj Free; TButton(Sender) Caption := 删除 ;end;
initialization RegisterClasses([TEdit]);
end 另外 关于剪切板中格式的问题还没有详谈 这里有来了一个 CF_PONENT
Windows 系统已经定义了十几种剪切板的格式常数 譬如 CF_BITMAP CF_TEXT 等等
lishixinzhi/Article/program/Delphi/201311/8415