深入quickreport图文教程

上传人:第*** 文档编号:32643689 上传时间:2018-02-12 格式:DOC 页数:27 大小:430KB
返回 下载 相关 举报
深入quickreport图文教程_第1页
第1页 / 共27页
深入quickreport图文教程_第2页
第2页 / 共27页
深入quickreport图文教程_第3页
第3页 / 共27页
深入quickreport图文教程_第4页
第4页 / 共27页
深入quickreport图文教程_第5页
第5页 / 共27页
点击查看更多>>
资源描述

《深入quickreport图文教程》由会员分享,可在线阅读,更多相关《深入quickreport图文教程(27页珍藏版)》请在金锄头文库上搜索。

1、1深入 QuickReport(一)作者:董维春(本文已在CSDN 开发高手04 年第一、二、三期上发表,应广大网友的要求,经编辑同意,发表在 CSDN作者本人文档中,略有修改,但仅即于此,未经 CSDN或作者本人同意任何个人与网站不得转载、摘抄,否则任何涉及到版权的行为后果自负)报表是数据库应用程序的基本组成部分之一,完整的数据库应用程序总要提供报表功能。与传统的数据库应用程序设计工具相比,C+ Builder 中提供了 QuickReport 组件,使 C+ Builder 的数据库功能得到了极大的丰富。QuickReport 是挪威 Qusoft AS 公司专门为 C+ Builder

2、设计的用于报表的一组控件,在 C+ Builder 上我们使用的 QuickReport 与专业版的QuickReport 相比,在功能上还有很大的差距,但对于我们来说只要充分利用好她,就可以非常快捷的设计出功能强大、模式多样的数据报表,最重要的是她不需要我们花额外的钱去购买。其实 QuickReport 并不难,但介绍的这方面的内容实在太少,并且她的帮助文档写得也不太好,让那些想学习 QuickReport 的 C+ Builder 爱好者找不到一个正确的、合适的方法。如果你想了解她、使用她,那好吧,让我来帮你认识这个妖女吧,如果此文对你能有所帮助,那是我最大的快乐!第一部分:QuickRe

3、port 基本知识BCB 引进的 Qusoft 公司的报表组件系列,它包括多个组件。首先有必要先简单的了解一下这二十三个组件的基本位置与功能。一、组件功能简介2上面的两个图是 QuickReport 组件页的中所有组件,在 BCB6 中提供给我们使用的不会少于上面的 23 个的。下表是按上图中组件的位置先后,对各控件的使用功能逐一做了简单的介绍:1)QuickRep带有坐标,作为其他报表控件(如 TQRBand)的容器,通过它的 Band 属性可以自动添加各种类型的 TQRBand重要属性 (Properties) 使用说明DataSet 连结数据来源,一般是 ADO/BDE 连接组件的名字P

4、age 纸张的设置,可展开BottomMargin10.0mm 报表下边界尺寸Columns 1 报表分栏数,默认为 1 栏ColumnSpace 0.0mm 报表栏与栏间隔尺寸,Columns 值大于 1 时有效LeftMargin 10.0mm 报表左边界尺寸Length 210.0mm 报表长度尺寸,与 PaperSize 设置相关Orientation poPortraitpoLandscape报表方向 打印方向,有下面两个值:直印poPortrait、横印 poLandscape PaperSize A4 报表打印纸张大小RightMargin 10.0mm 报表右边界尺寸Ruler

5、 true 报表标尺显示TopMargin 10.0mm 报表上边界尺寸Width 297.0mm 报表宽度尺寸,与 PaperSize 设置相关PrinterSetting Copies 1 报表复制份数Duplex false 报表双重打印FirstPage 0 报表打印起始页LastPage 0 报表打印终止页OutPutBin Auto 报表输出种类ReportTitle 报表预览打印标题Units mm 报表设计阶段显示标尺单位2)QRSubDetail 建立一个主/明细(master/detail) 报表,连接明细文件的组件3)QRStringsBand可建立一读取 TString

6、s 中项次值的组件。在这个组件里有一个 Items 属性,若Items 一个值(一行空、一回车行)都没有,那他上面的组件将不会起作用。当String List Editor 中有几行,该组件上的内容就重复几次。若只有一行内容时,她与一个 DetailBand 是一样的;而多行时,也是差不多的,即先重复该区段内的可视组件几次(几行就几次),然后下一个再重复。比如三行,那就是第一个数据来三行,然后第二个数据来三行,再然后,直到最后34)QRBand 用来确定在报表的不同位置应该显示什么内容,它上面可以放控件5)QRChildBand在报表中基础子项条列组件。他有一个 ParentBand 属性,你

7、必须把他与其它 band连接起来,只有这样在她里面布置的组件才有效。说直接就是已经有了一个 Band 而你还需要一个这样的组件,那就用她吧6)QRGroup在报表中对资料做逻辑上分组的组件。当你连接了几个 datasets 到报表时可以通过Groups 成组的对 dataset 进行操作7)QRLabel打印静态的文本(即不是根据数据库值来改变的),作用象 Tlabel 。 Caption 的内容就打印出来的内容;AutoStretch 是布尔型变量,当标签标题在设定范围内不能打印时,该属性将起作用,若为 true,报表将继续打印没有打印完的文本,其它需要打印的文本将依次向后移动,反之,则超出

