本章主要内容:Rave Delphi组件Rave Reports组件之间的关系Rave报表应用程序结构Rave报表设计器的使用如何组织数据库数据生成报表,并打印输出9.1.1 什么是什么是RaveRAVE(Report Authoring Visual Environment)是一个可视化的报表设计器它本身是一个第三方报表软件,目前的版本是Rave5.0,由于其简单、易用和强大的功能被Delphi引入,并集成在Delphi7中图9-1 Delphi7中的Rave Reports组件 RAVE报表处理功能包括:翻转文字注释全图示显示版面调整页面精确定位打印配置字体控制打印预览可重利用的报表内容以PDF、HTML、RTF和text文件格式输出报表9.1.2 Rave报表设计器简介报表设计器简介Rave有自己的可视报表设计器,以自己的文件格式保存报表,扩展名为(.RAV)启动报表生成器的方式有两种:()通过Delphi的工具菜单启动,选择【Tools】、【Rave Designer】通过RvProject组件启动必须先在窗体中添加RvProject组件,然后双击该组件以启动Rave报表设计器。
Rave报表设计器的集成开发环境的界面包括标题栏、菜单栏、快捷工具栏、组件面板、属性面板和一些窗口Rave5.0设计界面如下图所示9.2.1 Rave Reports组件概述组件概述在Delphi中,应用程序可以通过一组Rave Reports组件操纵报表,这些组件位于RAVE组件面板上,可以分为4类:引擎类组件(engine)表现类组件(render)数据连接类组件(data connection)Rave项目组件(Rave project)各类组件之间的关系如图9-3所示9.2.2 TRvProject组件组件 1.TRvProject组件的属性(1)DLLFile属性如果LoadDesigner属性被设为True,这个属性用于设置报表设计器的动态链接库的文件名2)Engine属性当使用TrvProject组件打印报表时,指定使用的报表引擎,默认情况下是RvSystem3)ProjectFile属性指定报表项目文件4)StoreRAV属性如果要将报表项目文件内嵌到应用程序的EXE文件中,则本属性用于设置报表项目文件名5)LoadDesigner属性表示是否允许最终用户调用报表设计器。
2.TRvProject组件的方法(1)SelectReport方法 SeleetReport方法用于选择报表例:procedure TFormMain.btnExecuteClick(Sender:TObject);begin RvProject.Open;/打开报表项目 RvProject.SelectReport(Report1,False);/通过报表名称选择特定的报表 RvProject.SetParam(Name,Leonel);/给特定参数设定值 RvProject.Execute;/执行报表 RvProject.Close;/关闭报表项目 end;(2)GetReportList方法GetReportList方法同来获取报表列表例:VarTempReportList:TstringList;BeginTempReportList:=TstringList.Create;RvProject1.GetReportList(TempReportList,False);End;(3)Execute方法这个方法用于打印当前选定的Rave报表例:RvProject1.Execute;就可以完成相应的打印工作,而这些具体的打印工作都通过Rave内部的操作进行处理。
4)ExecuteReport方法这个方法用于打印指定名称的Rave报表5)Close方法打印完成相应的报表后,需要调用Close方法关闭相应的报表项目文件6)Open方法可以使用Open方法打开一个关闭的报表项目文件,以供打印和修改9.2.3 数据连接组件数据连接组件Rave数据来源于应用程序,是通过数据连接组件与数据集组件相连来组织数据的数据连接组件包括:TrvCustomConnectionTrvDataSetConnectionTRvQueryConnectionTrvTableConnection DataSet属性是它们共同的属性,用于指定连接的数据集9.2.4 引擎类组件引擎类组件引擎类组件与TrvProject组件相互配合使用,在其中不仅可以设置相应的打印参数,而且可以设置最终报表的打印机配置、纸张大小及系统的设置1.TRvSystem组件TRvSystem可以发送报表到打印机或预览屏幕,并同时显示它们的设置及状态屏幕1)TRvSystem组件的属性:DefaultDest属性SystemFiler属性SystemOptions属性SystemPreview属性SystemPrinter属性SystemSetups属性TitlePreview属性TitleSetup属性TitleStatus属性(2)TRvSystem组件的事件OverridePreview,OverrideSetup 和 OverrideStatus允许程序员替换Rave提供的缺省的屏幕。
2.TRvNDRWriter组件TRvNDRWriter组件和TRvRenderPrinter及TrvRenderPreview配合使用,用特定的二进制格式存储报表直到它被打印或预览使用TRvNDRWriter组件的报表处理过程如图9-5所示1)TRvNDRWriter组件的属性:AccuracyMethod属性StreamMode属性 FileName属性(2)TRvNDRWriter组件的方法Start方法Finish方法Execute方法9.2.5 表现类组件表现类组件1.TrvRenderPreview组件TRvRenderPreview组件接收TRvNDRWriter组件生成的文件并发送到屏幕打印1)TrvRenderPreview属性ScrollBox属性FileName和StreamMode属性GridHoriz和GridVert属性RulerType属性MarginMethod和MarginPercent属性ShadowDepth属性Monochrome属性NextPage和PrevPage属性ZoomInc属性(2)TRvRenderPreview的事件OnPageChangeOnZoomChange2.TrvRenderPrinter组件TRvRenderPrinter组件接收由TRvNDRWriter组件产生的文件并发送到当前打印机。
3.TRvRenderPDF组件TRvRenderPDF允许从报表中生成PDF文档设置EmbedFonts属性为True可以让字体嵌入到PDF文档中PDF中图像的质量可以用一个使用百分比的ImageQuality属性来设置设置UseCompression为True可以生成压缩的PDF文档4.TRvRenderHTML组件TRvRenderHTML转换一个NDR流或文件为HTML网页支持文本、图像、线条和方框对象输出结果为HTML4.0格式且匹配打印输出5.TRvRenderRTF组件TRvRenderRTF转换一个NDR流或文件为RTF格式RTF文档的输出结果匹配报表的打印格式文档中的元素被独立的包含在“frames”中支持精确的页面定位6.TrvRenderText组件TRvRenderText转换一个NDR流或文件为文本格式,在这个报表中只支持文本项,其他的对象如图形或线条将被忽略9.2.6 一个简单的报表应用程序一个简单的报表应用程序在一个简单的报表应用程序中通常使用Rave数据连接组件提供数据,使用RvProject组件执行报表,另外还要创建一个报表项目文件(.rav)程序的基本结构如图9-6所示:图9-6 数据库报表应用程序基本结构【例9-1】编写一个简单的报表应用程序,打印数据库dbdemos.mdb的表Employee中的信息。
实现步骤】(1)新建应用程序(2)定制窗体图9-7 设计窗体界面 组件名属 性属 性 值说 明ADOConnection1ConnectionString使用ConnectionString设置对话框设置该属性,连接到数据库dbdemos.mdbADOTable1ConnectionADOConnection1指定使用的数据连接组件TableNameEmployee指定打开的数据表名ActiveTrue打开数据集RvProject1projectfileC:Samples9-1myrave.rav指定报表文件路径RvDataConnection1datasetADOTable1与ADOTable1连接Button1Caption执行报表表9-3 各组件属性设置(3)设计Rave报表 图9-7 数据对象类型选择对话框图9-8 数据连接选择对话框图9-9 数据视图图9-10 数据视图选择对话框图9-11 选择报表中要使用的字段 图9-12 报表布局对话框 图9-13 设置报表报头、报表栏目 图9-14 向导创建的报表(4)代码编写(5)运行程序图9-15 打印输入选项对话框图9-16 报表预览 9.3.1 Rave报表组件报表组件1.Drawing组件面板Drawing组件面板提供了一些用来设计线段、矩形、圆形等图形的组件,使用它我们可以绘制非灵活的各种图形,通过属性面板可以调节相应组件的属性,也可以使用一些组件面板中的组件来进行调节,比如调节它们的颜色可以使用Color组件面板,调节线宽、线型可以使用Lines组件面板。
图9-20 Fill组件面板 2.Bar code组件Bar code组件是可以进行一些条形码设计的组件图9-21 Bar code组件面板 3.Standard组件面板图9-22 Sandard组件面板(1)Text组件专门用于在报表中输出相应的本文内容的一个组件2)Memo组件与Delphi中的Memo组件非常的相似,可以用于输出多行文本3)Section组件这个组件用于包含其他组件的,可以用它来进行分组4)Bitmap组件用于在报表中显示相应的位图文件5)MetaFile组件MetaFile组件与Bitmap组件几乎一致,它除了可以处理位图文件以外,还可以处理emf和wmf文件6)FontMaster组件FontMaster组件是一个字体组件,在报表中使用它规定相应的字体组图9-23 用对象树选择FontMaster组件a)设置FontMirror属性前 b)设置FontMirror属性后 图9-24通过FontMirror属性建立字体组(7)PageNumInit组件PageNumInit组件就是将相应的页码初始的号码进行处理,如图所示:图9-25用InitValue属性初始化页号 4.Report组件面板Report组件面板主要用于建立数据报表。
图9-25 Report组件面板(1)DataText组件DataText组件可以将数据库中的字段信息显示出来,当然与Text一样它只能显示单行信息2)DataMemo组件DataMemo组件在Memo的基础上支持了数据库的字段显示,用于显示需要多行才能显示的字段内容3)CalcText组件CalcText组件可以计算显示一个报表字段的最大值、最小值、总和、计数值、平均值4)DataMirrorSection组件与Section组件的概念非常相似,它也是一个用于将一系列组件进行分组的组件5)Region组件Region组件用于规定相应的报表打印的区域,报表中所有需要打印的内容都必须放在Region中6)Band组件Band组件是一个包容组件,可以包容一些报表组件,比如:Text、DataText组件等图9-26 报表的带区 图9-27 BandStyle编辑器(7)DataBand组件DataBand组件与Band组件都是供打印的一个报表范围,而它们的不同在于DataBand可以直接作用于数据库,而且也可以在其中摆放相应的数据库报表组件,这样通过它就可以让相应的报表具有数据库数据的打印能力。
8)DataCycle组件如果单从使用功能上来讲,DataCycle和DataBand组件之间是比较相似的DataBand提供一个循环的条件来让数据库中的记录循环使用,但DataBand也有缺陷,如我们在平时的设计过程中,经常使用的简历打印(卡片式打印),DataBand就难于胜任图9-28 简历格式5.报表缩放组件(Zoom)图9-29Zoom面板 6.Fonts面板Fonts面板包含用于设置文本效果的快捷工具图9-30Fonts面板7.Alignment面板Alignment面板包含用于调整报表组件布局的快捷工具图9-31Alignment面板9.3.2 自定义报表设计自定义报表设计【例9-2】在【例9-1】的基础上建立一个自定义报表实现步骤】(1)建立新报表项目(2)建立数据源(3)新建打印区域(Region)(4)建立报表标题带区(5)建立报表头带区(6)建立报表数据带区(7)放置数据显示对象图9-32设计好的报表页面 图9-33预览报表(8)预览报表9.4.1 打印日期和页码打印日期和页码Rave中提供了许多Report Variable(报表变量)供程序员在设计报表时使用,包括:日期、时间、页码、打印机信息等。
以【例9-2】中我们设计的自定义报表为例,下面我们为该报表加入打印日期和页码信息1.打印日期在报表的底左侧部添加一个DataText组件用于显示报表打印日期,设置FontMirror属性为FontMaster1,然后点击属面板上DataField属性右侧的按钮,打开Data Text Editor对话框从Report Variables列表中选择DataLong(长日期格式),再点击“Insert Report Var”按钮添加报表变量到DataText编辑框中,点击“OK”按钮退出对话框注意,这里不需要设置DataView属性图9-34选择日期格式2.打印页码在报表的底部右侧添加一个DataText组件用于显示报表打印日期,设置FontMirror属性为FontMaster1,然后点击属面板上DataField属性右侧的按钮,打开Data Text Editor对话框从Report Variables列表中选择CurrentPage(当前页码),再点击“Insert Report Var”按钮添加报表变量到DataText编辑框中,点击“OK”按钮退出对话框重复以上操作,选择TotalPages(总页数)。
加入三个Text组件,然后作适当调整,使得打印结果如下图:图9-35设计时的页脚图9-36预览时的页脚9.4.2 参数参数(Parameters)的使用的使用参数可以存在于报表项目,报表,报表页面这三个地方,通过报表项目的对象树来选择报表项目和特定的报表对象,然后通过所选对象的parameters属性进行设定参数可通过DataText部件来输出图9-37使用参数输出计算值图9-37使用参数输出的预览效果9.4.3 全局页面全局页面 如果有些报表部分在两个或更多报表中是相同的,就可以把这些相同部分放置到全局页面中以便所有报表共享比如公司名称、日期和时间、当前页号和总页数等首先,加一个全局页面到报表项目中在这个页面中,加一个section组件Sections组件用于组件的逻辑分组在section组件中加入我们想要共享的东西在特定报表的特定页,增加另一个section组件设定该组件的Mirror属性为前面那个全局页面中的Section组件1.掌握RAVE报表设计器的使用;2.掌握常规报表的设计;3.了解Delphi中Rave组件,以及各组件之间的关系;4.掌握Rave报表应用程序的编写;5.以班级的期末成绩表为例,编写一个报表应用程序打印成绩,要求统计总分和平均分,并按总分排名次。