在frxClass.pas中找到以下代码
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" |
|