fastreport 4.5开始修正了frxmemoview对 totalpages#的unicode的支持bug(官方称)
在4.3版本中frxmemoview写上第[Pages#]页 共[TotalPages#]页,打印的时候,能正确显示结果
比如: 第1页 共2页同样的工程,在4.5编译后运行结果就是
第1页 共[T2页
多了2个[T字符,怎么回事啊?
frxmemoview的字符集为default_charset的。设置为其它的字符集同样存在这个问题
在4.3版本中frxmemoview写上第[Pages#]页 共[TotalPages#]页,打印的时候,能正确显示结果
比如: 第1页 共2页同样的工程,在4.5编译后运行结果就是
第1页 共[T2页
多了2个[T字符,怎么回事啊?
frxmemoview的字符集为default_charset的。设置为其它的字符集同样存在这个问题
解决方案 »
- delphi 如何实现采集一个网页
- 为什么此命令在win xp环境下出错?
- 在DBGrid中如何实现发票金额栏位的
- delphi2010 没有TIdText???
- 有做过外挂的兄弟吗?麻烦进来讲讲功能与原理!
- 請問怎樣用ado連上同一工作組里其它電腦上的sql server
- 请教如何安装下载的控件问题。谢谢。
- 请教各位前辈,如何控制鼠标只能在dbgrid中的一个单元格中移动,如果控制在其他控件上,则为clipcursor(控件名称.boundsrect),但dbgrid的某一个单元格如何来引用呢?
- 怎么样实现仿真按键ALT+TAB(ALT按下不放)
- 帮我解释下这是表达什么意思,最好一句句解释
- 代码转换的问题
- 用delphi的ole方法导出/导入数据到excel执行速度比java的excel导出导入方法慢N倍!!!有什么好办法吗?
procedure TfrxCustomMemoView.ExtractMacros;
var
s, s1: WideString;
i, j: Integer;
begin
if FAllowExpressions then
begin
s := FMemo.Text;
i := Pos('[TOTALPAGES#]', UpperCase(s));
if i <> 0 then
begin
Delete(s, i, 13);
Insert(IntToStr(FTotalPages), s, i);
FMemo.Text := s;
end;将 s, s1: WideString;改为 s, s1: String;修改后代码为
procedure TfrxCustomMemoView.ExtractMacros;
var
s, s1: String;
i, j: Integer;
begin
if FAllowExpressions then
begin
s := FMemo.Text;
i := Pos('[TOTALPAGES#]', UpperCase(s));
if i <> 0 then
begin
Delete(s, i, 13);
Insert(IntToStr(FTotalPages), s, i);
FMemo.Text := s;
end;原因是Delete过程的长度计算和Pos函数的计算不一致。
Pos函数中,中文字符计算为2个字符。
Delete过程,中文字符计算为1个字符。比如“第1页 共[TOTALPAGES#]页”
执行i := Pos('[TOTALPAGES#]', UpperCase(s));i的值为9
执行Delete(s, i, 13); 删除从第9个字符开始的13个字符,即保留前面8个字符"第1页 共[TO",删除后面的13个字符
如果总页数为2页,执行Insert(IntToStr(FTotalPages), s, i);显示结果为"第1页 共[T2"