节奏大师脚本触动精灵:Delphi错误“RichEdit Line insertion err...

来源:百度文库 编辑:九乡新闻网 时间:2024/04/29 06:10:48
Delphi错误:RichEdit Line insertion error!
原因:当给Rich类控件(RichEdit,RichText...)赋字符串时,字符串中含有“·”字符。

发现过程:
以前做的一个程序,今天用户反应出错。测试了一下,只是特定情况下出现报错如下:RichEdit Line insertion error!

调试发现,是在给控件qlbJobName赋值时出错的:

    form2.qlbJobName.Lines.Clear;
    form2.qlbJobName.Lines.Add(pJobName+',');

这个qlbJobName用的控件是 TQRRichText;

在网上查了一下,最后确定是因为要赋的值中含有“·”,将其替换掉,问题解决:

    pJobName:=stringReplace(pJobName,'·','.',[rfReplaceAll]) ;    // V1001 Add
    form2.qlbJobName.Lines.Clear;
    form2.qlbJobName.Lines.Add(pJobName+',');

原来这就是一直存在richedit中对宽字符支持的问题, 在Rxrichedit中也一直有这样一个问题,现在看来QRRichText也有同样的问题!
说白就举个例子:如字符串“8A工”,它在delphi的richedit中是四个字符,因为它调用的动态链接库是richedit32.dll,但在2000下的riched32.dll是只支持宽字符的,所以这个字符串长度在2000下其实是3个字符,所以当以要访问第四个字符时就出错,因为它只有三个字符,解决方法,是用第三方控件richedit98;它支持宽字节,不过不要用rxrichedit虽然它调用的是richedit20.dll但它对宽字符支持不好 

这个问题是c:\windows\system32\riched20.dll和c:\windows\system32\riched32.dll版本的问题,下载这两个DLL覆盖即可.riched20.dll版本是3.0,文件版本是5.30.23.1228,
riched32.dll文件版本是5.1.2600.0
我的是XP,查了一下,只有Riched20.dll.

另外,还找到一篇文章: 解决RichEdit line insertion error的方法

在RICHEDIT 中使用StringReplace这个字符串替换函数时, 很容易就出现"RichEdit line insertion error".

  解决的方法:

      TStrings *tmp=new TStringList;//中间变量,用于暂时保存字符串列表的内容
      String Spilth=MemoB->Strings[i];
      if(Trim(Spilth)!="")
      {
         tmp->Text=StringReplace(MemoA->Text,Spilth,"",TReplaceFlags()   <<   rfReplaceAll);
      }
    TStringStream *str=new TStringStream(tmp->Text);//使用字符串流来转移数据,这就搞定,而且速度超快!!
    MemoA->LoadFromStream(str);
    tmp->Free();
    str->Free();