uses RichEdit;
function TextToRtf( // 将文本处理为RTF格式
mText: WideString // 输入文本
): WideString; // 返回处理后的RTF文本
var
I: Integer;
begin
Result := StringReplace(mText, ##, #, [rfReplaceAll]);
for I := Length(mText) downto do
begin
case mText[I] of
'\':
begin
Delete(Result, I, );
Insert('\\', Result, I);
end;
'{':
begin
Delete(Result, I, );
Insert('\{', Result, I);
end;
'}':
begin
Delete(Result, I, );
Insert('\}', Result, I);
end;
else
if mText[I] > # then
begin
Delete(Result, I, );
if mText[I] <= # then
Insert('\''' + LowerCase(IntToHex(Ord(mText[I]), )), 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'## +
'{\colortbl ;\red%d\green%d\blue%d;\red%d\green%d\blue%d;}'## +
'\cf1\highlight2 %s%s'## +
'}'##;
begin
Result := False;
if mText = '' then Exit;
if not Assigned(mRichEdit) then Exit;
mForegroundColor := ColorToRGB(mForegroundColor);
mBackgroundColor := ColorToRGB(mBackgroundColor);
SendMessage(mRichEdit.Handle, EM_REPLACESEL, ,
Longint(PChar(Format(cRtfFormat, [
GetRValue(mForegroundColor),
GetGValue(mForegroundColor),
GetBValue(mForegroundColor),
GetRValue(mBackgroundColor),
GetGValue(mBackgroundColor),
GetBValue(mBackgroundColor),
TextToRtf(mText),
Copy('\par', , Ord(mAppendReturn) * )
]))));
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 := ;
InsertColorRtf(Format('%s底%s字', [
ColorToString(vBackgroundColor), ColorToString(vForegroundColor)]),
RichEdit1, vForegroundColor, vBackgroundColor, True);
end;

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

RichEdit中插入带背景色文本的一种思路的更多相关文章

  1. java.sql.date与java.util.date区别以及数据库中插入带时分秒的时间

    java.sql.Date,java.sql.Time和java.sql.Timestamp三个都是java.util.Date的子类(包装类). java.sql.Date是java.util.Da ...

  2. 【google面试题】求1到n的正数中1出现的次数的两种思路及其复杂度分析

    问题描写叙述: 输入一个整数n,求从1到n这n个整数的十进制表示中1出现的次数.比如输入12,从1到12这些整数中包括1 的数字有1.10.11和12.1一共出现了5次. 这是一道广为流传的googl ...

  3. Delphi RICHEDIT中插入图象

    unit InsRich;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms ...

  4. Word中插入带公式的Visio注意事项

    有时候发现,有的公式显示的间距特别大,那么在word中右键打开Visio,改好后,保存了,word里还是那样. 因为你需要吧改好的另存为原来的visio文件(名字.位置要一样,就是说替换原来的文件), ...

  5. LaText中插入带上下限的求和符号

    效果如下: LaTex命令如下: \begin{equation} \label{8} z_{i}(k+1)=\sum_{j\in N_{i}(k)} a_{ij}(k)z_{i}(k),z_{i}( ...

  6. 在网页中插入CSS样式表的几种方法

    1. 链入外部样式表 链入外部样式表是把样式表保存为一个样式表文件,然后在页面中用<link>标记链接到这个样式表文件,这个<link>标记必须放到页面的<head> ...

  7. MathType插入带序号公式的两种方法

    方法一: 由于我之前使用表格15% 70% 15%来布局的,所以最开始相的就是如何录入公示后插入公式序号,如下图所示 先设置序号格式 录好公式后点“Insert Number”就好了,这样的话需要紧挨 ...

  8. Android应用开发中webview上传文件的几种思路

    1. 常规方法,重写WebChromeClient 的 openFileChooser 方法 private class MyWebChromeClient extends WebChromeClie ...

  9. 实现一种快速查找Richedit中可见区域内OLE对象的方法

    Richedit是一个OLE容器,使用Richedit来显示IM聊天内容时,通常使用OLE对象来实现在Richedit中播放表情动画. 触发表情的绘制有两种途径: 1.来自Richedit的刷新消息. ...

随机推荐

  1. lua字符匹配

    匹配下列格式的数据中的 source和MAC地址: Chain WiFiDog_br-lan_Outgoing (1 references) pkts bytes target prot opt in ...

  2. Cstyle的UEFI导读:第18.0篇 NVRAM的工作原理(上)

        虽有句话说的好,实用的东西记在脑子里.没有的记在笔记本上. 可是如今的信息量越来越大,并且随着时间的推移记忆力会越来越不可靠,所以仅仅好把近期工作之余看的一些东西记录下来,避免被迅速忘记.这里 ...

  3. linux可重入、异步信号安全和线程安全

    一 可重入函数 当一个被捕获的信号被一个进程处理时,进程执行的普通的指令序列会被一个信号处理器暂时地中断.它首先执行该信号处理程序中的指令.如果从信号处理程序返回(例如没有调用exit或longjmp ...

  4. Qt 学习之路 2(80):定位器

    QML 提供了很多用于定位的元素.这些元素叫做定位器,都包含在 QtQuick 模块.这些定位器主要有 Row.Column.Grid和Flow等. 为了介绍定位器,我们先添加三个简单的组件用于演示: ...

  5. JMX 与系统管理--转

    前言 在 Java 程序的运行过程中,对 JVM 和系统的监测一直是 Java 开发人员在开发过程所需要的.一直以来,Java 开发人员必须通过一些底层的 JVM API,比如 JVMPI 和 JVM ...

  6. IOS的工程目录结构和生命周期

    IOS的工程目录结构和生命周期 ·simple table文件夹:工程相关源代码和配置文件 BIDAppDelegate :    委托的声明和实现 BIDViewController:    视图控 ...

  7. Driving the Activity Lifecycle

    Before Robolectric 2.2, most tests created Activities by calling constructors directly, (new MyActiv ...

  8. root密码忘记了要怎么搞

    我是根据这几个教程做的,网址如下 http://www.pc6.com/infoview/Article_65979.html http://down.chinaz.com/server/201111 ...

  9. C#生成缩略图不清晰模糊问题的解决方案!

    之前网上找了个生成缩略图的代码,改了改直接用了.问题来了,等比例缩略图时总是发现左边.上边的边线大概有一像素的白边,领导不乐意了,那咱就改吧.图片放大了才发现,那个好像是渐变的颜色,晕,这样的功能领导 ...

  10. 传统的log4j实战

    /** * */ package log4j; import org.apache.log4j.Logger; import org.apache.log4j.PropertyConfigurator ...