您现在的位置:首页 >> 基础算法 >> window基础 >> 内容

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

时间:2011/9/3 15:33:49 点击:

  核心提示:如果用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;

作者:网络 来源:转载
共有评论 0相关评论
发表我的评论
  • 大名:
  • 内容:
  • 盒子文章(www.2ccc.com) © 2022 版权所有 All Rights Reserved.
  • 沪ICP备05001939号