1、delphi Rave报表打开Delphi,可以控件面板看到如图:Delphi7下的Rave打开Tools中的Rave,看到的报表设计界面如图:Rave5的报表设计界面一、Rave5的报表设计界面首先,介绍一下Rave的报表设计器的各组件和相关的属性。Rave Designer集成开发环境的界面包括标题栏、菜单栏、快捷工具栏、组件栏和一些窗口: 标题栏显示了当前的工程名,位于最上部。 菜单栏,一些功能可通过菜单栏的菜单命令实现。快捷工具栏为位图按钮,一些常用的菜单命令用这些按钮实现。报表组件栏分页显示各种组件(Standard、Report、Zoom、Colors、Lines、Fills、Fo
2、nts、Drawing、Bar Code、Alignment),在利用Rave开发应用程序的过程中,正确、合理地使用组件非常重要。用它可设计基于数据库和文本的复杂报表。 左边半部分像Delphi的object inspector工具,可设置报表元件的属性,它的下部分有对应属性的简短提示。 正中部分为设计区域,开发者可在上面添加各种设计元件,如Drawing的横线、直线、矩形、椭圆,Barcode中各种常用的条码,Standand 中的Text、Memo、Section、Bitmap、Metafile等等。 右边为设计导航区,可查看报表的各元件的更多信息,如报表库和数据显示目录,设计时也可快速定
3、位元件位置。二、Rave的报表设计器,组件栏的各组件:、Drawing (绘图) 组件页:Line component :画线组件,所画的线较灵活 。可以看到其属性入图,有颜色、线宽、线行等属性,设计者根据需要更改属性。改变线的长短位置,选中线条后,选择一个端点则光标会变为十子型,拖动即可。Hline component :画水平线组件 。 Vline component :画垂直线组件 。Rectangle component :画长方形组件,可以使用fill组件填充。Square component :画正方形组件,可以使用fill组件填充。Ellipse component :画椭圆组件
4、,可以使用fill组件填充。Circle component :画圆形组件,可以使用fill组件填充。、Bar Code(条形码)组件页:PostNetBarCode :打印邮件标签上包括 POSTNET 条码 。 I2of5BarCode :打印 Interleaved 2 of 5条码。Code39BarCode :打印standard and extended Code 39条码。 Code128BarCode :打印 A, B and C Code 128条码。 UPCBarCode :打印 UPC-12条码。 EANBarCode :打印 EAN-13条码。、Standard(标准)
5、组件页:Text :这个组件是在报表上固定的文字,例如报表的标题等,可以设置字体的大小、颜色,Rotation属性可以使要显示的字为任意角度。 Memo :Memo组件提供了多行文本的文字,与delphi中的相似,属性很多,但我们应用的不多,可以使用text属性添加文本。Section : 这个组件是其他组件的容器,将其他组件固定在此组件中。Bitmap : 这个组件是在报表中放置bmp文件 (*.bmp), FileLink属性连接bmp文件。MetaFile : 这个组件在报表中放置meta文件 (*.wmf),FileLink属性连接meta文件。FontMaster : 这个组件控制报
6、表中的任何的text字的属性。在要使用该字体的text组件或memo组件的fontmirrot属性选择FontMaster。PageNumInit :报表显示页码的初始页码。如图的InitValue的值为5,则报表的初始页为5,页码从开始。、Report(报表)组件页:如果报表需要的是数据库的数据,则这个组件页中的组件使用比较频繁。 DataText:用来显示数据库中内容比较短的信息,要用它显示相应的数据库字段信息,则要使用到DataField 和DataView两个属性,用来连接数据库和字段。DataText用来设计主从报表时,LookupDataView是相应的数据连接、LookupDis
7、play是显示内容、LookupField是主报表相应的数字段进行关联的字段的内容,也就是主数据字段进行连接的字段。LookupInvalid是控制相应错误产生后的情况。DataMemo:在Memo的基础上支持了数据库的字段显示, 使用DataField 和DataView两个属性,用来连接数据库和字段。除了输出相应的文本内容外,还可以输出RTF格式,显示RTF格式,需要设置ContainsRTF属性为True。CalcTex:这个组件用来统计报表字段的最大值、最小值、总和、统计值等内容直接使用,只需要通过CalcType属性来设置,CalcType属性包括了ctAverage(求平均值)、C
8、tCount(求个数)、ctMax(求最大值)、ctMin(求最小值)、ctSum(求累加和)。DataMirrorSection:和Section组件相似。Region:如果要进行报表的打印,Region组件规定了打印区域,可以设置Columns来分栏。Band:这个组件算是一个容器组件,包括text、Memo组件等,包括的是非数据库库信息,Band组件要放置在Region中,选择BandStyle属性后,出现如下图的属性对话框。左边为报表中Band的列表,右面的PrintLocation包括:Body Header(页眉)、Group Header(组眉)、 Row Header(行眉)、
9、Detail(表体)、Row Footer(行脚)、Group Footer(组脚) 和Body Footer(页脚),BandStyle属性可以多选。Print Occurrence属性包括: First(首页打印)、New Page(打印新一页)、New Column(新分栏)。选择First(首页打印)也就是Band包括的内容只在第一页打印,选择New Page(打印新一页),Band包括的内容必须在新的一页打印,选择New Column(新分栏),Band包括的内容必须在新的分栏中打印。DesignerHide属性:当一个报表有多个Band时,选择查找Band变得比较麻烦,设置Desi
10、gnerHide属性为True时,没有选择到的Band内容被隐藏。GroupDataView 和GroupKey属性:如果想要以相应的数据结果作为报表分组的依据,那么就必须设置这两个属性,GroupDataView是相应的数据源,GroupKey是数据源的索引,分组是靠GroupKey中的值进行分组的。DataBand:是直接作用于数据库,且可以在其中摆放相应数据库报表组件,这样通过它就可以让相应的报表具有数据库书库打印功能。其中DataView属性是设置相应的数据源,GroupDataView是相应的报表中的分组数据源。DataCycle:与DataBand相似的地方在于循环的显示数据,Da
11、taBand是数据库内容的循环打印,而DataCycle不需要使用Region,它打印的区域为页面,每页只能打印一个组件设计好的内容。使用DataBand是根据Region的范围来分页,而DataCycle则是每一页只现实一条信息根据数据的多少分页。CalcOp:该组件提供了报表相应的计算功能,具体的使用会在以后讲解。CalcTotal:与CalcOp结合使用来完成日常报表的统计功能。、Zoom(缩放)组件:在设计报表时,放大、缩小报表页面。、Colors(颜色)组件:对选择的对象快速的设置颜色。、Lines(线型)组件:对于选择的线,更改其线型。、Fills (填充)组件:对于正方形等图形填
12、充样式。、Fonts(字体)组件:进行字体的设置。、Alignment(队列)组件:调整对齐组件和组建的层次。下面介绍Delphi7下的Rave组件。打开Delphi7,看到的rave页如下: Delphi7下的Rave包括有RvProject、RvSystem、RvNDRWriter、RvCustomConnection、RvDataSetConnection、RvTableConnection、RvQueryConnection、RvRenderPreview、RvRenderPrinter、RvRenderPDF、RvRenderHTML、RvRenderRTF、RvRenderText
13、这几个组件。一、RvProject组件在使用rave报表中,这个组件是最为重要的一个,是使用频率最高的一个组件,开发人员可以通过这个报表完成报表的打印、文件的生成、输出,土过此事可以使用设计状态,也可以通过它来点用相应的报表设计器。、属性:DLLFile:发行报表时需要的dll文件,在5.0以后用户不需要单独发行相应的动态链库文件了。Engine: 指定相应报表生成的目的地,一般的情况下,是RvSystem,也就是说它可以打印、打印预览、生成打印文件。当然也可以选择RvNDRWriter组件,那么报表输出的结果是RTF、HTML、PDF、TXT其中的一种。LoadDesigner: 允许用户调
14、用报表设计器,如果它的值为true,那么最终用户就可以调用报表设计器;如果它的值为False,那么最终用户就没有权力调用报表设计器。ProjectFile:相应报表项目文件,指定详细目录路径。StoreRAV:要将报表文件嵌入到exe文件中,在这里就要填入相应的报表项目文件。、主要方法:()SelectReport方法:Function SelectReport(ReportName:String; FullName:Boolean):Boolean;ReportName是相应的报表名称,FullName则表示是否以报表的全程作为报表的名称。()Execute方法:打印选择的相应报表文件,报表
15、时被SelectReport选择的。RvProject1.Execute;()ExecuteReport方法:RvProject1.ExecuteReport(ReportName:String);ReportName是相应的报表的名称。()Open方法:RvProject1.Open; 打开相应的报表以共操作。()Close方法:RvProject1.Close; 关闭一个报表的操作。二、RvSystem组件打印或者预览报表时,进行打印参数设置的。使用时与RvProject结合。、属性:DefaultDest:指定打印的方式。rdPreview:预览;rdFile:文件;rdPrinter:
16、打印机。RulerType:相应的标尺单位。rtNone:没有标尺;rtHorizCm:横向标尺,单位为厘米;rtVertCm:纵向标尺,单位为厘米;rtBothCm:先是所有的标尺,单位为厘米;rtHorizIn: 横向标尺,单位为英寸;rtVertIn: 纵向标尺,单位为英寸;rtBothIn:所有标尺,单位为英寸;SystemFiler:报表打印文件参数的设置。如果DefaultDest属性为rbFile,则需要设置这里的属性值。SystemOptions:所有报表输出设置属性。SystemPreview:报表预览参数的设置。如果DefaultDest属性为rdPreview,则需要设置
17、这里的属性值。SystemPrinter:报表打印参数的设置。如果DefaultDest属性为rdPrinter ,则需要设置这里的属性值。SystemSetup:是对是否允许打印,是否允许打印机设置等参数的设置。TitlePreview:更改报表预览的窗体的名称,例如可以将Report Preview改为报表预览。TitleSetup:更改报表输出窗体的名称,例如可以将Output Options改为输出设置。TitleStatus:报表状态窗体名称,例如可以将Report Status改为报表状态。、主要方法:OverridePreview方法,OverrideSetup方法,Overri
18、deStatus方法:这三个方法可以对报表设置、打印设置、报表预览窗体进行覆盖,在后面会介绍如何通过这几个方法是窗体为中文。三、NDRWriter组件使用该组件实现自定义报表预览。四、RvDataSetConnection组件,RvTableConnection组件, RvQueryConnection组件使用这三个组件实现数据库的连接。五、RvRenderPDF组件, RvRenderHTML组件, RvRenderRTF组件,RvRenderText组件报表生成相应文件的组件,可让报表生成相应的pdf、html、rtf、text文件。但生成文件对中文不支持,会出现乱码。下面介绍如何建立报表
19、。一、建立一张简单的报表言归正传,我们开始建立一张简单的报表,打开Delphi7, 新建一个工程,打开Tools下的Rave Designer,在Rave 设计器的page1中,拖放Text,我们在text属性中写入文字内容,例如,“我的第一张报表” ,通过Font属性更改字体和字的大小,颜色等。拖放Memo组件,在text属性中输入文字可以看到一个多行的文本。拖放Bitmap组件,在FileLink属性中选取插入图片的位置,就可以看到在报表中显示了一张图片。点击Execute Report或者F9,则查看到运行后报表。 接下来,对在可视环境中设计好的报表保存,可视化的报表就保存为*.rav文
20、件。那么在delphi程序中如何调用呢?在delphi中拖放RvProject、RvSystem组件,并且把RvProject的Engine属性连接为RvSystem1。RvProject1的ProjectFile属性,选择为我们刚才保存的.rav文件。再在form1上放置一个Button,添加click 事件,代码如下:procedure TForm1.Button1Click(Sender: TObject);beginRvProject1.Execute ; /或者 RvProject1.ExecuteReport(Report1);end;运行程序,点击按钮,就可以看到我们想要的报表了
21、,您可能注意到,打印设置,报表预览的窗体都是英文的,如何使它显示中文我们在以后会介绍,不过我们刚才在窗体中放入了RvSystem组件,有TitlePreview、TitleSetup、TitleStatus三个属性,更改后可以看到我们窗体的标题栏显示的是您所希望显示的中文标题。RvSystem组件有很多我们需要的属性,将SystemPrinter的Orientation属性设置为poLandScape,则报表显示为横向的。将SystemPreview 的FormStatus属性设置为wsMaximized则报表预览的窗体最大化显示。好了,这样我们就完成了一张简单的报表。二、利用程序设计一张报表
22、上面向大家介绍了建立一张简单报表的过程,下面向大家介绍rave报表代码编程实例。窗体上放置组件:RvSystem, Button即可。具体代码如下:unit Unit1;interfaceusesWindows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,Dialogs, StdCtrls, RpDefine, RpBase, RpSystem;typeTForm1 = class(TForm)RvSystem1: TRvSystem;Button1: TButton;procedure RvSystem1
23、Print(Sender: TObject);procedure Button1Click(Sender: TObject);private Private declarations public Public declarations end;varForm1: TForm1;implementation$R *.dfmprocedure TForm1.RvSystem1Print(Sender: TObject);varI1: integer;S1: string20;S2: string20;Bitmap: TBitmap;PolyLineArr: array1.6 of TPoint;
24、beginwith Sender as TBaseReport do begin 打印表头和表尾 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(日期: +DateToS
25、tr(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,BOXLINEALL,0);SetTab(NA,pjCenter,1.0,0,BOXLINEALL,0);SetTab(NA,pjCenter,1.5,0,BOXLINEALL,0);SetTab(NA,pjCenter,1.5,0,BOXLIN
26、EALL,0);Bold := true;Tab(-2,NA,-2,-2,NA); 画出具有粗边框的表格 Print(Name);Tab(NA,NA,-2,-2,NA);Print(Number);Tab(NA,NA,-2,-2,NA);Print(Amount 1);Tab(NA,-2,-2,-2,NA);Println(Amount 2);Bold := false; 打印具有边框的数据 ClearTabs;SetTab(0.5,pjLeft,3.5,2,BOXLINEALL,0);SetTab(NA,pjCenter,1.0,2,BOXLINEALL,0);SetTab(NA,pjRig
27、ht,1.5,2,BOXLINEALL,10);SetTab(NA,pjRight,1.5,2,BOXLINEALL,0);for I1 := 1 to 10 do beginStr(I1 * 1.23:2:2,S1);Str(I1 * 98.76:2:2,S2);Print(#9LastName + IntToStr(I1) + , );SetFont(Times New Roman,8);Print(FirstName M.);SetFont(Times New Roman,12);Println(#9 + IntToStr(I1) + #9$ + S1 + #9$ + S2);end;
28、for 打印具有阴影的数据 ClearTabs;SetTab(0.5,pjLeft,3.5,2,BOXLINENONE,0);SetTab(NA,pjCenter,1.0,2,BOXLINENONE,0);SetTab(NA,pjRight,1.5,2,BOXLINENONE,0);SetTab(NA,pjRight,1.5,2,BOXLINENONE,0);for I1 := 11 to 20 do beginIf Odd(I1) then beginTabShade := 0;end else beginTabShade := 15;end; else Str(I1 * 1.23:2:2,
29、S1);Str(I1 * 98.76:2:2,S2);Print(#9LastName + IntToStr(I1) + , );SetFont(Times New Roman,8);Print(FirstName M.);SetFont(Times New Roman,12);Println(#9 + IntToStr(I1) + #9$ + S1 + #9$ + S2);end; for ClearTabs; 分栏报表 ClearTabs;SetTopOfPage;SectionBottom := 8.0;Home;SetFont(宋体,12);Bold := true;Underline
30、 := true;Print( 分栏报表 (LinesLeft/ColumnLinesLeft/LineNum/ColumnNum));SetTopOfPage; Set top of page to current YPos Bold := false;Underline := false;Italic := false;Home; Goto home position SetColumns(4,0.5); Create 4 columns with 0.5 between each while ColumnLinesLeft 0 do beginPrintln(IntToStr(LinesLeft) + / + IntToStr(ColumnLinesLeft) + / +IntToStr(LineNum) + /