Quickreport打印要求有“第x页 共x页的字样”,“第x页”可以用PageNumber取到,“共X页”怎么办(50分)

  • 主题发起人 主题发起人 wataki
  • 开始时间 开始时间
QuickRep1.QRPrinter.PageCount;//总页数,是Integer型。
给分吧~!
 
procedure TfrmReport_1.repStartPage(Sender: TCustomQuickRep);
begin
inherited;
lblPage.Caption := '第 '+IntToStr(rep.PageNumber)+' 页 共 '+IntToStr(rep.QRPrinter.PageCount)+' 页';
end;
第一页就显示"第1页 共1页",显然不合要求
 
补充:假设有51页
应该显示"第1页 共51页",
 
Sorry
QuickRep1.Prepare;//预览或打印前先执行这一句
QuickRep1.QRPrinter.PageCount;//然后才是这个
QuickRep1.Preview;//最后是这个
没写明白,呵呵,抱歉
给分吧~!
偶用这个方法从来没出过问题。
 
还是不行
procedure TfrmMain.mnuDY1Click(Sender: TObject);
begin
if not assigned(frmReport_1) then
begin
frmReport_1 := TfrmReport_1.Create(self);
try
frmReport_1.Rep.Prepare;
frmReport_1.Rep.Preview;
finally
frmReport_1.Free;
frmReport_1 := nil;
end;
end;
end;

我把lblPage.Caption := '第 '+IntToStr(rep.PageNumber)+' 页 共 '+IntToStr(rep.QRPrinter.PageCount)+' 页';
写在OnStartPage里面,是不是不对?
 
QuickRep1.Prepare;//预览或打印前先执行这一句
QuickRep1.QRPrinter.PageCount;//然后才是这个
QuickRep1.Preview;//最后是这个

我在你说的Prepare和Preview之间将PageCount(PageNumber也行)用一个变量记录下来,代替OnStartPage里面的rep.QRPrinter.PageCount,在Preview的时候页面重新生成,结果是对了,但是多了一个Prepare,多用了不少时间。
我不知道你前面说得是不是这个意思,有没有好一点的办法?
 
在QuickRep1BeforePrint里面写事件
 
我用过一个最简单的方法就是用记录行数除以你每页可列印的行数就可以了。
 
更不对了
QuickRep1BeforePrint里面取到的QRPrinter.PageCount=0
预览时"第X页 共0页
 
procedure TForm1.Button1Click(Sender: TObject);
begin
QuickRep1.Prepare;//预览或打印前先执行这一句
nPageCount := QuickRep1.QRPrinter.PageCount;//以便获得总页数
QuickRep1.Preview;
end;

哎,你再说不行偶就真的帮不了你了。
 
我前面已经肯定了这种做法
就是加一个变量
取PageNumber值和在OnStartPage里面写同样可以
 
我现在就不明白你还有什么问题了:(
 
就是速度慢了许多
给分了
 
后退
顶部