作者:Cathy Pountney,Visual FoxPro MVP,www.frontier2000.com
翻译:张洪举,Visual FoxPro MVP,www.vfptop.com
应用于:Visual FoxPro 9.0
概述: 学习Visual FoxPro 9.0报表书写器的新增功能包括新增的可重用数据环境、报表保护和用户界面增强。你可以从中学习到对布局对象的增强、对国际用户的改进、对打印和对数据分组的增强。此外,也可以学习到报表书写器的两个最大改进:多细节带区和报表的可扩展功能。最后,你将学习到Visual FoxPro报表文件(FRX)的详细结构。
目录
前言可扩展功能数据环境保护用户界面增强布局对象增强国际化功能打印增强数据分组增强多细节带区FRX结论
前言微软在当前基于FRX结构的报表上投入了众多的开发者,在很大程度上改进了VFP 9.0的报表书写器。VFP 9.0的报表书写器与先前的VFP版本兼容,它是一个对新版本和老版本的成功融合。
可扩展功能在VFP 9.0之前,报表引擎处理的事情包括:处理数据、对象位置、绘制、打印和预览,并没有挂钩到报表引擎和定制报表的方法,但是这在VFP别的应用领域中却可以。对于VFP 9.0报表书写器的最大改进就是新增的可扩展功能,报表设计器、报表引擎和预览容器都公开给了开发者。
报表生成器VFP 9.0报表书写器包含了一个新增的设计时功能,叫做Builder Hooks(生成器挂钩)。公开了几个报表设计器事件和一个叫做Report Builder(报表生成器)的独立Xbase组件,这个组件可以被调用后处理这些报表设计器事件。这个组件也可以被用来调用你自己的对话框,扩展本地报表设计器的行为或者覆盖本地行为。
VFP为设计报表包含了一个可扩展的报表生成器应用程序,其包含有各种新增功能,并提供了一个很友好的用户界面。报表生成器由一个新增的系统变量_REPORTBUILDER控制。如果该变量为空,则显示原来版本的对话框。要调用生成器挂钩,可以设置该变量为一个适当的应用程序。例如,要使用VFP 9.0附送的报表生成器,可以执行下列命令:
_REPORTBUILDER = HOME() + "REPORTBUILDER.APP"该文章中的某些部分假定使用原来版本的对话框,并且_REPORTBUILDER系统变量为空,其他某些地方则假定使用新对话框,并且_REPORTBUILDER系统变量设置为REPORTBUILDER.APP。如果你没有经历过我们描述的这种行为或没有看见过这个对话框,可以改变_REPORTBUILDER的值来体验一下。
报表引擎在新的输出系统中(Object-Assisted Output),报表引擎用于处理数据中心的事务,如移动整个范围和表达式求值。但是,当建立输出时,它延迟对叫做ReportListener的新增基类的工作,该新增基类使用GDI+以一种更加高级的方法来绘制报表内容,并且它也给Xbase用户一个与输出过程相互作用的机会。图1显示了这些部分如何搭配在一起工作的。
图1 使用新增的ReportListener类来操纵报表
要使用ReportListener类,可以使用REPORT FORM命令的新增子句,如下所示:
oListener = CREATEOBJECT("ReportListener")oListener.ListenerType = 1 && 预览,或设置为0进行打印REPORT FORM OBJECT oListenerVFP 9.0也提供了第二种使用ReportListener类的方式,你可以设置新增系统变量_REPORTOUTPUT的值为一个基于ReportListener类的应用程序名称。
当使用Object-Assisted Output时,报表会根据它的ListenerType属性值设置,使用两种方式中的某个方式进行处理。你可以认为这两种方式是print-appropriate和preview-appropriate,或者是page-at-a-time和all-pages-at-once。在第一种方式中,在准备每页时,Listener触发一个OutputPage事件,例如在发送每页到打印机或打印队列时。
在第二种方式中,Listener为绘制和高速缓存报表准备所有的页面,在完成时,可以调用OutputPage方法来询问是按页号输出所有的页面还是输出其中的任意一个页面。
预览容器在VFP 9.0中,另一个可扩展功能难题是预览容器。对于此挂钩,你可以使用由VFP 9.0附送的新预览容器,或者书写自己的预览容器。在不使用新增的object-assiste输出时,旧的预览容器仍旧可用。
新增的系统变量_REPORTPREVIEW可以用来包含预览容器的应用程序名称。缺省情况下,该变量指向ReportPreview.app。该应用程序比旧的预览程序包含了大量的改进,包括