核心提示:如果用CF_TEXT格式将HTML格式的文本复制到剪贴簿,那么在Word等软件中粘贴得到的将是大量的HTML标签,而不是带格式的文本。因此,你需要在剪贴簿中注册“HTML格式”,并用该格式复制HTML...
如果用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;