delphi 读取剪粘板内的html格式数据

来源:互联网 发布:网络直播 用英文怎么说 编辑:程序博客网 时间:2024/06/01 10:29

根据剪贴板的原理,在获取剪贴板内容之前,必须指定要获取内容的格式。由于剪贴板中的数据可能存在多种格式,所以有必要对剪贴板的格式类型先做一些了解。W写下了以下的测试代码:
procedure TForm1.Button3Click(Sender: TObject);
var
  i: integer;
  Buffer: PChar;
  s: string;
begin
  Memo1.Lines.Clear;  //增加了一个Memo控件来跟踪数据
  with TClipboard.Create do  //利用TClipboard追踪剪贴板
  begin
    GetMem(Buffer, 20);
    for i:=0 to FormatCount - 1 do
    begin
      GetClipboardFormatName(Formats[i], Buffer, 20);
      s := StrPas(Buffer);
      Memo1.Lines.Add(Format('%s:%d', [s, Formats[i]]));
    end;
    FreeMem(Buffer);
    Free;
  end;
end;

 

点击Button3,在Memo1文本框中显示出以下的内容:
DataObject:49161
Object Descriptor:49166
Rich Text Format:49312
HTML Format:49394
HTML Format:14
HTML Format:3
PNG:49672
GIF:49536
JFIF:49538
……
很明显,第4行的“HTML Format:49394”应该就是HTML编辑器真正需要的格式。由于“HTML Format”并不是剪贴板默认支持的格式,所以W需要使用API函数RegisterClipboardFormat先进行注册。
procedure TForm1.Button4Click(Sender: TObject);
var
  s: string;
  hMem: DWORD;
  CF_HTML: DWORD; // 声明一个CF_HTML剪贴板格式
  txtPtr: PChar;
begin
  CF_HTML := RegisterClipboardFormat('HTML Format');  //注册HTML Format格式
  with TClipboard.Create do
  begin
    hMem := GetAsHandle(CF_HTML);
    txtPtr := GlobalLock(hMem);
    s := StrPas(txtPtr);
    GlobalUnlock(hMem);
    Memo1.Lines.Add(UF8Decode(s));
    Free;
  end;
end;

单击Button4就可以在memo1中看到真定html格式文本。