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

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

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

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

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

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

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

3、示例

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 2022-04-14 17:29  滔Roy  阅读(229)  评论(0编辑  收藏  举报

导航