Delphi错误“RichEdit Line insertion err... delphi richedit原码

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:windowssystem32riched20.dll和c:windowssystem32riched32.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);
Delphi错误“RichEdit Line insertion err... delphi richedit原码
}
TStringStream *str=new TStringStream(tmp->Text);//使用字符串流来转移数据,这就搞定,而且速度超快!!
MemoA->LoadFromStream(str);
tmp->Free();
str->Free();

  

爱华网本文地址 » http://www.413yy.cn/a/25101012/132077.html

更多阅读

delphi基础教程 delphi编程入门

delphi基础教程——简介Delphi,是Windows平台下著名的快速应用程序开发工具(Rapid Application Development,简称RAD)。它的前身,即是DOS时代盛行一时的“BorlandTurbo Pascal”,最早的版本由美国Borland(宝兰)公司于1995年开发。主创者为

多线程的使用(Delphi) delphi多线程实例

TThread在Classes单元中声明,直接从TObject继承下来的,因为,它不是组件.TThread是个抽象类,所以不能创建TThread的实例,而只能创建其派生类的实例.利用TThread类来编写多线程应用程序的一般步骤如下:[步骤一]从TThread类派生出一个

Delphi中ExtractFileName和ExtractFilePath file.getfilename

ExtractFileDrive:返回完整文件名中的驱动器,如"C:"  ExtractFilePath:返回完整文件名中的路径,最后带“/”,如"C:est"  ExtractFileDir:返回完整文件名中的路径,最后不带“/”,如"C:est"  ExtractFileName:返回完整文件名中的

Delphi 线程安全的三种方法(转) delphi多线程实例

2010-01-21 12:21多核时代的到来,对于我们程序员来说要尽快的,尽可能多的使用多线程编程只有这样,作的程序才会有高效率,这个思想一定要宣传啊,不然多核时代了,还写单线程的程序就太不够档次了。delphi中多线程同步的一些方法当有多个线程

delphi socket发送和接受tcp信息包 tcp socket

最近有个项目用到delphi 以前学过 但是网络通讯这块不懂 以前是直接接受字符串现在改用传递信息包 希望大侠帮忙写下接受和发送特定信息包的代码下面为信息包的格式和内容数据包格式如下图所示,所包含的内容从左到右进行传输:包头中的

声明:《Delphi错误“RichEdit Line insertion err... delphi richedit原码》为网友爱你丶依旧如初分享!如侵犯到您的合法权益请联系我们删除