📄 fastreport 4.7.x fixed.txt
字号:
, frxpngimage
{$ENDIF}
{$ENDIF}
A.2:
const
OriginalPngHeader: array[0..7] of AnsiChar = (#137, #80, #78, #71, #13, #10, #26, #10);
//PZG Char->AnsiChar,开放Delphi2009 PNG支持
A.3:
{$IFDEF PNG}
PNGHeader: array[0..7] of AnsiChar; //PZG Char->AnsiChar,开放Delphi2009 PNG支持
{$ENDIF}
B:修改代码:frxClassRTTI.pas 中
{$IFDEF PNG}
{$IFDEF Delphi12} //PZG 开放Delphi2009 PNG支持
, pngimage
{$ELSE}
, frxpngimage
{$ENDIF}
C:修改代码:frx.inc 中
//---------- PNG images ----------
// PNG images. If you want to show png images in "Picture" object, uncomment
// the following line:
{$DEFINE PNG}
//{$IFDEF DElphi12} //PZG 开放Delphi2009 PNG支持
//{$UNDEF PNG}
//{$ENDIF}
5.还有一些小修改,避免编译报错
A.修改:frxGraphictils.pas
const
glasn: String = '琅ㄈ斡圯捱';
soglasn: String = '谅媚魄墒颂拖醒以罩棕佘'+#$DA; //?; //PZG 防止编译错误
znaks: String = '苴';
znaks1: String = #$00C9; //'?; //PZG 防止编译错误
// Jones: 本节下面有一大段俄语注释是乱码,建议全部删除,否则编译时正常
// 安装 dclfrx12.dpk 时,会出现读格式错误。
function CountSpaces: Integer;
var
i: Integer;
begin
Result := 0;
for i := 0 to n - 1 do
begin
spaceAr[i] := 0;
if (s[i + 1] = ' ') or (s[i + 1] = #$00A0) then //PZG 防止编译错误
begin
Inc(Result);
spaceAr[i] := 1;
end;
end;
end;
B.修改:frxAbout.pas
procedure TfrxAboutForm.FormCreate(Sender: TObject);
{$IFDEF FR_COM}
var
r: TRegistry;
s: String;
{$ENDIF}
begin
Caption := frxGet(2600);
Label4.Caption := frxGet(2601);
Label6.Caption := frxGet(2602);
Label8.Caption := frxGet(2603);
Label2.Caption := 'Version ' + FR_VERSION;
Label10.Caption := #$00AE; //#174; //PZG 正确显示版权符号
以上修改,适用于 FastReport 4.7.1,4.7.2,4.7.3 for Delphi2009
最后祝各位用得愉快!
PZG
2008.10.13
相关问答:
1.Fastreport 4.7.x 版本问题:
答:Fastreport 4.7.1 中就已经实现了for Delphi2009 的核心技术和修改的方法
从版本的源码可以看出,作者为了解决该问题,把4.6.8版中的关于条件编译{$IFDEF FR_COM}相关的代码
全部去掉,进行修改.
我发现在4.7.1之前还发出过一个4.6.103试用测试版,其中的修改基本完成,只等待 Delphi2009 up1
升级包发布后,又修改了对应的数据集处理.
4.7.2 =4.7.1 + 条件编译{$IFDEF FR_COM}相关的代码;
如果不使用(FR_COM)的部分,与4.7.1完全相同.
4.7.3 安装时,提取码如果有效的话,各个版本都能生成 for DelphiXXXX 各版本的源码.只是提取码无
效时,只能生成对应说明的演示版,无源码(全用空格’ ’填充了)而且不能重建包.
但从试用版的功能测试中发现,涉及多语言界面处理部分,接口及结果完全相同,没有修改.
2. 多语言界面处理的解决
从 FastReport 4.5.X 开始为实现多国语言处理,改用 UTF8格式 XML 文件保存界面字符资源,
Delphi2009 因能支持 Unicode 在内部编译和识别处理 UTF8 格式文件上的变化,造成了一些
涉及字符串及流处理与以前版本的不同.
首先,一个常数字符串在编译流化成 .dcu 文件时,会根据文件的格式和程序中对该常数字符串
的引用产生不同的编译结果.
如:文件格式是 UTF8,串的引用申明是 AnsiString
流化成: 原串=UTF8格式,引用=AnsiString + 语言代码页 格式
具体各位可以自行实验观察在不同的文件格式和引用申明下,编译产生的 .dcu 文件的内容.
Fastreport 作者没有意识到问题真正的原因是什么,所以4.7.2,4.7.3 中修改的都与中文显示
(多字节内码显示)技术无关,都没有修订该 Beg,主要是在本地代码页下(俄罗斯,单字节内码)进行测试了与
Delphi2009 的兼容性从 Frcc.exe 资源编译程序上看,修订于 2008.8.25 ,这个问题实际存在于 4.5版中到
现在都没有修订.
3. frxReport1.DesignReport运行时全是中文,但是在设计时页面还是E文
这是 Fastreport 安装程序留下的麻烦,在安装时注册 Fastreport 的相关 .BPL 包文件的搜索路径为
Windows\System32\; Program Files\Fastreports\Fastreport 4\LibD12\
并把相关的 .BPL 包文件拷贝到其中
如果不修改代码的话不会有问题,但如果修改后重新编译,产生的新的 .BPL 在 Delphi2009 的缺省包保存路
径对应 Windows XP,2003 为:
Documents and Setting\All Users\Documents\RAD Studio\6.0\BPL\
对应 vista 为:
Users\Public\Documents\RAD Studio\6.0\Bpl\
Delphi2009 在启动时是按注册Fastreport 的相关 .BPL 包文件的搜索路径,检查各个包的相关依赖包是否
存在,并装载各个设计时包到 Package Cache 堆中.如果发现相关依赖包缺少,就发出是否后续装载的对话框.
因此:设计时包是优先从 Windows\System32\ 装入的.
对控件包进行开发或修改时要注意:修改编译生成新的 .BPL 包文件,要拷贝到 Windows\system32\ 下,
在Delphi 的包文件搜索路径中不能有不同的同名包,否则会引发各种莫明的问题.
4.重新编译,是在delphi2009中逐个打开各个包进行编译,不能用 Fsatreport 的recompile.exe.
因为包有依赖顺序,所以必须按下列顺序进行:
先编译运行时包:
第一组:fqb120,fs12,fsDB12,fsADO12,fsBDE12,fsIBX12,fsTee12,
第二组:frx12,frxDB12,frxADO12,frxBDE12,frxDBX12,frxIBX12,frxTee12,frxE12
再编译设计时包:
第一组:dclfqb120,dclfs12,dclfsDB12,dclfsADO12,dclfsBDE12,
dclfsIBX12,dclfsTee12,
第二组:dclfrx12,dclfrxDB12,dclfrxADO12,dclfrxBDE12,
dclfrxDBX12,dclfrxIBX12,dclfrxTee12,dclfrxE12
也可以按以上顺序生成包组,便于全部重建,避免引起误导我们的分析思路.
当程序在修改过程中,会改变一些数据类型和引用申明,如果只重建了一个包,其它包没有作对应重建,也会发生一些问题.
如:一个常数字符串在编译流化成 .dcu 文件时,会根据文件的格式和程序中对该常数字符串的引用产生不同的编译结果.
如:文件格式是 UTF8,串的引用申明是 AnsiString
流化成: 原串=UTF8格式,引用=AnsiString + 语言代码页 格式
如:文件格式是 UTF8,串的引用申明是 String
流化成: 原串=UTF8格式,引用=UTF8 格式
5.另外提请注意的是:
delphi2009 中打开过的带有窗体的程序,会在delphi2007 中会引起运行异常或设计时异常,这个问题会出现多种不同的表现,诸如:
控件注册时出错,程序引导时出错,单元初始化出错,运行时报某属性不存在…
6.FastReport 4.7.x 的XML 版本问题
XML 的标准见: http://www.w3.org/TR/2006/REC-xml-20060816/
为了保持与 Delphi2009 及与以前版本的兼容问题,内部使用了 1.1 非标准的版本,并且内部采用了2种不同的编码来持久化各字符串,易引起一些人为的错误发生.
我公布的修改方法是不改动内部字符编码格式来进行的.我们自己使用的是统一内码格式的方法.修改比较大,可以消除一些潜在的错误.各位有兴趣可以自行研读源代码,是比较有益的.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -