delphi制作报表.docx
《delphi制作报表.docx》由会员分享,可在线阅读,更多相关《delphi制作报表.docx(42页珍藏版)》请在冰豆网上搜索。
delphi制作报表
批最近刚刚做完一个项目,使用到了RAVE进行报表设计,在使用中也查阅了很多资料,但总觉得网上的资料过于分散,而且都不是很全面,所以决定将如何在Delphi7中使用RAVE报表写成几篇文章,由于本人从小语文学得不好,不是写作高手,这次也是第一次写这样的文章。
希望看到这篇文章的网友能多提意见,欢迎大家指教。
可以给我留言。
言归正传,在我们要给用户编写的软件中往往需要生成各种各样的报表,报表是数据库中数据的最终表现形式,在Delphi6以前,编写报表都在使用Qusoft公司的Quickreport,而且在Delphi中集成了Quickreport。
在BorlandDelphi™7Studio集成开发环境(IDE)的控件面板中取消了Quickreport项,取而代之以Nevrona公司RaveReports项,且在Tools中有RaveDesigner5.0。
打开RaveDesigner5.0,我们可以如图所示的一个报表设计界面,开发人员可以开发出符合用户要求的报表来,而且这个报表的设计、使用与Delphi集成开发环境几乎是完全的一样,这可能是Rave与其它的报表组件最大的外观上的不同。
我在使用中下载了RaveReportsv5.1.3,你可以在这里或者这里下载,在写这篇文章时,上面上已经发布了RaveReports6.0,不过文章还是以RaveReportsv5.1.3为准。
打开Delphi,可以控件面板看到如图:
Delphi7下的Rave
打开Tools中的Rave,看到的报表设计界面如图:
Rave5的报表设计界面
一、Rave5的报表设计界面
首先,介绍一下Rave的报表设计器的各组件和相关的属性。
RaveDesigner集成开发环境的界面包括标题栏、菜单栏、快捷工具栏、组件栏和一些窗口:
·标题栏显示了当前的工程名,位于最上部。
·菜单栏,一些功能可通过菜单栏的菜单命令实现。
·快捷工具栏为位图按钮,一些常用的菜单命令用这些按钮实现。
·报表组件栏分页显示各种组件(Standard、Report、Zoom、Colors、Lines、Fills、Fonts、Drawing、BarCode、Alignment),在利用Rave开发应用程序的过程中,正确、合理地使用组件非常重要。
用它可设计基于数据库和文本的复杂报表。
·左边半部分像Delphi的objectinspector工具,可设置报表元件的属性,它的下部分有对应属性的简短提示。
·正中部分为设计区域,开发者可在上面添加各种设计元件,如Drawing的横线、直线、矩形、椭圆,Barcode中各种常用的条码,Standand中的Text、Memo、Section、Bitmap、Metafile等等。
·右边为设计导航区,可查看报表的各元件的更多信息,如报表库和数据显示目录,设计时也可快速定位元件位置。
[本帖最后由feyun于2007-9-1616:
41编辑]
论坛模式推荐收藏分享给好友管理
TAG:
feyun发布于2007-09-1616:
42:
07
二、Rave的报表设计器,组件栏的各组件:
1、Drawing(绘图)组件页:
Linecomponent:
画线组件,所画的线较灵活。
可以看到其属性入图,有颜色、线宽、线行等属性,设计者根据需要更改属性。
改变线的长短位置,选中线条后,选择一个端点则光标会变为十子型,拖动即可。
Hlinecomponent:
画水平线组件。
Vlinecomponent:
画垂直线组件。
Rectanglecomponent:
画长方形组件,可以使用fill组件填充。
Squarecomponent:
画正方形组件,可以使用fill组件填充。
Ellipsecomponent:
画椭圆组件,可以使用fill组件填充。
Circlecomponent:
画圆形组件,可以使用fill组件填充。
2、BarCode(条形码)组件页:
PostNetBarCode:
打印邮件标签上包括POSTNET条码。
I2of5BarCode:
打印Interleaved2of5条码。
Code39BarCode:
打印standardandextendedCode39条码。
Code128BarCode:
打印A,BandCCode128条码。
UPCBarCode:
打印UPC-12条码。
EANBarCode:
打印EAN-13条码。
3、Standard(标准)组件页:
Text:
这个组件是在报表上固定的文字,例如报表的标题等,可以设置字体的大小、颜色,Rotation属性可以使要显示的字为任意角度。
Memo:
Memo组件提供了多行文本的文字,与delphi中的相似,属性很多,但我们应用的不多,可以使用text属性添加文本。
Section:
这个组件是其他组件的容器,将其他组件固定在此组件中。
Bitmap:
这个组件是在报表中放置bmp文件(*.bmp),FileLink属性连接bmp文件。
MetaFile:
这个组件在报表中放置meta文件(*.wmf),FileLink属性连接meta文件。
FontMaster:
这个组件控制报表中的任何的text字的属性。
在要使用该字体的text组件或memo组件的fontmirrot属性选择FontMaster。
PageNumInit:
报表显示页码的初始页码。
如图的InitValue的值为5,则报表的初始页为5,页码从5开始。
4、Report(报表)组件页:
如果报表需要的是数据库的数据,则这个组件页中的组件使用比较频繁。
feyun发布于2007-09-1616:
42:
18
DataText:
用来显示数据库中内容比较短的信息,要用它显示相应的数据库字段信息,则要使用到DataField和DataView两个属性,用来连接数据库和字段。
DataText用来设计主从报表时,LookupDataView是相应的数据连接、LookupDisplay是显示内容、LookupField是主报表相应的数字段进行关联的字段的内容,也就是主数据字段进行连接的字段。
LookupInvalid是控制相应错误产生后的情况。
DataMemo:
在Memo的基础上支持了数据库的字段显示,使用DataField和DataView两个属性,用来连接数据库和字段。
除了输出相应的文本内容外,还可以输出RTF格式,显示RTF格式,需要设置ContainsRTF属性为True。
CalcTex:
这个组件用来统计报表字段的最大值、最小值、总和、统计值等内容直接使用,只需要通过CalcType属性来设置,CalcType属性包括了ctAverage(求平均值)、CtCount(求个数)、ctMax(求最大值)、ctMin(求最小值)、ctSum(求累加和)。
DataMirror Section:
和Section组件相似。
Region:
如果要进行报表的打印,Region组件规定了打印区域,可以设置Columns来分栏。
Band:
这个组件算是一个容器组件,包括text、Memo组件等,包括的是非数据库库信息,Band组件要放置在Region中,选择BandStyle属性后,出现如下图的属性对话框。
左边为报表中Band的列表,右面的PrintLocation包括:
BodyHeader(页眉)、GroupHeader(组眉)、RowHeader(行眉)、Detail(表体)、RowFooter(行脚)、GroupFooter(组脚)和BodyFooter(页脚),BandStyle属性可以多选。
PrintOccurrence属性包括:
First(首页打印)、NewPage(打印新一页)、NewColumn(新分栏)。
选择First(首页打印)也就是Band包括的内容只在第一页打印,选择NewPage(打印新一页),Band包括的内容必须在新的一页打印,选择NewColumn(新分栏),Band包括的内容必须在新的分栏中打印。
DesignerHide属性:
当一个报表有多个Band时,选择查找Band变得比较麻烦,设置DesignerHide属性为True时,没有选择到的Band内容被隐藏。
GroupDataView和GroupKey属性:
如果想要以相应的数据结果作为报表分组的依据,那么就必须设置这两个属性,GroupDataView是相应的数据源,GroupKey是数据源的索引,分组是靠GroupKey中的值进行分组的。
DataBand:
是直接作用于数据库,且可以在其中摆放相应数据库报表组件,这样通过它就可以让相应的报表具有数据库书库打印功能。
其中DataView属性是设置相应的数据源,GroupDataView是相应的报表中的分组数据源。
DataCycle:
与DataBand相似的地方在于循环的显示数据,DataBand是数据库内容的循环打印,而DataCycle不需要使用Region,它打印的区域为页面,每页只能打印一个组件设计好的内容。
使用DataBand是根据Region的范围来分页,而DataCycle则是每一页只现实一条信息根据数据的多少分页。
CalcOp:
该组件提供了报表相应的计算功能,具体的使用会在以后讲解。
CalcTotal:
与CalcOp结合使用来完成日常报表的统计功能。
5、Zoom(缩放)组件:
在设计报表时,放大、缩小报表页面。
6、Colors(颜色)组件:
对选择的对象快速的设置颜色。
7、Lines(线型)组件:
对于选择的线,更改其线型。
8、Fills(填充)组件:
对于正方形等图形填充样式。
9、Fonts(字体)组件:
进行字体的设置。
10、Alignment(队列)组件:
调整对齐组件和组建的层次。
feyun发布于2007-09-1616:
42:
39
隔了好长时间终于有时间继续向大家介绍RAVE了,这次主要介绍Delphi7下的Rave组件。
打开Delphi7,看到的rave页如下:
Delphi7下的Rave
包括有RvProject、RvSystem、RvNDRWriter、RvCustomConnection、RvDataSetConnection、RvTableConnection、RvQueryConnection、RvRenderPreview、RvRenderPrinter、RvRenderPDF、RvRenderHTML、RvRenderRTF、RvRenderText这几个组件。
一、RvProject组件
在使用rave报表中,这个组件是最为重要的一个,是使用频率最高的一个组件,开发人员可以通过这个报表完成报表的打印、文件的生成、输出,土过此事可以使用设计状态,也可以通过它来点用相应的报表设计器。
1、属性:
DLLFile:
发行报表时需要的dll文件,在5.0以后用户不需要单独发行相应的动态链库文件了。
Engine:
指定相应报表生成的目的地,一般的情况下,是RvSystem,也就是说它可以打印、打印预览、生成打印文件。
当然也可以选择RvNDRWriter组件,那么报表输出的结果是RTF、HTML、PDF、TXT其中的一种。
LoadDesigner:
允许用户调用报表设计器,如果它的值为true,那么最终用户就可以调用报表设计器;如果它的值为False,那么最终用户就没有权力调用报表设计器。
ProjectFile:
相应报表项目文件,指定详细目录路径。
StoreRAV:
要将报表文件嵌入到exe文件中,在这里就要填入相应的报表项目文件。
2、主要方法:
(1)SelectReport方法:
FunctionSelectReport(ReportName:
String;FullName:
Boolean):
Boolean;
ReportName是相应的报表名称,FullName则表示是否以报表的全程作为报表的名称。
(2)Execute方法:
打印选择的相应报表文件,报表时被SelectReport选择的。
RvProject1.Execute;
(3)ExecuteReport方法:
RvProject1.ExecuteReport(ReportName:
String);
ReportName是相应的报表的名称。
(4)Open方法:
RvProject1.Open;打开相应的报表以共操作。
(5)Close方法:
RvProject1.Close;关闭一个报表的操作。
feyun发布于2007-09-1616:
42:
51
二、RvSystem组件
打印或者预览报表时,进行打印参数设置的。
使用时与RvProject结合。
1、属性:
DefaultDest:
指定打印的方式。
rdPreview:
预览;
rdFile:
文件;
rdPrinter:
打印机。
RulerType:
相应的标尺单位。
rtNone:
没有标尺;
rtHorizCm:
横向标尺,单位为厘米;
rtVertCm:
纵向标尺,单位为厘米;
rtBothCm:
先是所有的标尺,单位为厘米;
rtHorizIn:
横向标尺,单位为英寸;
rtVertIn:
纵向标尺,单位为英寸;
rtBothIn:
所有标尺,单位为英寸;
SystemFiler:
报表打印文件参数的设置。
如果DefaultDest属性为rbFile,则需要设置这里的属性值。
SystemOptions:
所有报表输出设置属性。
SystemPreview:
报表预览参数的设置。
如果DefaultDest属性为rdPreview,则需要设置这里的属性值。
SystemPrinter:
报表打印参数的设置。
如果DefaultDest属性为rdPrinter,则需要设置这里的属性值。
SystemSetup:
是对是否允许打印,是否允许打印机设置等参数的设置。
TitlePreview:
更改报表预览的窗体的名称,例如可以将ReportPreview改为报表预览。
TitleSetup:
更改报表输出窗体的名称,例如可以将OutputOptions改为输出设置。
TitleStatus:
报表状态窗体名称,例如可以将ReportStatus改为报表状态。
2、主要方法:
OverridePreview方法,OverrideSetup方法,OverrideStatus方法:
这三个方法可以对报表设置、打印设置、报表预览窗体进行覆盖,在后面会介绍如何通过这几个方法是窗体为中文。
三、NDRWriter组件
使用该组件实现自定义报表预览。
四、RvDataSetConnection组件,RvTableConnection组件,RvQueryConnection组件
使用这三个组件实现数据库的连接。
五、RvRenderPDF组件,RvRenderHTML组件,RvRenderRTF组件,RvRenderText组件
报表生成相应文件的组件,可让报表生成相应的pdf、html、rtf、text文件。
但生成文件对中文不支持,会出现乱码。
feyun发布于2007-09-1616:
43:
15
前面两篇,向大家介绍了RAVE的组件,从今天开始向大家介绍如何建立报表。
首先要感谢lijack等各位朋友给我发的电子邮件,鼓励我继续写下去。
今天也查了一下RAVE一词的意思。
RAVE在辞典上的翻译为“咆哮”。
rave-up喧闹的宴会,狂欢聚会,我们经常也听到锐舞派对,也就是RAVEPARTY。
要对Rave文化追根溯源其实不太容易,并非是因为其无从追溯,恰恰相反,正因为它涵盖的面太广,根基太深,所以反而让人有些无从入手。
从远的来说,Rave与各块大陆上土著部落的祭典仪式有着相当的渊源,因为这些祭典通常也是通过音乐与紧密的鼓点而使人进入某种超验状态;从近的来说,Rave又与60年代的嬉皮文化与迷幻实验有着密不可分的关系,两代年轻人除了装扮不同,许多心理状态与行为方式其实都有值得注意的相似之处。
真正当代的将新式音乐与舞曲相结合的Rave运动起源于英国。
10多年前,Rave首先出现在曼彻斯特和伊比沙岛(英国著名度假胜地)。
1987年末及1988年初,两个并无关系的团体--Schoom和GenesisP开始在英国组织彻夜的舞会,前者是以house音乐为主,而后者以hardcore为主。
与此同时,Rave在德国登陆,在柏林等大城市很受欢迎。
很快,Rave在英德两地吸引了数以万计的青少年,更吸引了许多来自美国的DJ。
现在Rave已经是欧、美、日,甚至港台最时兴、最UNDERGROUND的一种青少年娱乐形式,Rave文化从一开始便被打上了高科技的烙印,从急速疯狂的前卫电子舞曲,新奇剌激的影像视觉,到Sharp得眼花缭乱的装束,Rave与E-Life,已经成为科技对青年文化影响的见证。
当然我也不知道为什么Nevrona公司把这个报表组件叫做rave,也许和锐舞有着一定的关系吧,就像java咖啡。
一、建立一张简单的报表
言归正传,我们开始建立一张简单的报表,打开Delphi7,新建一个工程,打开Tools下的RaveDesigner,在Rave设计器的page1中,拖放Text,我们在text属性中写入文字内容,例如,“我的第一张报表”,通过Font属性更改字体和字的大小,颜色等。
拖放Memo组件,在text属性中输入文字可以看到一个多行的文本。
拖放Bitmap组件,在FileLink属性中选取插入图片的位置,就可以看到在报表中显示了一张图片。
点击[ExecuteReport]或者F9,则查看到运行后报表。
接下来,对在可视环境中设计好的报表保存,可视化的报表就保存为*.rav文件。
那么在delphi程序中如何调用呢?
在delphi中拖放RvProject、RvSystem组件,并且把RvProject的Engine属性连接为RvSystem1。
RvProject1的ProjectFile属性,选择为我们刚才保存的.rav文件。
再在form1上放置一个Button,添加click事件,代码如下:
procedureTForm1.Button1Click(Sender:
TObject);
begin
RvProject1.Execute;//或者RvProject1.ExecuteReport('Report1');
end;
运行程序,点击按钮,就可以看到我们想要的报表了,您可能注意到,打印设置,报表预览的窗体都是英文的,如何使它显示中文我们在以后会介绍,不过我们刚才在窗体中放入了RvSystem组件,有TitlePreview、TitleSetup、TitleStatus三个属性,更改后可以看到我们窗体的标题栏显示的是您所希望显示的中文标题。
RvSystem组件有很多我们需要的属性,将SystemPrinter的Orientation属性设置为poLandScape,则报表显示为横向的。
将SystemPreview的FormStatus属性设置为wsMaximized则报表预览的窗体最大化显示。
好了,这样我们就完成了一张简单的报表。
feyun发布于2007-09-1616:
43:
28
二、利用程序设计一张报表
上面向大家介绍了建立一张简单报表的过程,下面向大家介绍rave报表代码编程实例。
窗体上放置组件:
RvSystem,Button即可。
具体代码如下:
unitUnit1;
interface
uses
Windows,Messages,SysUtils,Variants,Classes,Graphics,Controls,Forms,
Dialogs,StdCtrls,RpDefine,RpBase,RpSystem;
type
TForm1=class(TForm)
RvSystem1:
TRvSystem;
Button1:
TButton;
procedureRvSystem1Print(Sender:
TObject);
procedureButton1Click(Sender:
TObject);
private
{Privatedeclarations}
public
{Publicdeclarations}
end;
var
Form1:
TForm1;
implementation
{$R*.dfm}
procedureTForm1.RvSystem1Print(Sender:
TObject);
var
I1:
integer;
S1:
string[20];
S2:
string[20];
Bitmap:
TBitmap;
PolyLineArr:
array[1..6]ofTPoint;
begin
withSenderasTBaseReportdobegin
{打印表头和表尾}
SectionTop:
=0.75; //顶端
SetFont('黑体',26); //设置字体
Underline:
=true; //下划线
Home;
YPos:
=1.0;
FontRotation:
=20;//旋转角度
PrintCenter('我的报表',PageWidth/2);
SetFont('宋体',10);
SectionBottom:
=10.75;
PrintFooter(' 第'+IntToStr(CurrentPage)+'页',pjLeft); //页码
PrintFooter('日期:
'+DateToStr(Date)+'',pjRight); //日期
SectionBottom:
=10.5;
YPos:
=1.5;
SetFont('宋体',12);
SetTopOfPage;
Home;
{打印列标题}
ClearTabs;
SetPen(clBlack,psSolid,1,pmCopy);{设置画笔为一个点宽}
SetTab(0.5,pjCenter,3.5,0,