关于打印总页数的问题,请大家多帮帮忙啊,先谢过了! (50分)

to netatom:
代码如下,但预览时的数据为 0,不知是何故,这个问题烦了我好长时间了,气死我了。

procedure TFormPhcePrint.QuickRep1BeforePrint(Sender: TCustomQuickRep;
var PrintReport: Boolean);
begin

QRLabel13.Caption:=IntToStr(QuickRep1.QrPrinter.PageCount);
end;

 
这样试试:
QuickRep1.Prepare;
QRLabel13.Caption:=IntToStr(QuickRep1.QrPrinter.PageCount);
QuickRep1.Preview;
 
to netatom
最后这种方法,预览时它的数值还是 0 ,不知是何故?
 
那就奇怪了,因为我是在Delphi的QuickRep的DEMO里试过,是可以的.
先QuickRep1.Prepare;
然后QuickRep1.Preview;
在QRLabel3的OnPring事件中:
Value:=IntToStr(QuickRep1.QrPrinter.PageCount);

如果还是不行的话,能否把部分程序传给我试试?
netatom@21cn.com
 
to netatom

真的,我也可奇怪了,按理说这种方法是可行的,但预览的时候确实是 0,
如果给你发了文件你没有数据也不行吧?
我用的是 D6 ,不会是 Bug 吧?
 
我用的是D5.
是不是BUG,说不清,不过你也可以在D6里的QUICKREP的DEMO中试试啊!
 
我看它在计算数据的时候好像曾经显示过一下 页数 ,但预览和打印时就出来的是0。
请大家帮帮忙,这个问题好长时间了。
 
把代码粘出来看看.
 
好啊,下面是代码,我加了一个按钮,一点击按钮就预览。多谢了!

unit PhcePrint;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
QuickRpt, Qrctrls, Db, DBTables, ExtCtrls, StdCtrls, Buttons;

type
TFormPhcePrint = class(TForm)
QuickRep1: TQuickRep;
Table1: TTable;
DataSource1: TDataSource;
BitBtn1: TBitBtn;
ColumnHeaderBand1: TQRBand;
QRLabel1: TQRLabel;
QRLabel2: TQRLabel;
QRLabel3: TQRLabel;
QRLabel4: TQRLabel;
QRLabel5: TQRLabel;
QRLabel6: TQRLabel;
QRLabel7: TQRLabel;
QRLabel8: TQRLabel;
PageHeaderBand1: TQRBand;
QRLabel9: TQRLabel;
QRLabel10: TQRLabel;
QRSysData1: TQRSysData;
QRLabel11: TQRLabel;
QRLabel12: TQRLabel;
DetailBand2: TQRBand;
QRDBText1: TQRDBText;
QRDBText2: TQRDBText;
QRDBText3: TQRDBText;
QRDBText4: TQRDBText;
QRDBText5: TQRDBText;
QRDBText6: TQRDBText;
QRLabel13: TQRLabel;
Button1: TButton;
procedure FormCreate(Sender: TObject);
procedure QRLabel13Print(sender: TObject;
var Value: String);
procedure QuickRep1BeforePrint(Sender: TCustomQuickRep;
var PrintReport: Boolean);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;


var
FormPhcePrint: TFormPhcePrint;

implementation

{$R *.DFM}

procedure TFormPhcePrint.FormCreate(Sender: TObject);
begin

Table1.Active:=True;
// QuickRep1.QRLabel13.Caption:=QuickRep1.QrPrinter.PageCount
// QuickRep1.QRLabel13.Caption:=inttostr(nPageCount);
// QuickRep1.Preview;
BitBtn1.Click;
// FormPhcePrint.Close();
end;


procedure TFormPhcePrint.QRLabel13Print(sender: TObject;
var Value: String);
begin

Caption:=inttostr(QuickRep1.QrPrinter.PageCount);
end;


procedure TFormPhcePrint.QuickRep1BeforePrint(Sender: TCustomQuickRep;
var PrintReport: Boolean);
begin

QRLabel13.Caption:=IntToStr(QuickRep1.QrPrinter.PageCount);
end;


procedure TFormPhcePrint.Button1Click(Sender: TObject);
begin

QuickRep1.Prepare;
QRLabel13.Caption:=IntToStr(QuickRep1.QrPrinter.PageCount);
QuickRep1.Preview;
end;


end.
 
把FormCreate里的Button1.Click去掉.
把QRLabel3Print以及QuickRep1BeforePrint去掉,只保留Button1Click.
另外,我在D6里做了一个例子,完全可以,你把Email地址留下或者发个信到
我的信箱里,我发给你.
 
fastreport 怎么实现!
 
to netatom

你说的方法我一会儿试试,先给你留个信箱:hcw3@sohu.com
谢谢!
 
to cbtea:
FastReport里更方便,只需在报表设置中把报表设为"两遍报表",
然后在页脚中引用变量:[TotalPages].
 
你需要设置QrReport控件的一个属性,大概意思是两遍扫描吧。 就是说它会在预览、打印前
先“过”一遍报表,这样才能报表总共有多少页。
Two Pass什么的,我英文不好,记不清了,找找吧。
 
终于成功了!谢谢各位!!
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
950
SUNSTONE的Delphi笔记
S
S
回复
0
查看
772
SUNSTONE的Delphi笔记
S
顶部