实现效果概述:当打印一些数据时,我们希望每页都打印20行,当不够时,打印出空白表格!
这是怎么实现的呢?下面我说一下实现原理,报表通过FastReport实现
第一步:报表中需要用到的组建
PAGEHEADER,MasterData,Child(通过右键点击MasterData>Add child band),Footer
在Child中用MEMO画空白表格,显示的样式和MaterData中的数据样式相同!
第二步:在工具箱左上角有选项卡,选择CODE选项卡,打开代码模块!
第三步:在BEGIN
END.的上面声明变量
此时代码模块的样子
var
PageLine: integer; //在現在頁列印到第幾行
PageMaxRow: integer=15; //設定每頁列數
Begin
End.
第四步:在工具箱左上角选项卡中,切换到PAGE1选项卡,打开页面模块!
第五步:选择MasterData,在工具箱左上角点Events(事件)→OnBeforePrint,双击,进入该事件代码区域
写入代码
Begin
PageLine := <Line> mod PageMaxRow;
if (PageLine = 1) and (<line> > 1) then
Engine.newpage;
child1.visible := False;
End;
第六步:选择Footer,在工具箱左上角点Events(事件),→OnBeforePrint,双击,进入该事件代码区域
写入代码
var
i: integer;
begin
i := iif(PageLine=0, PageMaxRow, PageLine);
child1.visible := True;
while i < PageMaxRow do
begin
i := i + 1;
Engine.ShowBand(Child1); //印空白表格
end;
child1.visible := False;
end;
此时代码区域的代码为:
var
PageLine: integer; //在現在頁列印到第幾行
PageMaxRow: integer=15; //設定每頁列數
procedure MasterData1OnBeforePrint(Sender: TfrxComponent);
begin
PageLine := <Line> mod PageMaxRow;
if (PageLine = 1) and (<line> > 1) then
Engine.newpage;
child1.visible := False;
end;
//Footer1高度設為0
procedure Footer1OnBeforePrint(Sender: TfrxComponent);
var
i: integer;
begin
i := iif(PageLine=0, PageMaxRow, PageLine);
child1.visible := True;
while i < PageMaxRow do
begin
i := i + 1;
Engine.ShowBand(Child1); //印空白表格
end;
child1.visible := False;
end;
begin
end.
需要注意的问题:当打印时,比如数据为1条,那么打印出来的效果应该为一页15条数据,14行为空行!
假如出现了两页,而且第二页只显示了一行或者几行,此时说明你的MasterData和Child中MEMO的高度太高,不可以装下15行数据,此时需要调节这两个组建中MEMO的HEIGHT属性,直到可以显示正确结果为止!(多余一页,降低HEIGHT,一页未显示完,增加HEIGHT)
最终效果: