DELPHI FastReport分组打印并且指定每页行数(不足填空行)

var
  GPage,GIndex,FGIndex:integer;
  PageList:array of integer;
  PageLine: integer;      
  PageMaxRow: integer=28;         
 
procedure PageFooter1OnBeforePrint(Sender: TfrxComponent);
begin
  GPage := GPage + 1;
end;

procedure Page1OnBeforePrint(Sender: TfrxComponent);
begin
  GPage :=1;                                       
end;

procedure GroupFooter1OnBeforePrint(Sender: TfrxComponent);
var
  i: integer;   
begin
  if Engine.FinalPass then  //二次遍历时增加分组索引
    FGIndex := FGIndex + 1
  else
  begin
    setLength(PageList,GIndex + 1);                                                                   
    PageList[GIndex] := GPage; //存放分组的总页数         
    GIndex := GIndex + 1;
  end;
  GPage := 0;

  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;

procedure Memo6OnBeforePrint(Sender: TfrxComponent);
begin
  if not Engine.FinalPass then exit;
  //Memo6.Lines[0] := '总页号:'+IntToStr(PageList[FGIndex]);
  Memo6.Lines[0] := '总页号:'+IntToStr(FGIndex+1);     
end;                                                                                                                                                                                

procedure MasterData1OnBeforePrint(Sender: TfrxComponent);
begin
  PageLine := <Line> mod PageMaxRow;
  if (PageLine = 1) and (<line> > 1) then
    Engine.newpage;
  child1.visible := False;
end;

//如果仅在最后一页补空行可用

{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
  FGIndex :=0;       
end.

FastReport界面为:

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
没有分的请发邮件给我:jacdfb@163.com,qq:505689211 一直也没接触到什么复杂的报表,都是一些简单的报表,在DelphI下使用QuickReport一般也就能满足需要了,由于公司现在需求的变化,对条码扫描提出了新的要求,主要是扫码要包含更多地内容,以前的一维码显然不能完全满足,再说二维码也是一种趋势,故而需要解决二维码的问题,网上搜了一下,方式有多种多样,我花了3天时间找了很多,也尝试了很多。也经历了很多失败!总结一下在Delphi下实现二维码主要有三种方法: 1、使用PtImageRW.dll和PtQREncode.dll动态连接库,使用uQRCode生成二维码图像,如此就可以在报表中予以打印了,具体如何用uQRCode实现绘制二维码,本人水平太低,无法参透;结合QuikReport就可以实现打印二维码了,但此种有一个问题就是不支持中文,如source1(整合到FastReport中也无法实现对中文的支持); 2、还有一种就是生成控件,利用ZINT制作的控件,如source2;此种有个问题就是无法在报表中使用(也许是我不会用),只可在窗体上显示,当然理论上说能在窗体上使用就完全可以用于打印报表了,可问题时我不会,哎,还是技术水平太低。还有一种叫Han-sof 2D Barcodes的控件,我可以安装,但却无法使用,无法生成二维码到图片。可上网搜索一下下载这个控件安装一下,有搞定的与我共享一下。 3、用ZINT整合到FastReport中,也是下面我要叙述的形式:source3。完全可以满足我的需求。 例子实现了对采购入库数据的分组批量打印,加入了二维码的使用,当然实际工作当中制作入库单基本上用不到批量打印的,一般都是一单一打,但在我这里没办法,必须设计这样的功能,历史遗留问题吧,这里也牢骚一下吧! 如做一些延伸,很多的打印都和这个有很多的类似之处,我说的是并不太复杂的应用,至于什么更复杂得我想FS也能搞的定,这里做一个总结是希望对和我一样水平的人提供一些帮助吧,也许现在很多人根本不用Delphi了,权且当作自己的一个笔记吧! *********压缩文件内容如下********************************* 1、fastreport for 2010是我用的,可以正常使用也是例子里用到的4.9版本 2、fastreport5 for delphi7,已经好久不用7了,故也没测试,这是下载到的!测试成功的告诉我一下! 3、fastreport5 for xe8,我朋友测试通过的,也是他发给我的,但在我的xe8下就是不,可以看到控件,但一运,就报错,还没时间研究,我记得在装XE8的时候是自带了fastreport5的,但并没有二维码的选项,我是卸载了自带的,然后再安装的,然后出现了一系列的问题,实在没时间,因为大部分程序是在2010下的,还没时间向XE8切换,不知道是不在安装的时候不能安装自带的FS5,我朋友在第一次安装的时候就没有选择,然后手动安装的,效果很好! 有知道fastreport5如何在2010下用的,麻烦指教一下! 4、source1-3,前面有说过了,主要是一些例子,我所总结的三种方法,也不知道对不对! 5、zinBarcode文件里也是一个例子,也是用fastreport,可以比较完美的显示中文fastreport,但二维码不能显示中文,设置成中文即报错。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值