【转】FastReport4.5 TotalPages#变量的Bug

问题:

fastreport 4.5开始修正了frxmemoview对 totalpages#的unicode的支持bug(官方称)
在4.3版本中frxmemoview写上第[Pages#]页 共[TotalPages#]页,打印的时候,能正确显示结果
比如: 第1页 共2页

同样的工程,在4.5编译后运行结果就是
第1页 共[T2页   
多了2个[T字符,怎么回事啊?
 
frxmemoview的字符集为default_charset的。设置为其它的字符集同样存在这个问题

解决:

在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"

时间: 2024-10-10 17:41:18

【转】FastReport4.5 TotalPages#变量的Bug的相关文章

HTML代码中在两个匿名函数中使用同名变量出现bug而引起的变量作用域的思考

在学习HTML的时候,为了方便地对同一个css样式的不同值的效果进行对比,我做成了下面这个样子. 代码也是很典型的用于展示的格式(p元素的内容随便写的): 1 <head> 2 <style> 3 p{ 4 border: medium solid black; 5 padding: 5px; 6 margin: 5px; 7 text-justify:inter-word; 8 } 9 button{ 10 margin: 5px; 11 } 12 </style>

FastReport经验

1.FastReport中如果访问报表中的对象?可以使用FindObject方法.TfrxMemoView(frxReport1.FindObject(’memo1′)).Text:=’FastReport’; 2.FastReport中如何使用上下标?设置frxmemoview.AllowHTMLTags := True;在Text输入如下上标:mm<sup>2</sup>下表:k<sub>6</sub>举一反三,你还可以使用其他HTML标记. 3.Fas

【转】FastReport问题整理

转自:http://blog.csdn.net/bdmh/article/details/4219395 1.FastReport中如果访问报表中的对象?可以使用FindObject方法.TfrxMemoView(frxReport1.FindObject(’memo1′)).Text:=’FastReport’; 2.FastReport中如何使用上下标?设置frxmemoview.AllowHTMLTags := True;在Text输入如下上标:mm<sup>2</sup>下

FastReport 使用技巧篇

FastReport 使用技巧篇 使用技巧篇 1.FastReport中如果访问报表中的对象? 可以使用FindObject方法. TfrxMemoView(frxReport1.FindObject('memo1')).Text:='FastReport'; 2.FastReport中如何使用上下标? 设置frxmemoview.AllowHTMLTags:= True;在Text输入如下 上标:mm<sup>2</sup> 下表:k<sub>6</sub>

2.2、js基础---预解析和严格模式

一.语言特性 1.预解析:js会把变量的声明(仅仅是声明)提到顶部,但是不会突破作用域. alert(a);var a= 12; //结果,undefined 2.页面无论多长都会进行预解析. 3.js语言执行步骤: 读取一个script标签=>预解析=>执行里面代码=>读取下一个script=>预解析=>执行代码 4.函数也有预解析,但是要注意:当以变量的形式声明的函数,预解析会按照变量的特性走,否则不按照. a();//报错了. var a=function(){ ale

【转】FastReport经验

转自:http://www.cnblogs.com/colincode/archive/2011/03/30/1999604.html 1.FastReport中如果访问报表中的对象?可以使用FindObject方法.TfrxMemoView(frxReport1.FindObject(’memo1′)).Text:=’FastReport’; 2.FastReport中如何使用上下标?设置frxmemoview.AllowHTMLTags := True;在Text输入如下上标:mm<sup>

如何做一个iOS分形App

如何做一个iOS分形App 原文链接 : 如何做一个iOS分形App 原文作者 : Silviu Pop 译文出自 : 开发技术前线 www.devtf.cn 译者 : alier1226 校对者: MrLoong 状态 : 完成 介绍 在这个教程中,我们会做一个可以渲染Mandelbrot Set的应用程序,我们可以缩放和平铺它来看分形那令人惊叹的复杂之美.最终的结果如下: 着色程序的代码 void main() { #define iterations 128 vec2 position =

FastReport报表设计

目录 5.1 前言 5.2 基本概念及操作 5.3 报表设计与范例 5.4 常用功能及函数 5.5 报表设计常用技巧 5.1 前言 汽车业务管理系统(VBMS)使用FastReport3.0报表系统设计报表.    本文主要描述使用FastReport设计报表的基本概念.使用方法.设计技巧和范例,不是FastReport的用户手册因此并不针对每个细节进行阐述.立足于建立设计报表的概念和实用技巧范例的讲解,面对的是具有一定计算机操作水平的用户.在VBMS中使用FastReport设计报表应该掌握以

FastReport报表设计(仔细看)

FastReport报表设计 2011-06-16 16:56:19|  分类: 系统开发|举报|字号 订阅 下载LOFTER我的照片书  | 目录 5.1 前言 5.2 基本概念及操作 5.3 报表设计与范例 5.4 常用功能及函数 5.5 报表设计常用技巧 5.1 前言 汽车业务管理系统(VBMS)使用FastReport3.0报表系统设计报表.    本文主要描述使用FastReport设计报表的基本概念.使用方法.设计技巧和范例,不是FastReport的用户手册因此并不针对每个细节进行