大龙软件研发
让代码不再有难度。
展开
-
FastReport 5/6 安装过程
另外,自己手动安装 *.dpk也可以,但是麻烦的多原创 2021-01-02 13:59:50 · 757 阅读 · 0 评论 -
访问对象
脚本中可以访问报表中任何位置的对象。例如“Page1”页面的“Memo1”对象,在脚本中直接使用他们的名称即可进行访问,代码如:Memo1.Color := clRed在脚本中可以访问的报表对象都显示在报表树窗口中。对象在对象查看器中属性在脚本中亦都可访问,同时,在对象查看器底部有个小浏览窗口,当选中某一属性时,此窗口会显示对此属性的相关描述。窗体(报表树与对象查看器)在编辑报表时可结合使用。要进一步了解对象属性及方法,可参考详细的帮助文档,此帮助文档包含在分发的工具包中。下面是一个简单示例。放置一文原创 2021-01-02 14:00:02 · 687 阅读 · 0 评论 -
脚本,脚本结构
脚本也是FastReport的一部分,用高级语言编写。报表运行时,脚本也同时被执行。脚本中可以处理FastReport按常规方法不能处理的问题,比如根据指定条件隐藏数据。另外脚本还可以处理FastReport中对话框的相关属性。脚本可以用FastScript引擎包含的语言中的某一种语言编写。当前版本支持以下几种语言:A、PascalScriptB、C++ScriptC、BasicScriptD、JscriptFastReport中的脚本有如下特点:A、标准的语言集合:变量,常量,过程,方法(支原创 2020-12-31 17:49:23 · 1329 阅读 · 0 评论 -
子报表,内嵌报表(子报表)
有时在报表某处需要显示一些额外的数据,这些数据结构相对复杂,仅使用FastReport的栏可能无法达到效果,此时可能考虑在栏上使用子表报表 。当插入子表报表后,FastReport会自动生成新的报表页面,此页面对象插入的子报表控件。内嵌的子报表在结构上与多页面报表相似,不同之处仅在于报表打印时并不像多页面报表那样开始新的一页打印,而是直接在基本报表中指定位置打印。当打印报表时,报表引擎如果发现子表,会接着打印子报表直至打印完毕,然后才继续打印基本报表。在子报表中可以继续放置子报表,嵌套的层次因此增加。如原创 2020-12-31 17:44:33 · 1322 阅读 · 0 评论 -
颜色交替显示
使用条件高亮功能,可以创建偶数或奇数行显示颜色的报表。以2.8.0节客户报表为例来设计此类报表。删除主数据栏中所有文本对象,然后再放置到主数据栏中,伸展此对象此其覆盖主数据栏的所有空白区域:此文本对象根据行号显示颜色,选中此文本对象然后打开条件高亮设计器,输入表达式: mod 2 = 1选择高亮的颜色为灰色,灰度不要太强(接近白色即可)。然后再加入刚才删除的对象到当前设置高亮条件的文本对象上:...原创 2020-12-31 17:41:55 · 407 阅读 · 0 评论 -
条件高亮
文本对象的另一特色是可以根据指定的条件来设置颜色。任何一个合法的表达式都可以当成条件来使用。继续使用上节示例来说明,假如订单金额大于5000时显示绿色。选中带表达式“Group.”ItemTotal””字段的文本对象,然后点击工具栏按钮 ,在弹出的高亮条件设置窗口中,输入条件并设置需要的属性(字段及颜色)。...原创 2020-12-31 17:41:05 · 111 阅读 · 0 评论 -
格式化,强调.数值格式化
聚合函数返回的的数值类型的值有个特点就是没有被格式化。通过前面的带“Sum”聚合函数的示例,我们可以看到这一点(注意合计值):命令,或者在对象查看器中选中“DisplayFormat”属性。内置格式化在上节的示例中,格式化操作是针对一对象或对象内的表达式,在对象内仅有一个表达式时它还能正常工作,不过当对象内不有多个表达式时就不能使用此方法。使用上节示例,调整页尾大小,修改文本对象内容如下:Total: [SUM(<Group.“ItemsTotal”>,MasterData1)]原创 2020-12-31 17:40:02 · 128 阅读 · 0 评论 -
报表合计
有的报表每页或整个报表需要合计值,FastReport的聚合函数可以实现此目的。修改上面的示例:如图所示,添加“Report Summary”(报表合计)栏并在栏内放置一文本对象,添加聚合函数Sum。再添加“Page Footer”(页尾)栏,同样添加上面的聚合函数Sum,报表完成:...原创 2020-12-31 17:36:21 · 435 阅读 · 0 评论 -
聚合函数
大多数分组报表需要一些统计信息(如:分组合计,记录个数等等)。FastReport提供了这些聚合函数,使用这些函数,可以对数据块中的数据进行统计。下面是聚合函数列表:SUM 返回表达式的合计值;MIN 返回表达式的最小值;MAX 返回表达式的最大值;AVG 返回表在式的平均值;COUNT 返回数据块的记录数(行数)。用SUM函数来说明聚合函数的使用方式(除Count):SUM(expression, band, flags)SUM(expression, band)S原创 2020-12-31 17:35:21 · 1714 阅读 · 0 评论 -
行号
下面用一示例来说明行号在分组栏中的应用。在分组头与主数据栏中加入带系统变量“[Line]”的文本对象(从“数据树”窗体中“变量”页中拖相应的变量到报表中即可)。如果需要主数据栏的行号需要按持续显示,可以使用系统变量“Line#”。预览结果如下:...原创 2020-12-31 17:33:54 · 191 阅读 · 0 评论 -
向下钻取
如果激活分组头的“DrillDown”属性,分组栏将具备交互功能。即在预览报表时点击分组头,分组栏将会展开(显示所有分组记录)或折叠(仅显示分组头及分组尾)。下面的报表仅一个分组是展开的:因此在报表运行时可以控制报表是展开还是折叠,默认所有的分组是折叠的(当“DrillDown”属性激活时),如果需要默认展开,可以激活“ExpandDrillDown”属性。...原创 2020-12-31 17:32:38 · 281 阅读 · 0 评论 -
重置页码
分组头有一重置页码属性“ResetPageNumber”,可以让用户打印报表时按分组头重新显示页码。例如,创建带分组栏的报表,在分组头中显示顾客姓名,分组头下面显示其订单。现在需要打印报表给顾客(每个顾客仅能佣有自己的报表页)。如果页码按顺序打印,顾客可能会拿到页码为50,51,52(顾客可能会问第49页在哪)。为避免此情况,可以为每个客户单独打印页码,在FastReport中每个分组可以有自己的页码。注意一点,如果激活分组头属性“ResetPageNumbers”,那么也应该激活属性“StartNew原创 2020-12-31 17:31:49 · 524 阅读 · 0 评论 -
分组聚合
分组报表前面的报表,我们使用了两个表的数据设计了两层结构。FastReport可以用通过joined查询的单个数据集设计出同样的报表。用单个数据集设计,需要使用Sql语句关联两个表查询并按一定的排序返回数据。在本节示例中,排序条件是“CustNo”,Sql查询语句如下:select * from customer, orderswhere orders.CustNo = customer.CustNoorder by customer.CustNo“Order by”后面就是要排序的字段,下面的原创 2020-12-30 18:02:56 · 475 阅读 · 0 评论 -
多页面报表
FastReport报表设计期可以包含多个页面,每个页面的参数,大小及方向等参数可以独立设置,各个页面可以放置不同的对象或栏。打印报表时,先显示第一个报表的所有栏数据,然后显示第二个报表的栏数据,依次往后推。创建新报表时,设计器内已存在一默认的报表页面,可以点击工具栏按钮 或选择菜单“文件|新页面”添加一新报表页面,设器中将出现一新页面标签:多页面报表需要注意一点,如果第二页的选项“Print to previous page”(打印至前一页)选项激活(对象查看器中是“PrintToPrevious原创 2020-12-30 17:59:06 · 894 阅读 · 0 评论 -
数据栏之头尾
每个数据栏都可能有头尾(头也可称标题栏,尾又称脚注,但页首,分组头也可以当标题栏使用,为方便区分,这里称之为头),头在数据栏前面打印,而尾在数据栏输出全部数据后打印,下面的简单示例显示了头尾栏是如何工作的。可以看出,头都是在数据栏打印前打印。因此,主数据头只在报表开始前打印一次,明细数据头会在每一组属于主数据记录的明细数据前打印,明细尾会在每一组属于主数据记录的明细数据打印完后打印。主数据尾在主数据所有记录打印完后打印。设置数据栏“FooterAfterEach”属性会更改尾的打印方式。启用“Foot原创 2020-12-30 17:57:25 · 418 阅读 · 0 评论 -
主从报表
迄今为止,所有报表示例都只使用了一个数据栏(主数据)来控制报表输出,仅可以打印一个数据库表的数据。FastReport允许在一个报表页面中使用6层数据(通过子报表可以扩展到更多层)。一般而言,大部分报表使用的数据局限于1-3层。下面学习如何设置两层数据结构的报表。此报表将打印示例数据库“Customer”表和“Order”表。表1为顾客列表,表2为顾客下的订单列表。两个表包含下列数据:Customer:CustNo Company1221 Kauai Di原创 2020-12-30 17:55:30 · 425 阅读 · 1 评论 -
称动对象
原创 2020-12-30 17:54:06 · 98 阅读 · 0 评论 -
子栏
原创 2020-12-30 17:52:30 · 143 阅读 · 0 评论 -
打印Label
在报表中,数据诸如“Label”是按顺序摆放的。下面是一个报表示例,它打印鱼类的相关信息(参考前面的例子),采用Label控件制作,如下:预览,将看到生成如下报表:注意上面的报表,在页面左边还剩余着大量空白。若要报表填充整个报表,可设置页面栏数。双击报表空白区域或通过菜单“文件|页面设置…”可打开设置窗体:在此页,可以设置栏数,栏的宽度及位置。在当前示例中,需要设置栏数(Number)为2,其它参数会自动调整,此时,设计器中报表数据栏缩小如下所示:现在,报表按如下方式生成,首先显示第一栏数据原创 2020-12-30 17:51:18 · 663 阅读 · 1 评论 -
表格
有时需要用表格来显示报表,如价格列表报表。用FastReport设计这样的报表,用户需要设置数据栏内对象的边框属性。下面的示例演示了几种样式。创建如下的报表:在栏内并排放置文本对象并最小化栏的高度。首先最简单的表格样式就是全边框,要设计这种报表,需要设置所有对象的全边框线:其次就是只显示水平线或垂直线,设置这种样式与上面方法相同,设置对象水平或垂直边框即可。最后,显示外边框,报表需要稍微修改一下:如图所示,需要在页首和页尾各加入一文本对象,并设置对象边框与数据栏边框对齐。现在报表看起来如原创 2020-12-30 17:49:14 · 100 阅读 · 0 评论 -
文字围绕
在某些情况下,我们可能需要在对象周围实现文字环绕(比如在图片周围)。FastReport也支持这种特性,我们仍然以前面的报表作为示例。再增加一个文本对象在“Bio.Notes”对象下面,如下图所示:禁用文本对象“Bio.Notes”的自动伸展属性(StretchMode),而对新增加的对象启用此属性。要使“Bio.Notes”对象的文本自动“流”到下面的文本对象中,还需要设置“Bio.Notes”对象的“FlowTo”属性。在对象查看器中,此属性的值可以从下拉列表中选择。选择刚才新增加的对象后报表看起原创 2020-12-30 17:46:17 · 169 阅读 · 0 评论 -
数据拆分
注意报表的一个特别之处:在报表的底部有许多空白。为什么会有此情况呢?当一个报表生成时,FastReport使用用栏来填充空白之处,在每个栏显示完之后,空白部分就会减少。如果FastReport发现没有足够的空间显示下一个栏(栏的高度比报表页面剩余的高度大)就会生成一个新的页面,然后继续往下显示,直到数据显示完毕。报表会包含的对象可能带有大文本,这也就是为什么栏的高度会非常大。因此,如果一个大的栏在页面上发现没有足够的空间供其显示时,它就会移动到下一页,于是前一页就留下了很多空白。见下图:要限制纸张浪费原创 2020-12-29 18:08:14 · 486 阅读 · 0 评论 -
多行文本显示
以上一节报表为例,在“Biolife”表中有个字段“Notes”,它包含每种鱼类的详细描述。在报表中加入此字段。乍看之下,加入此字段似乎很容易:直接在主数据的两个对象之间加入文本对象并与字段“Notes”连接,设置对象大小为8×2.5cm。预览报表,将会看到当前输出并不满足我们的需求。FastReport是根据要求来生成报表的,字段“Notes”是多行文本的,因此大小并不固定。同时显示此字段的文本对象大小是固定的,这就是为什么图中有些文本被剪裁掉。如何解决此问题呢?想当然的我们可以增加文本对象大小或原创 2020-12-29 17:56:51 · 528 阅读 · 0 评论 -
变量
除了使用别名,还有另外一种方法为字段(不仅仅是字段)设置容易理解的名称,我们可以像使用字段名或表达式一样使用变量。在FastReport创建和使用变量,选择“Report|Variables…”(报表|变量…)菜单,然后点击工具栏中“Variables”(变量)按钮。在FastReport中变量列表有两层结构,首层为类别,第二层才是变量。分类变量主要是当变量太多时管理方便。至少要建立一个变量类别,即不允许存在没有类别的变量。另外类别仅仅是对变量进行分类,它们并不在报表中存在,所以在设置报表变量时,变量名称原创 2020-12-29 17:55:50 · 404 阅读 · 0 评论 -
数据栏
现在我们学习如何打印数据库表内容或查询的数据。一张表,它有很多行数据,且每行数据包含多列(字段)。FastReport使用一种特别类型的栏(数据栏databands)来打印这些数据。通常是名称带有 “xxx data level”类型的栏。打印整个表或此表的几个字段,你必须添加这种数据栏到报表中,然后把它与表联接起来,最后添加你需要打印的字段对象。当FastReport生成报表时,数据栏会根据表中记录的行数重复打印多少次。如果报表页空间不够,报表引擎会自动换页。TfrxDBDataSetFastRepo原创 2020-12-29 17:53:18 · 572 阅读 · 0 评论 -
报表中的栏目
Bands(栏目)用于在生成页面时按照逻辑顺序生成其包含的对象。当我们放置一个对象在某个栏目中,如“Page Header”(页头),报表引擎就会在每页的页头生成这个对象。同样,“Page Footer”(页尾)栏会在每页的底端显示其包含的所有对象。下面我们看一个例子,我们将创建一个报表,在页首显示“Hello”,在页的右边显示日期,右下脚显示页码。打开报表设计器,然后点击工具栏中“New Report”(新报表)按钮,设计器会自动生成一个模板报表,它包含三个栏,分别是“Report Title”(报表抬原创 2020-12-28 17:51:55 · 320 阅读 · 0 评论 -
创建报表
报表对象在FastReport中一个空白的报表代表一张纸。用户在报表的任何地方可以加入相关对象(显示文本或图片),同时可以定制报表的外观。下面简单的看下标准包中的相关组件。这些基本对象很有可能需要与“栏”或“文本”对像一起使用。在本单你将进一步学到他们的功能。文本对象文本对象具有许多特性。诸如显示文本,边框和填充颜色,能显示任意大小和任何样式的字体。所有的这些参数可以在工具栏上设置。现在我们看下此对象的其它特性。举个例子,放一个文本对象,然后在里面输入两行文字:This is a very,原创 2020-12-28 17:50:35 · 2452 阅读 · 1 评论 -
设计选项
通过菜单“视图|选项…”可以打开“设计选项”窗体。在这里你可以设置报表设计的单位(厘米,英寸,像素),并指定每个珊格的大小。提示:在设计期间通过双击状态栏左边可以切换设计单位。也可以点击报表设计器标准工具栏上的按钮来决定是否显示珊格,是否需要珊格对齐功能。可以设置代码编辑窗体或“文本”编辑器的字体。“使用对象的字体设置”选项如果是激活的,文本编辑器的字体将与正编辑的文本对象的字体保持一致(经测试无效,不知道是不是理解错误)。工作区(工作空间)及基它窗体默认的背景色是白色的,可以通过“工作空间”和“工原创 2020-12-28 17:46:08 · 195 阅读 · 0 评论 -
工具栏
设计栏标准工具栏文本工具栏边框工具栏对齐工具栏原创 2020-12-28 17:42:29 · 82 阅读 · 0 评论 -
控制键,快捷键,鼠标操作
原创 2020-12-28 17:38:21 · 168 阅读 · 0 评论 -
FastReport 设计器
报表组件提供了一个内置的设计器,此设计器可以在报表设计期间通过双击TfrxReport组件进行访问。它为用户提供了设计报表的所有工具,并能同步预览。设计器当前版本是V4.6.8。它提供了一些工具栏,可以根据个人爱好停放在任意位置。工具栏的位置以及设计器的设置信息(任何一个改变后)会被保存在ini文件或注册表中,以后启动报表设计器后会根据这些信息恢复当前的设计界面。要给终端用户提供报表设计器,你要么从fastreport组件面板中加入“TfrxDesigner”组件,要么在单元文件Uses列表中加入“frx原创 2020-12-28 17:36:58 · 985 阅读 · 0 评论 -
调整单元格宽度
观察前面的示图,可发现FastReport会根据单元格文本自动调整单元格的宽度。但在某些情况下并不需要这样做,因为自动调整宽度可能破坏表格的美观性。下面介绍3种方法来改变这种特性。最简单的方法就是在文本对象中手动换行相关文本,如果小计列,可以如下输入文本:Totalfor[Value]现在报表变得更加紧凑了:不过此方法对于行列值比较长时并不适合,特别是有些单元格内容还不能进行手动换行操作。为此,交叉报表对象使用两个属性来控制“MinWidth”和“MaxWidth”来控制单元格宽度。此属性可以通原创 2020-12-28 17:34:03 · 1296 阅读 · 0 评论 -
排序和复合标题
行或者列的值如果是数据值型,可以以升序或降序的方式排列显示,如果是字符型的,则可以按字母顺序排列。行与列的排列顺序我们都可以单独设置,可以设置为如下模式:“升序排列”、“降序排列”和“不排序”。下面的实例,行与列根据各自的数据类型设置排序顺序。以列排序来说明排序设置方法,行排序设置方式类似。现在要把年份降序排列,打开交叉报表编辑器,选择“Year”项,点击下拉箭头,选择降序“Descending”。复合标题在前面的报表示例中,对于每个列头对应的每行只有一个值。让我们再次打开交叉表设计器来设计一个复杂原创 2020-12-28 17:31:59 · 402 阅读 · 0 评论 -
使用函数
预览前面的例子时可以在“Total”行看到每个员工4年薪水的合计值。在设计交及报表时可以使用下列函数:SUM – 计算合计值;MIN – 计算最小值;MAX – 计算最大值;AVG – 计算平均值;COUNT – 统计记录数。这些函数的使用方法类似,我们以“MIN”函数为例说明。打开交叉表设计器,选中“Salary”项,点击下拉箭头:在快捷菜单中选中“MIN”函数,现在我们已修改了totals行的值为最小值,预览报表如下:...原创 2020-12-28 17:29:13 · 120 阅读 · 0 评论 -
设置外观
设置交叉对象的外观,首先我们修改上节中标题的颜色及改变文本“Grand total”为“Total”。改变颜色相当简单,逐个点击“Year”,“Name”和“Grand Total”元素,然后点击工具栏中按钮选择需要的颜色。你亦可以使用预置的颜色样式,这些颜色样式位于交叉表设计器中:点击“Select Style”(颜色样式)然后选择需要的颜色即可。改变“Grand Total”文本,双击此单元格,打开熟悉的文本编辑器,然后输入“Total”文本:设置薪水的显示格式,选择第一个单元格(交叉表原创 2020-12-28 17:26:52 · 186 阅读 · 1 评论 -
创建一个交叉报表
由理论转为实践,在此节我们将创建一个简单的交叉报表,打印员工四年的薪水。设计此报表,需要“CrossTest”表,此表位于FastReport安装目录“Demos\Main”文件夹中,其包含数据如下:Name Year SalaryAnn 1999 3300Ben 2002 2000….在Delphi中创建新工程,拖入控件“TTable”,“TfrxDBDataSet”和“TfrxReport”组件然后如下设置:原创 2020-12-26 16:02:26 · 214 阅读 · 0 评论 -
交叉报表
此类报表具有表的结构,即包含行与列。在报表生成之前无法预览会生成多少行和多少列,也就是说,报表行与列会随着数据自动向下和向右扩展。下面有一个典型的报表示例。注意表结构的相关元素:在上图中,可看到2×4结构的表。“a”和“b”是行标题,“1”,“2”,“3”,“4”为列标题,“a1”…“a4”,“b1”…“b4”为单元格内容。要构建此报表,我们需要如下一个数据集,它包含三个字段和如下数据:a 1 a1a 2 a2a 3原创 2020-12-26 15:59:45 · 366 阅读 · 0 评论 -
在脚本中创建对象
在报表中我们可以通过脚本创建对象。下面用一个示例来说明如何创建对象。创建一个空白报表,然后在主过程中写脚本:varBand: TfrxReportTitle;Memo: TfrxMemoView;beginBand := TfrxReportTitle.Create(Page1);Band.Height := 20;Memo := TfrxMemoView.Create(Band);Memo.SetBounds(10, 0, 100, 20);Memo.Text := ‘This memo原创 2020-12-26 15:57:44 · 207 阅读 · 0 评论 -
页面“OnManualBuild”事件
构建报表主要由FastReport内核完成,它根据数据以特定的顺序显示报表栏以生成报表。不过有时候我们可能需要一些非标准的格式,而于这些格式,FastReport内核是不能胜任的。在这种情况下,我们可以通过页面的“OnManualBuild”事件手工创建报表。如果在页面中定义了此事件,FastReport内核在输出页面时就会将页面生成控制权移交给该事件。同时FastReport内核自动显示页面上的其它栏如“Report title”、“Page title”、“Column title”、“Report f原创 2020-12-26 15:56:36 · 423 阅读 · 0 评论 -
使用Outline对象
“Outline”对象 即报表大纲,如前所述,在报表预览状态以树的形式显示报表的结构。点击树中的结点可以跳到与当前结点相关联的报表页面。要生成报表大纲,并不需要使用脚本,在FastReport中栏具有自动生成机制。下面用栏的自动生成机制及脚本生成两个示例来展示如何生成报表大纲。几乎所有的栏都有“OutlineText”属性。在此属性中输入文本或表达式将被自动转换成大纲中的树结点。如果输入是表达式,生成报表时其值将会被自动计算并在树中显示。所以树的层次结构与报表中栏的层次结构是类似的,即树中包含着主从元原创 2020-12-26 15:53:44 · 1072 阅读 · 0 评论