老问题了,如何在预览中得到打印总页数,100分 ( 积分: 100 )

  • 主题发起人 主题发起人 chanry
  • 开始时间 开始时间
C

chanry

Unregistered / Unconfirmed
GUEST, unregistred user!
如何在预览中得到打印总页数,
我不想用Prepare,速度太慢。有没有其他方法,
就象reportbuild那样子也OK(在预览中自增总页数),或者就直接得到总页数,
E_mail:chanry@21cn.com
 
如何在预览中得到打印总页数,
我不想用Prepare,速度太慢。有没有其他方法,
就象reportbuild那样子也OK(在预览中自增总页数),或者就直接得到总页数,
E_mail:chanry@21cn.com
 
[totalpages]
 
你打开frReport->file->report options->two-pass report选中再用[totalpages]
 
楼上说的对!
 
能不能详细一点?
我只想用quickreport,
不想用其他的第三控件。
 
这个应该有这个属性和事件的吧!!
看一下DEMO就可以了!!
 
高手啊高手快出来吧!
 
你实在没咒念时,算一下不就得了。
 
我现在是用算得,就是不怎么特别准确

1、我是动态设置报表的,所有如果有抬头[Title]的话,
第一页就会有抬头,其他的页面就肯定不回有,因此就会有这点误差;
2、更何况本来quickreport随着纪录的增加也会有些误差---这个我到解决了;

所以想看看有没有什么别的方法可以精确一点
 
晕死,自己研究一下不就出来了?
 
在onpreview事件里面的endpage 让一个变量 inc();
 
楼上的方法我找用过了,不行。
用这种算的方法怎么样都不会精确的,
我只想精确找个精确点的方法,用Prepare就很精确,就是太慢了,等于浏览两遍
 
在 quickreport 的 每一页结束 事件中,让一个变量加一 啊。
 
楼上的方法我都有试过,不行,
那变量是可以赋值,但在浏览中读出的仍然是浏览前的初始值
 
在fastreport中,选择两遍报表
 
恐怕按你的要求来说(不用Prepare)可能必须用计算的方法:
先算出特打印的项目数量Maxconut,然后
Maxcount:=Maxcount+Tiltle折算成几条项目
page:=Maxcount div 每页最多能放多少条项目
if page=0 then
page=1;
应该比较精确的,主要是设计时Title的高度控制成项目的整数倍即可
 
在fastreport中,你打开frReport->file->report options->two-pass report选中再用
[totalpages]
 
to wangsea:
我用的方法和你的说的一样,不过就是我上面有提到的:
1、我是动态设置报表的,所有如果有抬头[Title]的话,
第一页就会有抬头,其他的页面就肯定不回有,因此就会有这点误差;
2、更何况本来quickreport随着纪录的增加也会有些误差---这个我到解决了;
所以怎么样都会有误差了,看了不用Prepare,真的没有办法了...
 
不精确,估计手动换页就精确了,如下试试:
假设当前打印行是currentRow,每页仅打27条数据,则
var currentrow:integer;
TQRForm1..QuickRep1BeforePrint(Sender: TCustomQuickRep;var PrintReport: Boolean);
begin
currentrow:=0;
xxx.DataSet.First;
....
end;
procedure TQRForm1.QuickRep1NeedData(Sender: TObject;
var MoreData: Boolean);
begin
MoreData:=currentIndex<maxcount;
if MoreData then
begin
.....//数据赋值等
if (currentrow=24) then
quickrep1.NewPage //假设第一页有title,只能打24条
else
if (current>27) and (currentrow mod 27=0) then
quickrep1.NewPage;
//从第二页起固定27条换页
....//进度处理等
end;
inc(currentrow);
end;
 
后退
顶部