FastReport如何打印表格式的空行?

实现效果概述:当打印一些数据时,我们希望每页都打印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)

最终效果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值