1
先用CRichEditCtrl::SetSel选择要设置颜色的字符,
再用CRichEditCtrl::SetSelectionCharFormat设置选中字符的颜色。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; } }