canvas教程

FastReport报表控件使用技巧总结

字号+ 作者:H5之家 来源:H5之家 2015-10-07 14:21 我要评论( )

本文总结了FastReport报表控件在使用的技巧,如常见的如何访问报表中的对象,如何使用上下标等。

FastReport报表控件使用技巧总结

作者:zhuhm    来源:FastReport中文网    浏览:Loading...      日期:2012-06-27

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.FastReport中如何打印总页数?

设置两次报表后加入引号内内容 "第[Page#]页共[TotalPages#]页"

4.FastReport中如何动态加入变量及变量组?

建立变量组名

frxreport1.Variables.Add .Name:=' '+变量组名;

建立变量名

frxreport1.Variables.AddVariable('组名,如果为不存的组或空,则为默认组,这里不需要空格',变量名,变量初始值);

例如要建立变量组Yuan,二个变量Yuan1,Yuan2,则为

frxreport1.Variables.Add .Name:=' Yuan'注意前面是空格

frxreport1.Variables.AddVariable('Yuan',Yuan1,初始值)

frxreport1.Variables.AddVariable('Yuan',Yuan2,初始值)

5.FastReport中如何加入自定义函数?

Fastreport可以自己加入需要的函数,来实现特定的功能。过程就是:

1)添加函数到报表中。

frxreport1.AddFunction('完整的函数声明');

如有一个自定义函数,为GetName(Old:String):String;这个函数通过数据集的一个字段,得到另一个返回值。

则语句为:frxreport1.AddFunction('Function GetName(Old:String):String;');

2)脚本中使用函数。

在脚本中或报表中使用自定义函数,就像使用其它Fastreport内置函数一样。

3)程序中处理函数。

使用函数是通过frxreport1的OnUserFunction函数来实现的。

OnUserFunction的声明如下:Function(constMethodName: String;var Params: Variant): Variant;

比如上面的函数,首先要有一个函数,这个函数是GetName的实现部分。如有一个在程序中实现的函数。

function RealGetName(Old:String):String;这个函数名是无所谓的,也可以是GetName。

在OnUserFunction的事件处理中有如下代码即可完成自定义函数在报表中的使用。

if CompareText(MethodName,'GetName')=0 thenResult:=RealGetName(VarToStr(Params[0]));

我一般都是使用CompareText来比较函数名,因为我发现二个版本的Fastreport,一个是MethodName全部自动变成了小写,一个是全部自动变成了大写,所以干脆用CompareText来比较,肯定不会出错。

如果有多个参数,则依次传递Params[0],Params[1]即可,要保持顺序一致。

这里要注意一点,如果参数为指针,则不能直接使用Pointer(Integer(Params[0]))。因为实际传递过来的是指针的整数值,可以使用Pointer(StrToInt(VarToStr(Params[0])))。

6.FastReport中如何共用TFrxreport及TfrxDBDataSet?

一个程序中,不管多么大的程序,只要打印或预览时是模式的,则完全可以共用一个TFrxreport变量及几个TfrxDBDataSet。只不过,要注意完成一个报表程序的步骤,主要是下面几步

1)清除报表,得到一个全新的报表内容。

Frxreport1.clear。

2)设置要使用的TfrxDBDataSet的别名,如果不需要可以省略这一步,但一般最好不同的报表用不同的别名。

注意这一步要在加载报表文件之前,因为一般设计报表文件时已经包含了别名信息。

frxDBDataSet1.UserName:=别名;

3)加载报表或动态建立一个TfrxReportPage。

Frxreport1.LoadFromFile(报表文件的完整文件名);

4)关联TfrxDBDataSet与TDataset,并设置要使用哪些TfrxDBDataSet。

Frxreport1.DataSets.Clear;//先清除原来的数据集

frxDBDataSet1.DataSet:=dataset1;//关联Fastreport的组件与TDataset数据集。

Frxreport1.DataSets.Add(frxDBDataSet1);//加载关联好的TfrxDBDataSet到报表中。

经过这几步后,就可以像单独使用一个Tfrxreport一样使用共用的报表组件了

7.FastReport中如何使用脚本,脚本中使用变量?

很多时候,我们希望把对报表的控制放到报表的脚本中,通常我这样做有二个原因:

1)能够根据字段内容的变化而使用不同的设置,因为如果想在程序中实现这样功能,就不得不用自定义函数,函数的实现要放到程序中,函数可能需要传递很多参数,效率低下。

2)把不同报表的控制放到脚本中,可以实现报表的模块化,程序只是简单的设置数据集的关系,并加载硬盘上的报表文件,不同报表的不同实现方式,显示方式,均放到报表文件中,程序简洁
,易维护,易升级。

当然,这样的缺点就是程序中加载报表时的数据集别名必须与设计报表时的别名一致。

脚本的使用与通常程序的使用并没有太多的区别,就是像正常的程序那样引用控件的名称即可。

但注意对变量的使用,需要把变量名或表达式用<>括起来。

实现打印分组的页数。基本的原理就是:

1)必须使用二遍报表,因为FS算总页数就是需要二遍报表的。

2)在第一遍报表中,在GroupBand打印前,动态的建立整数型数组变量,用以保存上一个分组的总页数。

3)在最后一遍报表时,需要显示分组页数的Tfrxmemoview取得数组中的数据,但最后一个分组不会有总数,可以通过总页数减去GroupBand事件中保存的页数来取得。

4)代码中处理了一页多组,及一组多页打印分组头的情况。可以看到这些特殊处理的代码说明。

5)我特意在分组尾及页脚都用了Tfrxmemoview来显示这些数据,说明在不同情况下的显示。

8.FastReport中如何在脚本中根据字段名改变Tfrxmemoview的内容?

假设有数据表“用户”,字段ID为用户标识,Name为用户名,打印时要求,如果用户名为空,则打印“无用户名”,否则打印出“用户名:实际的用户”,则可以在ID的Tfrxmemoview控件的
OnAfterData事件中写如下脚本。

if<frxDBDataSet1."Name">='' then

Memo2.Text:='无用户名'

else

Memo2.Text:='用户名:[frxDBDataSet1."Name"]'

Memo2是放置用户名称数据的Tfrxmemoview控件。

这里注意,要在脚本中访问变量需要把变量用<>包括起来。

9.FastReport中如何动态调整高度?

 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
网友点评