前提条件:
DELPHI6,使用了QREPORT
问题1:
其中一张报表是要用A3纸,众所周知,并不是每个打印机支持A3纸,
能否让程序检测一下默认的打印机,若不支持A3纸,则提示不能打印。问题2:
使用了TQRBAND,BANDTYPE 模式是 rbDetail, 从数据库中提取数据打印,
能否做到只每页只让TQRBAND循环30次,只打30条记录,31条记录从下一页
开打(出现的问题是在有的打印机上只打29条记录,有的可以打31条记录)

解决方案 »

  1.   

    2、在打印内容所在BAND的AFTER PRINT事件中累加、判断
      

  2.   

    procedure TForm1.QRBand1AfterPrint(Sender: TQRCustomBand;
      BandPrinted: Boolean);
    begin
    case i of
    1..30:i=i+1;
    31..40: begin quickrep1.NewColumn;i:=1;end;
    end;
      

  3.   

    多谢
    己能做到,不过提出我的改进意见
    1:由于30行换行,而您用的事件为AFTERPRINT会出现一个界限的问题
    您有原码将改为:
    procedure TMarkAllRepFrm.QRBand2AfterPrint(Sender: TQRCustomBand;
      BandPrinted: Boolean);
    begin
      case i of
        1..29:  i:=i+1;
        30..60:  begin qrpMarkAll.NewColumn; i:=1;  end;
      end;
    end;
    即在AFTERPRINT中 界限只能设为29不能设为行,否则就会打31行才换页
    改成上述程序后,出现另一个问题是若记录正好为30的倍数,如60行,、
    本应只打两页,实际上会打出三页,第三页完全空白,仔细想想,应是
    AFTERPRINT的原因,于是将事件改为BEFOREPRINT 代码如下,问题完全解决,也请指正。
    procedure TMarkAllRepFrm.QRBand2BeforePrint(Sender: TQRCustomBand;
      var PrintBand: Boolean);
    begin
      case i of
        1..30:  i:=i+1;
        31..60:  begin qrpMarkAll.NewColumn; i:=1;  end;
      end;end;最后,还是非常感谢 WWWWA(aaaa) 若在6天之内,
    等待第一个问题的解决方案。
    若无人解决,所有分数将送给WWWWA(aaaa)