请问高手:如何控制每页打印的行数.(100分)

  • 主题发起人 主题发起人 badboy_chh
  • 开始时间 开始时间
B

badboy_chh

Unregistered / Unconfirmed
GUEST, unregistred user!
如:用户输入6行/页,则每页显示6行数据;用户输入10行/页,则每页显示10行数据。
 
如果你用的是QuickReport,可以在QrReport.OnNeedData里进行控制
用 QuickReport1.NewPage 可以换页,
至于什么时候换页,你可以定义两个窗体变量,一个记录每页要打印的总行数 PageRow,
另一个记录当前打印到的行数 CurrentRow,在QuickReport1.BeForePrint事件里对两个变量
赋初始值,
在OnNeedData事件里判断,当CurrentRow=PageRow时换页,并设CurrentRow=0,就行了
用这种方法有以下几个方面要注意:
1、QuickReport控件不能连DataSet
2、显示明细数据的QrLabel放在DetailBand里
3、注意循环变量的赋值,比如换页后,页中当前行的值必须初始化
4、控件MoreData,为True时继续打印,为False不继续打印
下面我举个例子:
implementation
var
PageRowCount : Integer;
//每页能打印的总行数
CurrentRow : Integer;
//页中当前打印的行号
I : Integer;
//数组中用到的循环变量
{$R *.DFM}
{打印之前,对数据进行初始化}
procedure TForm1.QuickRep1BeforePrint(Sender: TCustomQuickRep;
var PrintReport: Boolean);
begin
PageRowCount := 20;
//这个值要注意,不能太大,也不能太小
CurrentRow := 0;
I := 0;
end;

procedure TForm1.QuickRep1NeedData(Sender: TObject;
var MoreData: Boolean);
begin
//如果数据打印完成,不继续进行
if I = High(MyArray) then
begin
MoreData := False;
//不继续打印
Exit;
end;

MoreData := True;
//继续打印
{如果一页打满,换页继续打印}
if CurrentRow = PageRowCount then
begin
QuickRep1.NewPage;
//开始新页
CurrentRow := 0;
//对当前行变量初始化
end
else
{一页没打满,继续打印该页内容}
begin
QRLabel1.Caption := MyArray[0, I];
{打印第一项内容}
QRLabel2.Caption := MyArray[1, I];
{打印第二项内容}
// .....
end;

Inc(I);
//控制数组变量+1
Inc(CurrentRow);
//对当前行变量+1
end;

 
[8D]comsvw0506
 
在QuickRepAfterPrint里写
if QuickRep1.ColumnCount = YourCount
QuickRep1.Preview.NewColumn;
 

Similar threads

S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
后退
顶部