当前位置: 首页 > 工具软件 > Strings edit > 使用案例 >

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

丘畅
2023-12-01
               

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; } }



           
 类似资料: