粘贴html格式文档,Delphi如何粘贴HTML格式文本到Windows剪切板

如果用CF_TEXT格式将HTML格式的文本复制到剪贴簿,那么在Word等软件中粘贴得到的将是大量的HTML标签,而不是带格式的文本。因此,你需要在剪贴簿中注册“HTML格式”,并用该格式复制HTML文本到剪贴簿中。此外,你还要注意复制到HTML格式剪贴簿的文本的格式。

以下代码帮助你准备恰当的格式:

function SetHTMLFormat(HTMLStr: string): string;

const

CrLf = #13#10;

begin

Result := ’Version:0.9’ + CrLf;

Result := Result + ’StartHTML:-1’ + CrLf;

Result := Result + ’EndHTML:-1’ + CrLf;

Result := Result + ’StartFragment:000081’ + CrLf;

Result := Result + ’EndFragment:******’ + CrLf;

Result := Result + HTMLStr + CrLf;

Result := StringReplace(Result, ’******’,

Format(’%.6d’, [Length(Result)]), []);

end;

以下代码实现在剪贴簿中同时放入无格式文本和HTML格式文本:

procedure CopyToClipBoard(const str: string; const hStr: string = ’’);

var

gMem: HGLOBAL;

pStr: PChar;

Strings: array[0..1] of string;

Formats: array[0..1] of UINT;

i: Integer;

begin

gMem := 0;

Win32Check(OpenClipBoard(0));

try

Strings[0] := SetHTMLFormat(hStr);

Strings[1] := str;

Formats[0] := RegisterClipboardFormat(’HTML Format’);

Formats[1] := CF_TEXT;

Win32Check(EmptyClipBoard);

for i := 0 to High(Strings) do

begin

if Strings[i] = ’’ then Continue;

gMem := GlobalAlloc(GMEM_DDESHARE + GMEM_MOVEABLE,

Length(Strings[i]) + 1);

try

Win32Check(gMem <> 0);

pStr := GlobalLock(gMem);

Win32Check(pStr <> nil);

CopyMemory(pStr, PChar(Strings[i]),

Length(Strings[i]) + 1);

finally

GlobalUnlock(gMem);

end;

Win32Check(gMem <> 0);

SetClipboardData(Formats[i], gMem);

Win32Check(gMem <> 0);

gMem := 0;

end;

finally

Win32Check(CloseClipBoard);

end;

end;

function SetHTMLFormat(HTMLStr: string): string;

const

CrLf = #13#10;

begin

Result := ’Version:0.9’ + CrLf;

Result := Result + ’StartHTML:-1’ + CrLf;

Result := Result + ’EndHTML:-1’ + CrLf;

Result := Result + ’StartFragment:000081’ + CrLf;

Result := Result + ’EndFragment:******’ + CrLf;

Result := Result + HTMLStr + CrLf;

Result := StringReplace(Result, ’******’,

Format(’%.6d’, [Length(Result)]), []);

end;

以下代码实现在剪贴簿中同时放入无格式文本和HTML格式文本:

procedure CopyToClipBoard(const str: string; const hStr: string = ’’);

var

gMem: HGLOBAL;

pStr: PChar;

Strings: array[0..1] of string;

Formats: array[0..1] of UINT;

i: Integer;

begin

gMem := 0;

Win32Check(OpenClipBoard(0));

try

Strings[0] := SetHTMLFormat(hStr);

Strings[1] := str;

Formats[0] := RegisterClipboardFormat(’HTML Format’);

Formats[1] := CF_TEXT;

Win32Check(EmptyClipBoard);

for i := 0 to High(Strings) do

begin

if Strings[i] = ’’ then Continue;

gMem := GlobalAlloc(GMEM_DDESHARE + GMEM_MOVEABLE,

Length(Strings[i]) + 1);

try

Win32Check(gMem <> 0);

pStr := GlobalLock(gMem);

Win32Check(pStr <> nil);

CopyMemory(pStr, PChar(Strings[i]),

Length(Strings[i]) + 1);

finally

GlobalUnlock(gMem);

end;

Win32Check(gMem <> 0);

SetClipboardData(Formats[i], gMem);

Win32Check(gMem <> 0);

gMem := 0;

end;

finally

Win32Check(CloseClipBoard);

end;

end;

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值