1. 程式人生 > 其它 >Delphi Clipboard[6] SetAsHandle、GetAsHandle 自定義格式,以指定格式處理資料

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  更新時間: