QuickReport基本知识
一、 简单了解各控件功能 以下是各控件最简单的使用功能，其他功能依具体的实现而介绍。 1. TquickRep:带有坐标，作为其他报表控件(如TQRBand)的容器,它的Band属性可以自动添加各种类型的TQRBand. 2. TQRLabel:打印静态的文本（即不是根据数据库值来改变的），作用象Tlabel , Caption的内容就打印出来的内容。 3. TQRDBText:打印数据库字段值，一个值一行。作用象TDBText.把它的DataSet , DataField分别赋予Table1,Company时，将打印Table1所指向的表的Company字段的内容。 4. TQRSysData:打印系统信息如时间，页码，报表头等。 5. TQRMemo:非常象TQRLabel，只是它可以打印多行，也是打印静态数据。 6. TQRRichText:打印RichText格式，能够连接到一个Form上的RichEdit控件并打印它的内容，不过必须是32位版本的。 7. TQRShape:打印方框、圆和垂直、水平线。 8. TQRImage:打印静态的图片，包括（BMP,WMF,ICON）. 9. TQRDBImage:从数据库接收图片。 10. TQRBand:用来确定报表的不同位置应该显示什么内容，它上面可以放控件(参见二)。 11.TQRGoups:Groups可以不限级别的组操作。当你连接了几个datasets到报表时可以通过Groups成组的对dataset进行操作。 二、 报表的控件摆放循序 出现在所有页上的标题(PageHeader) | 标题（只有首页才有）(Title) | 所有列的标题(ColumnHeader) | 记录的内容，一个字段一列(Detail) | 摘要（最后一页才有）(Summary) | 出现在所有页上的页脚(PageFooter) 这些根据设置不同的Band(不是控件，一种类型而已，在其上面可以放其他控件)来定位。总共有六种Band。 三、 一个简单的例子 这个例子制作打印一张表的部分字段名及该字段数据内容的报表。 1． 建立一个新project 2． 放一个TTable到Form上，DatabaseName设为BCDEMOS,TableName指向Customer表，Active设为true. 3． 放一个TquickRep控件在Form上，DataSet属性为Table1.（即要显示上边Table1所指向的表的内）。 4.展开TquickRep的Bands属性，设HasDetail为true,这时自动增加个detail band(一个TQRBand控件，故也可以直接放一个TQRBand控件，BandType属性设为detail就行了)。 5.放一个TQRDBText控件在detail band上面，设DataSet指向Table1,DataField指向Company。第四步是设置在报表的什么位置显示什么类型的数据，而TQRDBText则具体实现。 6.选TquickRep控件，按右键，选择”Preview”预览，应该看到表Customer的字段Company的所有字段值。 到这一个简单的例子就OK了，程序实现预览及利用TQRuickRep自带的打印功能只须在Form中加一个按钮，它的OnClick事件为：QuickRep1->Preview(); 四、 一个使用TQRGoups、TQRExpr控件的报表 该报表先列出州名，接着列出该州的所有公司及公司总数，一个州列完后空一行（groups中断），列出新的州名，接着列新州下的所有公司，没有填州名的公司统一列在Unknown state下面。 1. 建立一个新project。 2. 放一个Tquery在Tquickrep上，其SQL属性为：select * from customer order by State,Company;(即根据州、公司排序)，DatabaseName为BCDMome,Active为true. 3. 放一个TquickRep控件在Form1上,DataSet为Tquery1. 4. 放一个TQRGroups控件在TquickRep上，这时默认为group header。（任何时候当group中断或更高级别的group中断，这个header都将打印出来，如果有表达式，根据表达式的值显示内容。）接着添加一个group footer band,添加时，放一个TQRBand控件在报表上，连接TQRGroups的FooterBand属性到这个QRBand，这时这个新建的TQRBand就成为Group Footer. （TQRGroup的一个重要特性是表达式，任何时候当表达式的值变时Group都将中断，如表达式是按省列出城市名，当前列出广东省，当属于该省的城市列完后，表达式值改变，这时Group中断，接着显示其他省的城市名。）TQRGroups的Expression属性设为Query1.State(根据不同的州来中断)。 5. 放一个TQRBand控件在报表上,BandType为rbDetail. 6.放一个TQRExpr控件在group header上面，其Expression属性为：if(State<>’’,State,’Unknown state’)，即如果公司的州没填，就归入Unknown state,否则归入State. 7.放三个TQRDBText在Detail上，他们的DataSet都指向Query1,DataField分别指向Company,Contact,Phone. 8.在放一个TQRExpr控件在group Footer上面,Expression为’Customers in’+State+’:’+Str(Count) 作用是在每个州的公司列完后显示该州总共有多少个公司。 9.按右键选预览，应该看到不同的州名及其公司和公司公司总数。 五、QuickReport 条件式列印 可以直接在 TQuickReport 的 OnFilter 事件中写明条件判断,OnFilter事件的引数中有一个以 var 宣告的 PrintRecord 布林型态变数,将这个变数设为 True(预设值), 该笔记录便会印出;反之, 设为False,就不印出这笔记录. procedure TForm1.QuickReport1Filter(var PrintRecord: Boolean); begin PrintRecord := False; if YourTable.FieldByName('WantedField').AsInteger <= 100 then Exit; if YourTable.FieldByName('WantedField').AsInteger >= 150 then Exit; PrintRecord := True;