首页 / 软件开发 / Delphi / Delphi中剪切板的使用[5]:SetAsHandle、GetAsHandle - 自定义格式
Delphi中剪切板的使用[5]:SetAsHandle、GetAsHandle - 自定义格式2012-12-14 博客园 万一如果要在剪切板中存放自己的格式, 需要用到 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 了.
收藏该网址