首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

怎么让RichEdit改变已存在的一行字的颜色,而不是新增一行的颜色

2012-03-03 
如何让RichEdit改变已存在的一行字的颜色,而不是新增一行的颜色。初始化了一个RichEdit1,在程序的其他很多

如何让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才设置为红色,于是后面来的行就变成红色了,当前行没有改变。

求救。



[解决办法]
折腾够了?看来必须得我出手了!解决这个问题,其实tooooooo simple的。代码如下,不解释,注释已去掉。

C/C++ code
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;    }} 

热点排行