📄 042.htm
字号:
<HTML><HEAD><meta http-equiv="Content-Type" content="text/html; charset=GB2312"><TITLE>-->DELPHI专题文档-程序应用-->在Delphi中运用QuickReport实现多栏列印</TITLE>
<META NAME="keywords" CONTENT=" DELPHI专题文档-程序应用 在Delphi中运用QuickReport实现多栏列印">
<META NAME="description" CONTENT=" - DELPHI专题文档-程序应用 - 在Delphi中运用QuickReport实现多栏列印">
<style>
<!--
#page {position:absolute; z-index:0; left:0px; top:0px}
.tt3 {font: 9pt/12pt "宋体"}
.tt2 {font: 12pt/15pt "宋体"}
a {text-decoration:none}
a:hover {color: blue;text-decoration:underline}
-->
</style>
</HEAD>
<a href="index6.html">返回</a>
<body text="#000000" aLink=#9900ff link=#006699 vLink=#006699 bgcolor="#FFFFFF" leftmargin="3" topmargin="3" marginheight="3" marginwidth="3">
<TABLE WIDTH="100%" CELLPADDING=10 CELLSPACING=0 BORDER=0>
<TR>
<TD class="tt2" bgcolor="#F5F8F8" width="84%"><center><B><FONT style="FONT-SIZE: 16.5pt" COLOR="#FF6666" FACE="楷体_GB2312">在Delphi中运用QuickReport实现多栏列印</FONT></B></center>
<hr color="#EE9B73" size="1" width="94%">
<p><span style="font-size: 9pt"><font color="#ffffff">----</font> 在所有有关Delphi的书籍中,都没有讲解如何实现一个打印项的多栏打印,而实现
生活中往往有许多报表要求同一项目多栏打印,QuickReport提供了报表打印一整套完
整的解决方案,完全可以实现同一项目的多栏打印,技术关键是如何控制表中记录提取
个数,如果在Treport的DataSet属性中选定一个Table,那么QuickReport每次打印详细
列表(BandType=rbDetail)属性的TQRBand时,系统会自动取出一个记录供打印,并将表
中的记录指针移到下一位,这样程序无法控制表中记录指针的移动,就无法实现多栏打
印,只要程序不在Treport的DataSet属性选定任何表, QuickReport便不会控制表记录
的提取,QuickReport特为其它类型数据打印提供了一个OnNeedData事件,QuickReport
每次打印详细列表(BandType=rbDetail)属性的TQRBand时,会触发这个事件,要求提供
打印数据,如果程序在OnNeedData事件中编写运用表中数据提供打印资料,便能实现多
栏打印,现举例说明: </span>
<p><span style="font-size: 9pt"><font color="#ffffff">----</font> 现在要实现一个Table1中Name项两栏打印,在窗口上放TquickReport组件
quickReport1,并在上面放Tband组件band1,将其BandType属性改为Detail,在Tband
组件上并排放两个QRLabel组件QRLabel1和QRLabel2,在quickReport1的OnNeedData事
件中写如下代码: </span></p>
<BR>
<pre><span style="font-size: 9pt">
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;
</span></pre>
<BR>
<p><span style="font-size: 9pt"><font color="#ffffff">----</font>
为了保证打印或者打印预览开始时Table1指针在第一条记录,在quickReport1的
BeforePrint事件中写如下代码: </span></p>
<BR>
<pre><span style="font-size: 9pt">
procedure TForm1.QuickRep1BeforePrint
(Sender: TCustomQuickRep;
var PrintReport: Boolean);
begin
Table1.First;
end;
</span></pre>
<BR>
<p><span style="font-size: 9pt"><font color="#ffffff">----</font> 这样程序调用QuickRep1.Preview或者QuickRep1.Print便能预览或者打印到一个关于
Name的从左至右,从上到下的多栏报表。 </span></p>
<hr color="#EE9B73" size="1" width="94%">
</TD>
</TR>
</table>
</BODY></HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -