程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Delphi >> Delphi中剪切板的使用[3]: SetComponent、GetComponent

Delphi中剪切板的使用[3]: SetComponent、GetComponent

編輯:Delphi

本例演示把一個組件(TEdit)放入剪切板, 又取出(放到一個 TPanel 上)的過程.

放入剪切板的方法是個過程: SetComponent(要放入的組件);

取出的方法是個函數: GetComponent(指定屬主, 指定父窗口): 函數返回取出的組件的句柄.

取出以前, 最好要判斷一下當前剪切板中是不是個組件: HasFormat(CF_COMPONENT);

取出以前還必須要注冊要取出的組件類, 譬如: RegisterClasses([TEdit]);

准備工作: 在窗體上添加 TEdit、TPanel 和三個按鈕.

本例效果圖:

unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls;
 
type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Edit1: TEdit;
    Panel1: TPanel;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.dfm}
 
uses Clipbrd;
 
var obj: TComponent; {用於接受 GetComponent 的返回值}
 
procedure TForm1.Button1Click(Sender: TObject);
begin
  Clipboard.SetComponent(Edit1);
  TButton(Sender).Caption := '復制';
end;
 
procedure TForm1.Button2Click(Sender: TObject);
begin
  RegisterClasses([TEdit]);
  if Clipboard.HasFormat(CF_COMPONENT) then
    obj := Clipboard.GetComponent(nil, Panel1);
  TButton(Sender).Caption := '粘貼';
end;
 
procedure TForm1.Button3Click(Sender: TObject);
begin
  if Assigned(obj) then obj.Free;
  TButton(Sender).Caption := '刪除';
end;
 
end.

一般情況下, 應該把 RegisterClasses(); 過程提前放置(起碼可以避免反復執行), 譬如在 Form1.OnCreate 事件中;

大家好像都習慣再提前到: initialization. 程序修改如下:

unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls;
 
type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Edit1: TEdit;
    Panel1: TPanel;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.dfm}
 
uses Clipbrd;
 
var obj: TComponent;
 
procedure TForm1.Button1Click(Sender: TObject);
begin
  Clipboard.SetComponent(Edit1);
  TButton(Sender).Caption := '復制';
end;
 
procedure TForm1.Button2Click(Sender: TObject);
begin
  if Clipboard.HasFormat(CF_COMPONENT) then
    obj := Clipboard.GetComponent(nil, Panel1);
  TButton(Sender).Caption := '粘貼';
end;
 
procedure TForm1.Button3Click(Sender: TObject);
begin
  if Assigned(obj) then obj.Free;
  TButton(Sender).Caption := '刪除';
end;
 
initialization
  RegisterClasses([TEdit]);
 
end.

另外, 關於剪切板中格式的問題還沒有詳談, 這裡有來了一個 CF_COMPONENT.

Windows 系統已經定義了十幾種剪切板的格式常數, 譬如: CF_BITMAP、CF_TEXT 等等;

不過這裡的 CF_COMPONENT 是 Delphi 自定義的, 可以猜測: 在需要的時候, 我們也可以自定義剪切板中的格式.

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved