前提条件:
DELPHI6,使用了QREPORT
问题1:
其中一张报表是要用A3纸,众所周知,并不是每个打印机支持A3纸,
能否让程序检测一下默认的打印机,若不支持A3纸,则提示不能打印。问题2:
使用了TQRBAND,BANDTYPE 模式是 rbDetail, 从数据库中提取数据打印,
能否做到只每页只让TQRBAND循环30次,只打30条记录,31条记录从下一页
开打(出现的问题是在有的打印机上只打29条记录,有的可以打31条记录)
DELPHI6,使用了QREPORT
问题1:
其中一张报表是要用A3纸,众所周知,并不是每个打印机支持A3纸,
能否让程序检测一下默认的打印机,若不支持A3纸,则提示不能打印。问题2:
使用了TQRBAND,BANDTYPE 模式是 rbDetail, 从数据库中提取数据打印,
能否做到只每页只让TQRBAND循环30次,只打30条记录,31条记录从下一页
开打(出现的问题是在有的打印机上只打29条记录,有的可以打31条记录)
BandPrinted: Boolean);
begin
case i of
1..30:i=i+1;
31..40: begin quickrep1.NewColumn;i:=1;end;
end;
己能做到,不过提出我的改进意见
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)