rich edit 改变某行或某个字符的颜色

1

先用CRichEditCtrl::SetSel选择要设置颜色的字符,

再用CRichEditCtrl::SetSelectionCharFormat设置选中字符的颜色。
PS:用CRichEditCtrl前,要把AfxInitRichEdit放到InitInstance里进行初始化。不然会出错。

CRichEditCtrl m_cRichEdit;
int lineStart,lineEnd;
CHARFORMAT cFmt;
cFmt.cbSize = sizeof(CHARFORMAT);
cFmt.crTextColor = RGB(0,0,255);
cFmt.dwEffects   = 0;
cFmt.dwMask      = CFM_COLOR;

lineStart = m_cRichEdit.LineIndex(0);//取第一行的第一个字符的索引
lineEnd   = m_CRichEdit.LineIndex(1)-1;//取第一行的最后一个字符的索引——用第二行的第一个索引减1来实现
m_cRichEdit.SetSel(lineStart,lineEnd);//选取第一行字符

m_cRichEdit.SetSelectionCharFormat(cFmt);//设置颜色



2


如何让RichEdit改变已存在的一行字的颜色,而不是新增一行的颜色。
初始化了一个RichEdit1,在程序的其他很多地方都调用Add("")方法为RichEdit1增加一行字符串。

现在想这样做:在RichEdit1的Change函数里判断,当新添加的行中有“正常”二字,把这行的颜色改为绿色。有“异常”二字,改行为红色。

Change函数中的部分代码如下:
AnsiString tmp = RichEdit1->Lines->Text; \\取一行的内容,不知道是不是最后一行内容
if(tmp.Pos("异常")!=0)
  RichEdit1->SelAttribute->Color=clRed;
if(tmp.Pos("正常")!=0)
  RichEdit1->SelAttribute->Color=clGeeen;

这样,是在来了带有“异常”字样的一行字后,RichEdit1才设置为红色,于是后面来的行就变成红色了,当前行没有改变。

求救。

答案:::

void __fastcall TForm1::RichEdit1Change(TObject *Sender) { Application->ProcessMessages(); TRichEdit *re = dynamic_cast <TRichEdit *> (Sender); int r = SendMessage(re->Handle, EM_LINEFROMCHAR, re->SelStart, 0); String strLine = re->Lines->Strings[r]; if (strLine.Pos("正常") > 0 || strLine.Pos("异常") > 0) { int n = re->SelStart; re->SelStart = re->Perform(EM_LINEINDEX, r, 0); re->SelLength = strLine.Length(); re->SelAttributes->Color = strLine.Pos("正常") > 0 clGreen: clRed; re->SelStart = n; re->SelLength = 0; re->SelAttributes->Color = clBlack; } }



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值