8、部分不被打印8)QRDBText 在报表中具有显示连结资料来源的文字功能的组件9)QRExpr 在报表中具有显示陈述句或计算表示式值的组件10)QRSysData 在报表中具有显示系统信息的组件11)QRMemo 在报表中显示备注文字的组件12)QRExprMemo 在报表中是 TQRExpr 和 TQRMemo 的混合组件13)QRRichText 在报表中具有显示区域文字功能的组件14)QRDBRichText 在报表具有显示连结资料来源的区域文字功能的组件15)QRShape 在报表中处理几何图形的组件,如方形、圆角方形、椭圆16)QRImage 在报表中显示静态的图片,包括(BMP,W

9、MF,ICON)17)QRDBImage 在报表中显示从数据库接收的图片18)QRCompositeReport在报表中连结有关与无关的报表组件 ,用于创建混合报表的组件,可以把两个或两个以上的报表连接在一起,组成一个报表19)QRPreview 在执行阶段建立自订预览报表组件20)QRTextFilter 将报表内容输出于 ASCII text 文件21)QRCSVFilter 将报表内容输出于 CSV 文件22)QRHTMLFilter 将报表内容输出于 HTML 文件23)QRChart 可以在报表上应用的图表工具二、组件关系表下图说明了与 QuickReport 相关组件之间的连接与关

10、系:ADOTablePreview();就可以了。没有人希望那个什么也不显示的 TQuickRep 组件摆在窗体上,这也告诉我们一点我们的程序中最好有两个 Form:一个是放置控制 QuickReport显示、打印或实现其它功能的,比如本例中放置控制按扭;一个是提供给QuickReport 布置组件的。当然这不是说在一个 Form 中实现不了上述功能,其实你只要在窗体的OnCreate 事件中把 TQuickRep 组件隐藏起来就可以了:void _fastcall TForm1:Form1Create(TObject *Sender)11QuickRep1-Hide();要注意 QR 你不能

11、用 Show()调用,那你将得不到你想要的程序,当然用Preview()就没错了。以下是本例的程序源代码:#pragma package(smart_init)#pragma resource *.dfmTForm1 *Form1;/-_fastcall TForm1:TForm1(TComponent* Owner): TForm(Owner)/-void _fastcall TForm1:Form1Create(TObject *Sender)QuickRep1-Hide();/-void _fastcall TForm1:Button1Click(TObject *Sender)Quic

12、kRep1-Preview();/-进一步思考:有时我们想实现垂直输出,比如用 TQRLabel 里的内容我们想垂直显示能否实现?当然能实现。只要我们按如下设置就可以实现:AutoSize=false;/默认为 trueAutoStrech=true;/ 默认为 falseWordWrap=true;/ 默认为 true,这是设置中的重点,这与 Label 中的设置是一样的Caption 的值要注意,每个字符间一定要有空格;/一般的设置我们不会留空格,因为设计空格除了美观,没什么实际意义,但在这里必须留空格进一步思考:我们想显示有两位小数的数字,应该如何办呢? 只要把该可视化组件的 mask

13、属性设为 0.00 就可以实现了。例二:TQRGroup、TQRExpr 组件的应用 该报表先列出州名,接着列出该州的所有公司及公司总数,一个州列完后空一行(Group 中断),列出新的州名,接着列新州下的所有公司,没有填州名的公司统一列在“不清楚什么地区的”下面。 121)新建一个 Project。 2)放一个 TQuery 在 TForm 上,其 SQL 属性为:select * from customer order by State,Company,即根据州、公司排序,DatabaseName为 BCDEMOS,Active 为 true。 3) 放一个 TQuickRep 控件在 F

14、orm1 上,DataSet 为 Query1。4)放一个 TQRBand 在 TQuickRep 上面,把其 BandType 设成rbDetail。5)放一个 TQRGroup 控件在 TQuickRep 上,这时默认为 Group Header。(任何时候当 Group 中断或更高级别的 Group 中断,这个 Header都将打印出来,如果有表达式,根据表达式的值显示内容),接着添加一个Group Footer Band,但我们却不能找到这样的一个组件,那应该如何设计出Group Footer Band 区段呢? 我们只要放一个 QRBand2 在报表上,把 TQRGroup的 Foo

15、terBand 属性指向 QRBand2,看一下,QRBand2 是不是变成了 Group Footer Band 。(TQRGroup 的一个重要特性是表达式,任何时候当表达式的值改变时,Group 都将中断,如表达式是按省列出城市名,当前列出辽宁省,当属于辽宁省的城市列完后,表达式值改变,这时 Group 中断,接着显示其他省的城市名),TQRGroup1 的 Expression 属性设为 Query1.State(根据不同的州来中断) 。注意:为什么不直接再放一个 TQRGroup,因为无论我们放多少个系统都会默认为 Group Header。6)放一个 TQRExpr 控件在 Group Header 上面,其 Expression 属性为:IF(Query1.State ,Query1.State,不清楚什么地区的),即如果公司的州没填,就归入“不清楚什么地区的”,否则归入具体的州。7)放三个 TQRDBText 在 Detail 上,他们的 DataSet 都指向Query1,DataField 分别指向 Company、Conta

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 中学教育 > 职业教育

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号