码迷,mamicode.com
首页 > 其他好文 > 详细

RichEdit中插入带背景色文本的一种思路

时间:2015-08-21 19:21:40      阅读:164      评论:0      收藏:0      [点我收藏+]

标签:

uses RichEdit;
function TextToRtf( // 将文本处理为RTF格式
  mText: WideString // 输入文本
): WideString; // 返回处理后的RTF文本
var
  I: Integer;
begin
  Result := StringReplace(mText, #13#10, #10, [rfReplaceAll]);
  for I := Length(mText) downto 1 do
  begin
    case mText[I] of
      \:
        begin
          Delete(Result, I, 1);
          Insert(\\, Result, I);
        end;
      {:
        begin
          Delete(Result, I, 1);
          Insert(\{, Result, I);
        end;
      }:
        begin
          Delete(Result, I, 1);
          Insert(\}, Result, I);
        end;
    else
      if mText[I] > #127 then
      begin
        Delete(Result, I, 1);
        if mText[I] <= #255 then
          Insert(\‘‘ + LowerCase(IntToHex(Ord(mText[I]), 2)), Result, I)
        else Insert(\u + IntToStr(Ord(mText[I])) + ?, Result, I);
      end;
    end;
  end;
end;
function InsertColorRtf( // 插入带颜色的RTF文本
  mText: string; // 原文本
  mRichEdit: TRichEdit; // Rich编辑框
  mForegroundColor: TColor; // 前景颜色
  mBackgroundColor: TColor; // 背景颜色
  mAppendReturn: Boolean = False // 是否追加换行
): Boolean; // 返回插入是否成功
const
  cRtfFormat =
{\rtf1#13#10 +
{\colortbl ;\red%d\green%d\blue%d;\red%d\green%d\blue%d;}#13#10 +
\cf1\highlight2 %s%s#13#10 +
}#13#10;
begin
  Result := False;
  if mText = ‘‘ then Exit;
  if not Assigned(mRichEdit) then Exit;
  mForegroundColor := ColorToRGB(mForegroundColor);
  mBackgroundColor := ColorToRGB(mBackgroundColor);
  SendMessage(mRichEdit.Handle, EM_REPLACESEL, 0,
    Longint(PChar(Format(cRtfFormat, [
      GetRValue(mForegroundColor),
      GetGValue(mForegroundColor),
      GetBValue(mForegroundColor),
      GetRValue(mBackgroundColor),
      GetGValue(mBackgroundColor),
      GetBValue(mBackgroundColor),
      TextToRtf(mText),
      Copy(\par, 1, Ord(mAppendReturn) * 4)
    ]))));
  Result := True;
end; { InsertColorRtf }
procedure TForm1.Button1Click(Sender: TObject);
var
  vForegroundColor: TColor;
  vBackgroundColor: TColor;
begin
  vForegroundColor := Random($FFFFFF);
  vBackgroundColor := Random($FFFFFF);
  RichEdit1.SelStart := MaxInt;
  RichEdit1.SelLength := 0;
  InsertColorRtf(Format(%s底%s字, [
    ColorToString(vBackgroundColor), ColorToString(vForegroundColor)]),
    RichEdit1, vForegroundColor, vBackgroundColor, True);
end;

参考:http://www.cnblogs.com/key-ok/p/3359681.html

RichEdit中插入带背景色文本的一种思路

标签:

原文地址:http://www.cnblogs.com/findumars/p/4748615.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!