在报表中,有个字段如名称,可能是中英文符号等混合输入的,在自动换行的时候,如果遇到中文字符且刚好只有一个字符宽度的时候,就会出现乱码问题,寻求解决代码,100分奉送
解决方案 »
- TStringStream这种对像为什么有时会出乱码free后重create又正常
- dcc32的使用
- 我最爱的女孩
- ADOQuery1.ExecSQL的bt问题 急!!!
- 请教如何对一个数据库加密码,在安装SQL Server 时没有输入密码,现在应该在哪里增加?并且还须用Adoconnection静态链接.
- 怎么用TNMFTP以二进制上传文件!
- 如何退出过程
- 又有一个Delphi网站
- 如何用欧几里德算法对两个Edit控件中的数进行约分,并把结果显示在两个label控件里
- 各位:我用Delphi + Access 单机版想改写为小型的"网络"版,个中问题,请赐教!!!!
- 如何改变IDE 中各模块的名称?
- TDataSet在post的时候报“invalid variant type”exception.
你说的那些是将FASTREPORT汉化,而不能解决读取数据换行遇中文时的乱码问题,其实,应该是在procedure frReport1GetValue(const ParName: String;var ParValue: Variant);中将
parvalue转成unicode就OK了,可我不知道怎么转,郁闷 :(
参照http://tian.yeah.net的 fastreport2.41c主要改fr_class.pas中的wrapline过程,其中有一段:
else if s[last] = ' ' then
OutLine(Copy(s, beg, last - beg)) else
OutLine(Copy(s, beg, last - beg + 1));//造成乱码的根本原因
改为
else if s[last] = ' ' then
OutLine(Copy(s, beg, last - beg)) else
if ByteType(s,last) = mbLeadByte then //判断是否是汉字字节
OutLine(Copy(s, beg, last - beg ))
else
OutLine(Copy(s, beg, last - beg + 1));
后面的
LoopPos := cur;
beg := last + 1; last := beg;
要改为:
LoopPos := cur;
if ByteType(s,last) = mbLeadByte then
begin
beg := last ; last := beg;
end
else
begin
beg := last + 1; last := beg;
end;