Allen 2009-08-14 11:36:29 14976 2 0 0 0


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:windowssystem32 iched20.dll和c:windowssystem32 iched32.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();

但不是delphi语言的。
 


Tag: Delphi技巧 TTTBLOG
我也要发一个   ·   返回首页   ·   返回[Delphi]   ·   前一个   ·   下一个
评论
Allen#1Allen 2009-08-14 12:52:38(N) 链接地址
| 178 | zwwooooo | 2009-08-14 12:52:38 | [email protected] | http://zww.me |
-----
话说10年前学过Delphi,实际工作中没有‘发扬光大’——都是不相关的工作,现在基本回到原点……指记得他的语句是很标准,格式明朗[REVERT=taoether 于 2009-8-14 13:51:27 回复]呵呵,还真有知音`~~~[/REVERT]
Allen#2Allen 2009-08-14 17:17:22(N) 链接地址
| 179 | goldapple | 2009-08-14 17:17:22 | [email protected] | http://www.goldapple.name |
-----
你还玩DELPHI,我完全接触不到,也没机会用到[REVERT=taoether 于 2009-8-14 22:40:57 回复]是啊,我们还在用呢~~ 主要用于数据库编程。。。[/REVERT]
顶部     1/1 
欢迎评论
未登录,
请先 [ 注册 ] or [ 登录 ]
(一分钟即可完成注册!)
返回首页     ·   返回[Delphi]   ·   返回顶部