Richedit选中的中文变色问题

Swosna 2005-06-26 11:07:59
我想用Richedit做一个打字程序,英文比较变色是没问题,但是中文的话,真么弄都不行
代码如下:

void __fastcall TForm1::EdInputChange(TObject *Sender)
{
AnsiString Ansi_Read = "";
AnsiString Ansi_Write = "";

//iTotallen 是一个全局变量,用来记录此事件发生之前的RichEdit的总字节大小
Ansi_Read = LaText->Caption.SubString(iTotalLen + 1,EdInput->Text.Length() - iTotalLen);
Ansi_Write = EdInput->Text.SubString(iTotalLen + 1,EdInput->Text.Length() - iTotalLen);
EdInput->SelAttributes->Color = clBlack;

//ShowMessage(Ansi_Read);
//ShowMessage(Ansi_Write);
if (Ansi_Read != Ansi_Write)
{
//如果没有这个ShowMessage的话错的中文字不会变色,英文可以
ShowMessage( Ansi_Read );
// ShowMessage( Ansi_Write );
EdInput->SelStart = iTotalLen ;
EdInput->SelLength = EdInput->Text.Length() - iTotalLen ;
EdInput->SelAttributes->Color = clRed;
EdInput->SelStart = EdInput->Text.Length();
EdInput->SelLength = 0;

}
else
{
EdInput->SelStart = iTotalLen ;
EdInput->SelLength = EdInput->Text.Length() - iTotalLen ;
EdInput->SelAttributes->Color = clBlack;
EdInput->SelStart = EdInput->Text.Length();
EdInput->SelLength = 0;
Form1->Canvas->TextOutA(100,200, Ansi_Write);

}


iTotalLen = EdInput->Text.Length();
}
...全文
228 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
Hamlit 2005-06-30
  • 打赏
  • 举报
回复
RichEdit控件的属性是这样的,存储ASCII码字符的时候,占一个字节宽度;如果是wchar_t类型的则需要两个字节。注意:第一个字变色的时候,无法是ASCII码字符,还是宽字符型,RichEdit1->SelLength=1。只能等于一!
Hamlit 2005-06-30
  • 打赏
  • 举报
回复
我有现成的代码!
Hamlit 2005-06-30
  • 打赏
  • 举报
回复
老朋友,你到305工作室问吧!
Swosna 2005-06-28
  • 打赏
  • 举报
回复
楼上的仁兄,你的方法行不通阿,减一不行,我减二也不行啊
F117p 2005-06-28
  • 打赏
  • 举报
回复
中文没有颜色问题,可能是在中文的第2个字节起,也就是SelStar选中的第2个字节,这样,每法进行着色。请分析你的SelStar是否选取恰当?注意SelStar=0选取的是第1个字符。
Swosna 2005-06-28
  • 打赏
  • 举报
回复
如果你是用timer来计时的话,把它Enabel属性设为false就可以了
qjackq 2005-06-28
  • 打赏
  • 举报
回复
你懂得怎么样做测试没?把时间停下来啊???懂的请留言,不懂也要留言
qjackq 2005-06-28
  • 打赏
  • 举报
回复
你那个字节长度直接用2就行了吧???实在不行找下 skame ming 哦,老大
qjackq 2005-06-28
  • 打赏
  • 举报
回复
你一次读两个字节,相当于一个字,那样就可以改变颜色了啊???如果行找skame ming
Swosna 2005-06-27
  • 打赏
  • 举报
回复
我取出来的不是最后一个字节而已,能取出整个字,对比已经正确了的,就是有ShowMessage()的时候就可以正常显示错误的字。没有的话是不可以的
Maconel 2005-06-27
  • 打赏
  • 举报
回复
你每次都取最后一个字节,但是中文是占2个字节的,这样取当然会有问题。
建议用WideString.
F117p 2005-06-27
  • 打赏
  • 举报
回复
改:
EdInput->SelStart = iTotalLen-1 ;
Swosna 2005-06-26
  • 打赏
  • 举报
回复
顶一下先,谁来帮帮我啊

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