建立自己的报表预览程序
作者:张洪举 Microsoft Visual FoxPro MVP (http://www.vfptop.com)
日期:2005年10月
应用于:Microsoft Visual FoxPro 9.0
目录
概述
可以通过 ReportListener 的 PreviewContainer 属性指定一个自定义报表预览程序,来代替 Visual FoxPro 默认的 ReportPreview.app 程序。
在 Visual FoxPro 的辅助对象模式下预览一个报表或标签时,ReportListener 需要一个附加的组件来提供预览界面,这个组件被称为预览容器。预览容器是用 Visual FoxPro 代码编写的,因此用户可以自己建立预览容器。
ReportListener 可以通过 ReportListener 的 PreviewContainer 属性指定一个预览容器对象,也可以通过 _REPORTPREVIEW 系统变量指向一个预览容器对象。_REPORTPREVIEW 的默认值为 ReportPreview.App,ReportPreview.App 是 Visual FoxPro 的默认报表预览程序。
Visual FoxPro 9.0 的报表预览应用程序接口
建立自定义报表预览程序一个很重要的问题,是如何获得对 ReportListener 对象的引用,从而控制 ReportListener 的行为。为了实现这个目的,在你建立的报表预览程序中必须包含一个名为 SetReport 的方法,ReportListener将通过该方法将自身引用传递给你的预览程序。该方法的语法格式如下:
PROCEDURE SetReport
LPARAMETER oListenerRef
oListenerRef 参数便是对 ReportListener 对象的引用,你可以通过该参数,将对 ReportListener 对象的引用保存到一个属性或变量中。
同时,在你建立的报表预览程序中还必须包含一个名为 Show 的方法,ReportListener 在报表绘制完毕后将调用该方法进行报表显示。假设已经建立了一个 ControlPreview 类作为我们的预览容器,下面是调用该类时的代码。
lcReport=HOME(2)+"Solution/Europa/EmployeesMD.frx"
oListener = CREATEOBJECT('ReportListener') &&建立ReportListener对象,并保存到oListener变量中
olistener.ListenerType = 1 &&设置输出模式
oListener.OutputType = 1
*!* 下面的代码用于指定预览容器
olistener.PreviewContainer=NEWOBJECT("ControlPreview","AdditionSamples.vcx")
*!* 下面的 REPORT FORM 命令将开始执行报表,同时将执行 ControlPreview 的 SetReport 方法,
*!* 传递 ReportListener 对象引用给 ControlPreview,但是由于此时报表还未绘制完毕,所以并不
*!* 能获得报表的总页数、页面高度等信息。在绘制完毕后,ReportListener 将调用 ControlPreview
*!* 的 Show 方法,进行预览输出,由于此时报表已经准备完毕,所以你可以在 Show 方法中获得
*!* 报表的页面高度等信息
REPORT FORM (lcreport) OBJECT oListener NOWAIT
建立自己的报表预览程序
我们将通过下面的示例来说明建立自己报表预览程序的方法,任何报表都可以使用该程序进行预览输出。为了更好地说明这个预览程序的功能,首先来看一下设计完成后的执行效果,如图1 所示。通过这个预览程序,可以设置报表的显示百分比、通过导航或直接定位要预览的页,以及指定报表的打印范围。
图1 报表预览程序界面
1)建立基于 Form 的类
在 Visual FoxPro 的 Command 窗口中执行 CREATE CLASS 命令,打开如图2 所示的 New Class(新建类)对话框。设置新建类的名称为 ControlPreview,基于 Form 类,存储在 AdditionSamples.vcx 类库中。
设置完成后单击 OK 按钮,将打开 Class Designer (类设计器)对话框,最终设计结果如图3 所示。
图2 New Class 对话框
图3 ControlPreview 类最终设计结果
2)表单的关键属性设置
表单的关键属性设置如表1所示。
表1
对象 |
属性 |
值 |
说明 |
ControlPreview (表单) |
AllowOutput |
.F. |
不允许将“?”等命令显示输出到该表单中 |
nCurrentPage |
1 |
自定义属性。储存当前正在显示的报表页号 |
|
nPageHeight |
100 |
自定义属性。存储当前报表页面的高度 |
|
nPageWidth |