上一篇 | 下一篇

在Delphi中运用QuickReport实现多栏列印

发布: 2008-6-26 20:31 | 作者: admin | 来源: | 查看: 33次

width="84%">在Delphi中运用QuickReport实现多栏列印

湖北省荆州市荆州区气象局

胡佩敏

---- 在所有有关Delphi的书籍中,都没有讲解如何实现一个打印项的多栏打印,而实现

生活中往往有许多报表要求同一项目多栏打印,QuickReport提供了报表打印一整套完

整的解决方案,完全可以实现同一项目的多栏打印,技术关键是如何控制表中记录提取

个数,如果在Treport的DataSet属性中选定一个Table,那么QuickReport每次打印详细

列表(BandType=rbDetail)属性的TQRBand时,系统会自动取出一个记录供打印,并将表

中的记录指针移到下一位,这样程序无法控制表中记录指针的移动,就无法实现多栏打

印,只要程序不在Treport的DataSet属性选定任何表, QuickReport便不会控制表记录

的提取,QuickReport特为其它类型数据打印提供了一个OnNeedData事件,QuickReport

每次打印详细列表(BandType=rbDetail)属性的TQRBand时,会触发这个事件,要求提供

打印数据,如果程序在OnNeedData事件中编写运用表中数据提供打印资料,便能实现多

栏打印,现举例说明:

---- 现在要实现一个Table1中Name项两栏打印,在窗口上放TquickReport组件

quickReport1,并在上面放Tband组件band1,将其BandType属性改为Detail,在Tband

组件上并排放两个QRLabel组件QRLabel1和QRLabel2,在quickReport1的OnNeedData事

件中写如下代码:

procedure TForm1.QuickRep1NeedData(Sender:

TObject; var MoreData: Boolean);

var

I: integer;

begin

MoreData := True;

for I:= 1 to 2 do

begin

if Table1.Eof then Break;

case I of

1: QRLabel1.Caption :=

Table1.FieldByName('Name').AsString;

2: QRLabel2.Caption :=

Table1.FieldByName('Name').AsString;

end;

Table1.Next;

end;

if Table1.Eof then MoreData := False;

end;

----

为了保证打印或者打印预览开始时Table1指针在第一条记录,在quickReport1的

BeforePrint事件中写如下代码:

procedure TForm1.QuickRep1BeforePrint

(Sender: TCustomQuickRep;

var PrintReport: Boolean);

begin

Table1.First;

end;

---- 这样程序调用QuickRep1.Preview或者QuickRep1.Print便能预览或者打印到一个关于

Name的从左至右,从上到下的多栏报表。

字号: | 推荐给好友

评分:0

我来说两句