Delphi Clipboard[6] SetAsHandle、GetAsHandle 自定义格式,以指定格式处理数据

{该文首发于博客园 滔Roy,无须授权即可转发,请自觉保留头部申明}

Delphi Clipboard[6] SetAsHandle、GetAsHandle 自定义格式,以指定格式处理数据

1、SetAsHandle //将句柄以给定格式放置在剪贴板上(将指定句柄表示的数据放在剪贴板上)

1
procedure SetAsHandle(Format: Word; Value: THandle);
1
2
3
4
5
6
7
8
9
10
procedure TClipboard.SetAsHandle(Format: Word; Value: THandle);
begin
  Open;
  try
    Adding;
    SetClipboardData(Format, Value);
  finally
    Close;
  end;
end;
  • SetAsHandle使用指定格式将指定句柄(值)表示的数据写入剪贴板。
  • 注意:不要在将句柄传递给SetAsHandle后删除它。该句柄属于剪贴板,剪贴板将释放它。

2、GetAsHandle  //以指定格式处理的原始窗口从剪贴板返回数据(以指定格式返回剪贴板中数据的Windows句柄) 

1
2
3
4
5
6
7
8
9
function TClipboard.GetAsHandle(Format: Word): THandle;
begin
  Open;
  try
    Result := GetClipboardData(Format);
  finally
    Close;
  end;
end;
  • GetAsHandle使用Windows句柄从剪贴板中检索数据。
  • GetAsHandle返回的句柄不归应用程序所有,只有在剪贴板打开时才有效。如果需要更长时间,请将数据复制到另一个句柄。

3、示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
Type
  TMyTest = record
    Name: string[100];
    ID:Integer;
  end;
var
  CF_TAOROY:Word;
 
 
procedure TForm1.BitBtn1Click(Sender: TObject);
var
  Data: THandle;
  DataPtr: Pointer;
  PRec: ^TMyTest;
begin
  Data := GlobalAlloc(GMEM_MOVEABLE+GMEM_DDESHARE, SizeOf(TMyTest));
  try
    PRec := GlobalLock(Data);
    DataPtr := GlobalLock(Data);
    try
      PRec.ID:=100;
      PRec.Name:='滔Roy';
      Clipboard.SetAsHandle(CF_TAOROY, Data);
    finally
      GlobalUnlock(Data);
    end;
  except
    GlobalFree(Data);   //注意:由GlobalAlloc函数分配给剪贴板的内存,在传递数据的过程中,只有发生异常时才需要调用GlobalFree来释放内存,Win会接管对剪贴板内存的管理
    raise;
  end
end;
 
procedure TForm1.BitBtn2Click(Sender: TObject);
var
  PRec: ^TMyTest;
  Data: THandle;
begin
  if not Clipboard.HasFormat(CF_TAOROY) then Exit;
  Data := Clipboard.GetAsHandle(CF_TAOROY);
  PRec := GlobalLock(Data);
  try
    Memo1.Lines.Add(IntToStr(PRec.ID));
    Memo1.Lines.Add(PRec.name);
  finally
    GlobalUnlock(Data);
  end;
end;
 
initialization
  CF_TAOROY := RegisterClipboardFormat('TaoRoy Format');   //自定义格式

注意:由GlobalAlloc函数分配给剪贴板的内存,在传递数据的过程中,只有发生异常时才需要调用GlobalFree来释放内存,Win会接管对剪贴板内存的管理  

  

  

 

 

 

 

 

创建时间:2022.04.14  更新时间:

posted on   滔Roy  阅读(239)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
历史上的今天:
2021-04-14 Delphi 自定义组件/控件图标
2021-04-14 Delphi Classes.TComponentState - 组件当前状态

导航

点击右上角即可分享
微信分享提示