您好,欢迎访问三七文档
当前位置:首页 > 办公文档 > 理论文章 > 深入QuickReport图文教程
1深入QuickReport(一)作者:董维春(本文已在《CSDN开发高手》04年第一、二、三期上发表,应广大网友的要求,经编辑同意,发表在CSDN作者本人文档中,略有修改,但仅即于此,未经CSDN或作者本人同意任何个人与网站不得转载、摘抄,否则任何涉及到版权的行为后果自负)报表是数据库应用程序的基本组成部分之一,完整的数据库应用程序总要提供报表功能。与传统的数据库应用程序设计工具相比,C++Builder中提供了QuickReport组件,使C++Builder的数据库功能得到了极大的丰富。QuickReport是挪威QusoftAS公司专门为C++Builder设计的用于报表的一组控件,在C++Builder上我们使用的QuickReport与专业版的QuickReport相比,在功能上还有很大的差距,但对于我们来说只要充分利用好她,就可以非常快捷的设计出功能强大、模式多样的数据报表,最重要的是她不需要我们花额外的钱去购买。其实QuickReport并不难,但介绍的这方面的内容实在太少,并且她的帮助文档写得也不太好,让那些想学习QuickReport的C++Builder爱好者找不到一个正确的、合适的方法。如果你想了解她、使用她,那好吧,让我来帮你认识这个妖女吧,如果此文对你能有所帮助,那是我最大的快乐!第一部分:QuickReport基本知识BCB引进的Qusoft公司的报表组件系列,它包括多个组件。首先有必要先简单的了解一下这二十三个组件的基本位置与功能。一、组件功能简介2上面的两个图是QuickReport组件页的中所有组件,在BCB6中提供给我们使用的不会少于上面的23个的。下表是按上图中组件的位置先后,对各控件的使用功能逐一做了简单的介绍:1)QuickRep带有坐标,作为其他报表控件(如TQRBand)的容器,通过它的Band属性可以自动添加各种类型的TQRBand重要属性(Properties)使用说明DataSet连结数据来源,一般是ADO/BDE连接组件的名字Page纸张的设置,可展开BottomMargin10.0mm报表下边界尺寸Columns1报表分栏数,默认为1栏ColumnSpace0.0mm报表栏与栏间隔尺寸,Columns值大于1时有效LeftMargin10.0mm报表左边界尺寸Length210.0mm报表长度尺寸,与PaperSize设置相关OrientationpoPortraitpoLandscape报表方向打印方向,有下面两个值:直印poPortrait、横印poLandscapePaperSizeA4报表打印纸张大小RightMargin10.0mm报表右边界尺寸Rulertrue报表标尺显示TopMargin10.0mm报表上边界尺寸Width297.0mm报表宽度尺寸,与PaperSize设置相关PrinterSettingCopies1报表复制份数Duplexfalse报表双重打印FirstPage0报表打印起始页LastPage0报表打印终止页OutPutBinAuto报表输出种类ReportTitle报表预览打印标题Unitsmm报表设计阶段显示标尺单位2)QRSubDetail建立一个主/明细(master/detail)报表,连接明细文件的组件3)QRStringsBand可建立一读取TStrings中项次值的组件。在这个组件里有一个Items属性,若Items一个值(一行空、一回车行)都没有,那他上面的组件将不会起作用。当StringListEditor中有几行,该组件上的内容就重复几次。若只有一行内容时,她与一个DetailBand是一样的;而多行时,也是差不多的,即先重复该区段内的可视组件3几次(几行就几次),然后下一个再重复。比如三行,那就是第一个数据来三行,然后第二个数据来三行,再然后,直到最后4)QRBand用来确定在报表的不同位置应该显示什么内容,它上面可以放控件5)QRChildBand在报表中基础子项条列组件。他有一个ParentBand属性,你必须把他与其它band连接起来,只有这样在她里面布置的组件才有效。说直接就是已经有了一个Band而你还需要一个这样的组件,那就用她吧6)QRGroup在报表中对资料做逻辑上分组的组件。当你连接了几个datasets到报表时可以通过Groups成组的对dataset进行操作7)QRLabel打印静态的文本(即不是根据数据库值来改变的),作用象Tlabel。Caption的内容就打印出来的内容;AutoStretch是布尔型变量,当标签标题在设定范围内不能打印时,该属性将起作用,若为true,报表将继续打印没有打印完的文本,其它需要打印的文本将依次向后移动,反之,则超出部分不被打印8)QRDBText在报表中具有显示连结资料来源的文字功能的组件9)QRExpr在报表中具有显示陈述句或计算表示式值的组件10)QRSysData在报表中具有显示系统信息的组件11)QRMemo在报表中显示备注文字的组件12)QRExprMemo在报表中是TQRExpr和TQRMemo的混合组件13)QRRichText在报表中具有显示区域文字功能的组件14)QRDBRichText在报表具有显示连结资料来源的区域文字功能的组件15)QRShape在报表中处理几何图形的组件,如方形、圆角方形、椭圆16)QRImage在报表中显示静态的图片,包括(BMP,WMF,ICON)17)QRDBImage在报表中显示从数据库接收的图片18)QRCompositeReport在报表中连结有关与无关的报表组件,用于创建混合报表的组件,可以把两个或两个以上的报表连接在一起,组成一个报表19)QRPreview在执行阶段建立自订预览报表组件20)QRTextFilter将报表内容输出于ASCIItext文件21)QRCSVFilter将报表内容输出于CSV文件22)QRHTMLFilter将报表内容输出于HTML文件23)QRChart可以在报表上应用的图表工具二、组件关系表4下图说明了与QuickReport相关组件之间的连接与关系:┌ADOTable=|┌QRChilderBand┐DataBase=ADO=│|=====QuickRep=====├QRBand│===可视化组件└ADOQuery=|└QRStringBand┘数据库ADO引擎报表容器组件Band区段(容器)可视化控件(显示)注意:可视化组件必须布置在相应的TQRBand区段上,否则将得不到要显示的内容。BDE引擎与这个差不多,他与ADO只是与库联接方式不一样,对QuickReport没有什么影响。有时有些朋友不小心把可视化组件放在窗体上了,而没有直接放在TQuickRep组件中的各Band区段上,当把这些组件移到想要放置的区段时,发现这些组件不能用,所以你要切记:一定要把组件放在固定的区段上,并且在区段之间也是不能移动的。我们从ObjectTreeView中可以看到这些组件与TQuickRep是同一层,当然他不可能为TQuickRep工作了,只有他成为TQuickRep中的某一个区段(某个Band)的下一层时,才能正常工作。并且一定要放在一个区段中,不要误认为放在TQuickRep上就行,如果你直接放在TQuickRep上,你的报表中将得不到什么三、最大容器TQuickRepQuickReport中组织层次是特别严格的,TQuickRep是报表组件中必须有的,并且所有Band组件都必须放在她的上面,如果说每个Band区段都是一个小容器的话,那她就是一个最大的容器。想用好QuickReport,TQuickRep绝对不能只看作是一个类似Form的容器,如何用好她对我们用好QuickReport会起到关键性作用。1)主要属性:DataSet是TDataSet数据集类型变量,用来设置报表使用的数据集组件对象,在主/明细报表中是主报表的数据集。若我们的报表要用到数据库,她必须指定数据库连接工具的名称,否则你的程序将看不到数据库中的数据。当然,在5数据库的连接组件中也一定要把Active设为true,让不你只能在程序运行中动态的把数据库打开,而在程序设计阶段将看不到什么RecordCount是数据集组件对象中记录的数量;RecordNumber是当前正在打印/显示的记录的索引(第一条记录的索引是0);RecordCount、RecordNumber两个属性只有打开数据集对象之后,它们才可以访问。若报表组件成功地从数据集组件对象中提取数据,并生成报表,则Available的属性值为true。State属性是报表状态信息,它是枚举型变量,可以有以下的取值:qrAvailable:报表资源已准备好,可以预览或打印;qrPrepare:正在生成报表;qrPreview:正在预览报表;qrPrint:正在打印报表;qrEdit:正在编辑报表。Description是TStrings类型属性,它可以用来保存程序员对报表的简单描述。主要是起提示作用。Page属性是TQuickRep组件中最重要属性,它是TQRPage类型变量,用来设置报表的页面属性。报表组件为她提供了特殊的编辑器,使用组件的快捷菜单Reportsettings就可以打开Page的属性编辑器窗口。在报表页面属性对话框上可以设置页面的尺寸、边框、分栏、区段等等页面的属性。当然我们也可以在对象查看器中点击Page前面的“+”展开它的所有属性,并分别设置这些属性。其中PagerSize是设置纸张大小的,他与Width、Length是密切相关的,改变PagerSize的值,后面两个的值也会做出相应的变化,同样,改变后两个属性时,PagerSize的值也会做出相应的改变。我们可以通过改变Orientation的值来改变打印的方向。Margins指的是报表显示内容在PagerSize中的位置。Columns属性我们一定注意,它是分栏设置,与WORD里的分栏设置是一样的,无论出于何种目的,有时我们要把打印内容分成两栏(或多栏)时,这时我们就要用到它,把它的值改为2(或实际栏数),至于栏间的距离我们通过Columnspace来设定。Units属性是用来设置纸张的显示单位的,我们通常都选用mm(毫米),当然你要对其它比较了解也可以选用,但我认为最好不要选用其它项。2)主要方法及事件TQuickRep提供了大量方法以实现生成、预览和打印报表的功能,但是,它的许多方法是私有成员函数,在类外不允许访问。在实现报表功能时,应用程序经常需要调用Cancel、NewColumn、Preview、PreviewModal、PreviewModeless、Print、PrinterSetup和ResetPageFooterSize几个方面。Cancel方法用来撤销当前正在进行的操作,它与把TQuickRep组件对象的Cancelled属性设置为true是一样的。6NewColumn、Print与PrinterSetup都是与打印有关的方法。其中NewColumn用来强制打印机从新栏开始打印,如果当前栏是页面的最后一栏,则该方法将自动调用方法NewPage,从新页开始打印。Preview、PreviewModal和PreviewModeless都是用来预览报表的。这些方法都不需要使用任何参数。TQuickRep能够响应的事件主要有:AfterPreview、AfterPrint、BeforePrint、OnEndPage、OnStartPage和OnPreview事件,这些事件的触发与使用方法比较简单,另外在实际应用中运用的并不多,这里就不再多说了。四、报表控件摆放的区段作为报表,它通常有一个固定的模式,最常见的报表主要是由以下六部分组成:PageHeader:页眉,每页均会出现|Title:标题,只出现在第一页|ColumnHeader:所有列的标题,即报表文件的字段区域,每页只会出现一次|Detail:记录的内容,一个字段一列,即报
本文标题:深入QuickReport图文教程
链接地址:https://www.777doc.com/doc-2284098 .html