打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Delphi错误“RichEdit Line insertion err...
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();

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
彻底解决RichTextBox中表格不能折行的问题
Windows32位汇编语言教程第9章9.4 使用Richedit控件(1) - 灵魂网络
Delphi字符串、PChar与字符数组之间的转换
delphi7 字符串操作
MFC中使用RICHEDIT控件常见问题
盗号木马Riched32.dll的识别与处理
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服