Delphi中剪下板的使用[5]:SetAsHandle、GetAsHandle

來源:互聯網
上載者:User

如果要在剪下板中存放自己的格式, 需要用到 SetAsHandle、GetAsHandle 兩 個方法.

SetAsHandle(用於剪下板的格式ID, 資料的記憶體控制代碼); 看這個方法的兩個參 數都有點麻煩.

自訂剪下板格式要用 RegisterClipboardFormat 函數; 第二個參數是記憶體 控制代碼而不是記憶體位址, 能分配記憶體並返回控制代碼的函數暫時我只知道 GlobalAlloc 、GlobalReAlloc 兩個函數, 使用它們分配用於剪下板的記憶體時還須使用 GMEM_DDESHARE 標誌.

GetAsHandle(用於剪下板的格式ID) 方法返回的是資料所在記憶體的控制代碼.

通過記憶體控制代碼擷取擷取記憶體位址, 還要用到 GlobalLock 函數.

本例自訂了結構 TMyRec, 並指定了對應的剪下板格式 CF_MY.

unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics,  Controls, Forms,
 Dialogs, StdCtrls;

type
 TForm1 = class(TForm)
  Button1: TButton;
  Button2: TButton;
  procedure FormCreate(Sender: TObject);
  procedure Button1Click(Sender: TObject);
  procedure Button2Click(Sender: TObject);
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

uses Clipbrd;

Type
 TMyRec = record
  name: string[8];
  age : Byte;
 end;

var
 CF_MY: Word;

procedure TForm1.FormCreate(Sender: TObject);
begin
 CF_MY := RegisterClipboardFormat('My Format');
end;

procedure TForm1.Button1Click(Sender: TObject);
var
 PRec: ^TMyRec;
 Data: THandle;
begin
 Data := GlobalAlloc(GMEM_DDESHARE, SizeOf(TMyRec));
 PRec := GlobalLock(Data);

 PRec.name := '張三';
 PRec.age := 99;

 GlobalUnlock(Data);
 Clipboard.SetAsHandle(CF_MY, Data);
end;

procedure TForm1.Button2Click(Sender: TObject);
var
 PRec: ^TMyRec;
 Data: THandle;
begin
 if not Clipboard.HasFormat(CF_MY) then Exit;
 Data := Clipboard.GetAsHandle(CF_MY);
 PRec := GlobalLock(Data);

 ShowMessageFmt('%s %d 歲', [PRec.name, PRec.age]); {張三 99 歲 }
 GlobalUnlock(Data);
end;

end.

//這個例子忘了 GlobalFree 了.

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.