📄 报表的制作.txt
字号:
标 题: Delphi 3中报表的制作
发信站: BBS 水木清华站 (Wed Sep 30 21:02:22 1998)
[转载]
Borland Delphi是当今优秀的Windows可视化开发工具之一,今年
5月份推出的Delphi3是一个真正的32位开发平台,比Delphi 2增加了
不少定制控件。Delphi 3没有捆绑ReportSmih 报表制作工具,但同时
增加了QReport组中报表制作控件的功能,使制作报表更加方便灵活。
在Delphi 3中除了可以采用QReport组中报表制作控件来制作报表外,
还可利用打印机画布直接向打印机输出报表。下面将详细介绍这两种
方法。
用打印机画布制作报表
Delphi引进了画布的概念,使向打印机输出和向屏幕的输出具有
相同的方法,直接向打印机的画布输出线条和字符串,即可制作出任意
规格的报表。
首先,把支持打印机的Printers单元手工加到uses域里,然后在打
印事件中调用Tprintr 对象来制作报表。下面我们来看一个实际例子
。假设在当前Form1上有一按钮名为Print-ep ;在Dialogs控件组选取
一PrintDialog控件加到Form1中,命名为printdg1;在Additional控件
组中选取一StringGrid控件加到Form1中,命名为temsgrid1,设其网格
为10行10列,并假设已完成了在temsgrid1控件中显示一10行10列的数
据库表数据的准备工作,然后在Print—rpCl ick事件中打印报表。程
序示例如下:
procedure TForm1.Print-repClick(Sender:TObject);
var i,j,cp,ph,pw,w,h:integer;
beginif printdg1.Execute then //打开打印对话框
begin
for cp:=1 to printdg1.copies do //打印份数
begin
with printer do
begin orientation:=poPortrait; //设置纵向打印方式
title:=‘打印报表例子’;//打印任务标题
pw:=pagewidth;//获得当前设置的打印纸页宽
ph:=pageheight; //获得当前设置的打印纸页高
h:=2104;
w:=1488;
begindoc;//开始打印
//下面画表格,先画11条横线
for i:=1 to 11 do
begin
canvas.moveto(100*pw div w,i*100*ph div h);
canvas.lineto(1100*pw div w,i*100*ph div h);
end;
//再画11条竖线
//再画11条竖线
for i:=1 to 11 do
begin
canvas.moveto(i*100*pw div w,100*phdiv h);
canvas.lineto(i*100*pw div w,1100*ph div h);
end;
//填上数据
for j:=1 to 10 do
for i:=1 to 10 do
canvas.textout((100*i+10)*pwdiv w,(100*j+10)*ph div
h,temsgrid1.cells[- 1,j-1]);
enddoc;//结束打印end;
end;
end;
end;
在上面程序中,先打开打印对话框,然后再设置打印方向、打印标
题并获取当前打印纸的宽高点数。在程序中,为了使在不同打印分辨
率中有相同的打印外观,我们以180×180分辨率的 A4纸点数2104×14
88做为基准换算打印坐标。Printer.Canvas.Moveto(x,y)用于移动打
印机画布坐标到(x,y)处;Printer.Canvas.Lineto(x,y)用于从画布当
前坐标处画一直线至x ,y);Printer.Canvas.Textout(x,y,Text)用于
在画布的坐标(x,y)处以当前字体输出字符串Text。为了使报表更加
美观和生动,可以设置打印机画布的字体、大小,还可以插入图片等。
用QReport组控件制作报表
QuickReport是Quick Soft Development公司专为Delphi设计的
用于制作报表的工具。Delphi 3中QReport组控件十分丰富,只要很好
地利用这些控件就能制作出效果不错的报表来。
1.建立一个报表
(1)首先我们在Form2上放置一TQuickRep控件,TQuickRep控件是
建立一报表必不可少的控件。可以改变该控件的属性设置,以使其外
观符合要求。在缺省情况下,TQuickRep控件的尺寸为放置在窗口上的
尺寸,TQuickRep控件根据当前控件的尺寸来自动设置数据区的范围。
改变TQuickRep控件外观最简单的方法是:在TQuickRep控件内单
击鼠标右键,在弹出菜单中选择Report Settings项来打开设置窗口。
(2)设置数据。把TQRBand控件放到TQuickRep控件上,并把BandTy
pe属性设为rbTitle,缺省情况下Align属性是a1Top。然后把TQRLabel
控件放到TQRBand控件上,修改它的Caption属性,作为报表的标题。
(3)把数据放到报表上。首先再将一个TQRBand控件放到TQuickRe
p控件上,并把BandTye 属性设为rbDetail,然后把一个TTable控件(名
为Table1)放到From2上,设置它的DataBaseam e属性和TableName属性
,并把TTable控件的Active属性设为True。与Delphi2不同的是,Dlph
i3中TQuickRep控件没有DataSource属性而以DataSet属性来代替,因
此设置TQuickRep控件的DataSet属性值为Table1。
(4)把一个TQRDBText控件放到第二个TQRBand控件上,设置它的Da
(4)把一个TQRDBText控件放到第二个TQRBand控件上,设置它的Da
taSet属性值为Table, 设置DataField属性为要显示的字段。
到此,就可在TQuickRep内单击鼠标右键,在弹出菜单中选择Revie
w项来预览报表。
2.预览及打印报表
在运行期间也可以调用TQuickRep的Preview方法来预览报表,在
预览窗口中可单击打印按钮来打印报表,但也可直接调用TQuickRep的
Print方法来打印报表。
3.给报表的数据画上网格
在省缺情况下,报表的数据周围是没有网格的。我们可以给数据
周围加上网格,使其看起来更像一个表格,方法是设置TQRBand控件的
高度与TQRDBText高度控件相同,将所有的TQRDT ext控件的AutoSize
属性设为False,并将它们首尾相连,然后将每一个TQRDBText控件的Fr
me 的子属性DrawBottom、DrawLeft、DrawRight、DrawTop设为True,
子属性Style设为poSoid。这样即可加上网格线。
QReport控件组共有16种报表制作工作,以上只是一个粗略的介绍
,不能尽述其强大的功能。在具体应用中,用户可以通过加载其它报表
制作控件设计出有个性的报表来。
两种方法的比较
以上两种制作报表的方法各有千秋。用QReport组控件来制作报
表的方法比较简单,但是当报表较多时,用此方法显得较笨拙,并且使
编译后的可执行文件急剧增大。用打印机画布制作报表的方法比较繁
重,必须根据实际的报表来设计每一条线的起止坐标,算好每个坐标点
的值,但当报表较多时,用此方法显得较灵活,并且使编译后的可执行
文件的代码量增加不多,因此在这种情况下建议选用此方法。
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -