⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fastreport 4.7.x fixed.txt

📁 Fastreport for delphi2009 修改过程
💻 TXT
📖 第 1 页 / 共 2 页
字号:
Fastreport 4.7.x 修改及相关问题解答小结

2008-10-15

http://bbs.2ccc.com/topic.asp?topicid=305495
http://xinsync.xju.edu.cn/index.php/archives/2842

1.Unicode 代码集语言的界面字符处理错误:

从 FastReport 4.5.X 开始为实现多国语言处理,改用 UTF8格式 XML 文件保存界面字符资源,
Delphi2009 因能支持 Unicode 在内部编译和识别处理 UTF8 格式文件上的变化,造成了一些
涉及字符串及流处理与以前版本的不同.
首先,一个常数字符串在编译流化成 .dcu 文件时,会根据文件的格式和程序中对该常数字符串
的引用产生不同的编译结果.
如:文件格式是 UTF8,串的引用申明是 AnsiString
流化成: 原串=UTF8格式,引用=AnsiString + 语言代码页 格式
具体各位可以自行实验观察在不同的文件格式和引用申明下,编译产生的 .dcu 文件的内容.

但资源编译程序frcc.exe 有问题:
A:编译后的文件是每行定长的,这造成多字节内码的语言资源文件被拆乱编码
B:编译后的上述资源文件是按 UTF8 格式,但没有 UTF8 BOM 标识头
    这在 Delphi2009 的版本中会造成错误的识别文件类型,编译后的文件 .dcu中没有按指定
    的 UTF8 格式流化,所以在装载进来的资源串出现了乱码和空白串.
    
解决办法:
A:修改资源文件:frxrcClass.pas,frxrcDesgn.pas,frxrcExports.pas,frxrcInsp.pas
B:在 Delphi2009 中指定该文件的格式为 UTF8 并保存,使之产生 UTF8 BOM 标识.
  附件是修改后的frxrcClass.pas,frxrcDesgn.pas,frxrcExports.pas,frxrcInsp.pas文件
(这是允许用户修改及发布的,其它的只能提供修改方法,不能发布源代码了,我不想收到律师函) 

C:修改代码 frxRes.pas
procedure TfrxResources.AddXML(const Str: AnsiString);
var
  Stream: TStringStream;
begin
//PZG UTF8 BOM 格式保存并编译,为兼容,先进行格式转换
//  Stream := TStringStream.Create(str);
//  LoadFromStream(Stream);
//  Stream.Free;
  Stream := TStringStream.Create(UTF8Encode(String(str)));
  try
    LoadFromStream(Stream);
  finally
    Stream.Free;
  end;
end;


2.双击报表控件报异常:
A:当系统中没有安装物理打印机,会引发运行时报异常不能进入报表设计,设计时双击报表控件报异常
  这也是 vista 下不能正常进入报表设计,挂死IDE的原因
B:报表设置对话中的打印机型号识别错误,当系统中安装的打印机多于3种时识别为乱码。

解决方法:
A:暂时解决办法:添加一台打印机,随便选择一个型号的即可.
B:修改代码 frxPrinter.pas:
procedure TfrxPrinters.FillPrinters;
var
  i, j: Integer;
  Buf, prnInfo: PAnsiChar;//todo -oPZG: PChar;当系统中安装的打印机多于3种时识别为乱码
   
  //Jones : 在 4.7.22 中 PChar 改为 Byte ,不需要这一步了,经测试,没有打印机时会提示,
  //而不是失去响应。

  以上严重的错误修改后,经测试在delphi2007,2009,Windows xp,2003,vista,均能正常使用了. 
  还有要注意:修改编译生成新的 .BPL 包文件,要拷贝到 Windows\system32\ 下,在Delphi 的包文件
搜索路径中不能有不同的同名包,否则会引发各种莫明的问题.

http://bbs.2ccc.com/attachments/2008/zjttpzg_2008101514835.rar 大小:19.3K


下面是一些非致命的错误及修改:  

3.报表页面设置:
  当系统中没有安装打印机,内建一个"虚拟打印机"时,纸张选择列表中为空白:

解决方法:
修改代码:frxPrint.pas:
const
  PAPERCOUNT = 66;
  PaperInfo: array[0..PAPERCOUNT - 1] of TPaperInfo = (  
    (Typ:1;  Name: 'Letter, 8 1/2 x 11';          X:2159; Y:2794),
    (Typ:2;  Name: 'Letter small, 8 1/2 x 11';      X:2159; Y:2794),
    (Typ:3;  Name: 'Tabloid, 11 x 17';          X:2794; Y:4318),
    (Typ:4;  Name: 'Ledger, 17 x 11';          X:4318; Y:2794),
    (Typ:5;  Name: 'Legal, 8 1/2 x 14';          X:2159; Y:3556),
    (Typ:6;  Name: 'Statement, 5 1/2 x 8 1/2';      X:1397; Y:2159),
    (Typ:7;  Name: 'Executive, 7 1/4 x 10 1/2';     X:1842; Y:2667),
    (Typ:8;  Name: 'A3 297 x 420 mm';          X:2970; Y:4200),
    (Typ:9;  Name: 'A4 210 x 297 mm';          X:2100; Y:2970),
    (Typ:10; Name: 'A4 small sheet, 210 x 297 mm';  X:2100; Y:2970),
    (Typ:11; Name: 'A5 148 x 210 mm';          X:1480; Y:2100),
    (Typ:12; Name: 'B4 250 x 354 mm';          X:2500; Y:3540),
    (Typ:13; Name: 'B5 182 x 257 mm';          X:1820; Y:2570),
    (Typ:14; Name: 'Folio, 8 1/2 x 13';          X:2159; Y:3302),
    (Typ:15; Name: 'Quarto Sheet, 215 x 275 mm';    X:2150; Y:2750),
    (Typ:16; Name: '10 x 14';          X:2540; Y:3556),
    (Typ:17; Name: '11 x 17';          X:2794; Y:4318),
    (Typ:18; Name: 'Note, 8 1/2 x 11';          X:2159; Y:2794),
    (Typ:19; Name: '9 Envelope, 3 7/8 x 8 7/8';     X:984;  Y:2254),
    (Typ:20; Name: '#10 Envelope, 4 1/8  x 9 1/2';  X:1048; Y:2413),
    (Typ:21; Name: '#11 Envelope, 4 1/2 x 10 3/8';  X:1143; Y:2635),
    (Typ:22; Name: '#12 Envelope, 4 3/4 x 11';      X:1207; Y:2794),
    (Typ:23; Name: '#14 Envelope, 5 x 11 1/2';      X:1270; Y:2921),
    (Typ:24; Name: 'C Sheet, 17 x 22';          X:4318; Y:5588),
    (Typ:25; Name: 'D Sheet, 22 x 34';          X:5588; Y:8636),
    (Typ:26; Name: 'E Sheet, 34 x 44';          X:8636; Y:11176),
    (Typ:27; Name: 'DL Envelope, 110 x 220 mm';     X:1100; Y:2200),
    (Typ:28; Name: 'C5 Envelope, 162 x 229 mm';     X:1620; Y:2290),
    (Typ:29; Name: 'C3 Envelope,  324 x 458 mm';    X:3240; Y:4580),
    (Typ:30; Name: 'C4 Envelope,  229 x 324 mm';    X:2290; Y:3240),
    (Typ:31; Name: 'C6 Envelope,  114 x 162 mm';    X:1140; Y:1620),
    (Typ:32; Name: 'C65 Envelope, 114 x 229 mm';    X:1140; Y:2290),
    (Typ:33; Name: 'B4 Envelope,  250 x 353 mm';    X:2500; Y:3530),
    (Typ:34; Name: 'B5 Envelope,  176 x 250 mm';    X:1760; Y:2500),
    (Typ:35; Name: 'B6 Envelope,  176 x 125 mm';    X:1760; Y:1250),
    (Typ:36; Name: 'Italy Envelope, 110 x 230 mm';  X:1100; Y:2300),
    (Typ:37; Name: 'Monarch Envelope, 3 7/8 x 7 1/2'; X:984;  Y:1905),
    (Typ:38; Name: '6 3/4 Envelope, 3 5/8 x 6 1/2'; X:920;  Y:1651),
    (Typ:39; Name: 'US Std Fanfold, 14 7/8 x 11';   X:3778; Y:2794),
    (Typ:40; Name: 'German Std Fanfold, 8 1/2 x 12'; X:2159; Y:3048),
    (Typ:41; Name: 'German Legal Fanfold, 8 1/2 x 13'; X:2159; Y:3302),
    (Typ:42; Name: 'B4 (ISO) 250 x 353 mm';         X:2500; Y:3530),
    (Typ:43; Name: 'Japanese Postcard 100 x 148 mm'; X:1000; Y:1480),
    (Typ:44; Name: '9 x 11';          X:2286; Y:2794),
    (Typ:45; Name: '10 x 11';          X:2540; Y:2794),
    (Typ:46; Name: '15 x 11';          X:3810; Y:2794),
    (Typ:47; Name: 'Envelope Invite 220 x 220 mm';  X:2200; Y:2200),
    (Typ:50; Name: 'Letter Extra 9/275 x 12';       X:2355; Y:3048),
    (Typ:51; Name: 'Legal Extra 9/275 x 15';        X:2355; Y:3810),
    (Typ:52; Name: 'Tabloid Extra 11.69 x 18';      X:2969; Y:4572),
    (Typ:53; Name: 'A4 Extra 9.27 x 12.69';         X:2354; Y:3223),
    (Typ:54; Name: 'Letter Transverse 8/275 x 11';  X:2101; Y:2794),
    (Typ:55; Name: 'A4 Transverse 210 x 297 mm';    X:2100; Y:2970),
    (Typ:56; Name: 'Letter Extra Transverse 9/275 x 12'; X:2355; Y:3048),
    (Typ:57; Name: 'SuperASuperAA4 227 x 356 mm';   X:2270; Y:3560),
    (Typ:58; Name: 'SuperBSuperBA3 305 x 487 mm';   X:3050; Y:4870),
    (Typ:59; Name: 'Letter Plus 8.5 x 12.69';       X:2159; Y:3223),
    (Typ:60; Name: 'A4 Plus 210 x 330 mm';          X:2100; Y:3300),
    (Typ:61; Name: 'A5 Transverse 148 x 210 mm';    X:1480; Y:2100),
    (Typ:62; Name: 'B5 (JIS) Transverse 182 x 257 mm'; X:1820; Y:2570),
    (Typ:63; Name: 'A3 Extra 322 x 445 mm';         X:3220; Y:4450),
    (Typ:64; Name: 'A5 Extra 174 x 235 mm';         X:1740; Y:2350),
    (Typ:65; Name: 'B5 (ISO) Extra 201 x 276 mm';   X:2010; Y:2760),
    (Typ:66; Name: 'A2 420 x 594 mm';          X:4200; Y:5940),
    (Typ:67; Name: 'A3 Transverse 297 x 420 mm';    X:2970; Y:4200),
    (Typ:68; Name: 'A3 Extra Transverse 322 x 445 mm'; X:3220; Y:4450));


4: PNG 图像格式支持
解决方法:
A:修改代码:frxClass.pas 中三处
A.1:
{$IFDEF PNG}
  {$IFDEF Delphi12}        //PZG 开放Delphi2009 PNG支持
	, pngimage
  {$ELSE}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -