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)

最终效果:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章