======================================================
注:本文源代码点此下载
======================================================
---- 在所有有关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的从左至右,从上到下的多栏报表。
======================================================
在最后,我邀请大家参加新浪APP,就是新浪免费送大家的一个空间,支持PHP+MySql,免费二级域名,免费域名绑定 这个是我邀请的地址,您通过这个链接注册即为我的好友,并获赠云豆500个,价值5元哦!短网址是http://t.cn/SXOiLh我创建的小站每天访客已经达到2000+了,每天挂广告赚50+元哦,呵呵,饭钱不愁了,\(^o^)/