订购:http://www.huachu.com.cn/itbook/itbookinfo.asp?lbbh=10054628
http://www.china-pub.com/computers/common/info.asp?id=34809
http://www.china-pub.com/computers/common/info.asp?id=34809
在本书即将完成之际,微软公司发布了Visual FoxPro 9.0的SP2版本。在SP2中又引入了对报表的许多增强,这些增强中最引人注目的是现在可以通过xBase代码扩展报表设计器和报表输出引擎。
报表设计器现在允许自定义设计器的Properties对话框,在SP2之前,开发者不能扩展现有Properties对话框,但是可以通过事件处理器注册表(Event Handler Registry)来替换它们。不过创建一个自定义Properties对话框并不是一件容易的事情,SP2的增强受欢迎之处是为所有用户在报表设计器中提供了一个接口,作为对所创建自定义报表绘制对象的补充。
SP2也使得报表输出处理更加容易。包含在SP2中的REPORTOUTPUT.APP,提供了一种使用自定义类挂钩报表输出的方法。这个新增类叫做Handlers,它由FX和GFX两部分构成。FX Handlers提供了报表运行的扩展功能,但是它并不处理任何报表绘制功能。GFX Handlers执行实际的报表绘制功能,并提供扩展当前绘制或替换所有绘制的功能。
12.17.1 ReportListener的新增功能
1.CallAdjustObjectSize属性
在
l 如果在运行时刻派生的ReportListener的AdjustObjectSize事件中没有代码;
l 如果元素在带区中没有标记为可扩展;
在SP2中新增了CallAdjustObjectSize属性,用于指定是否要求ReportListener为所有相应的形状或图片类型控件调用AdjustObjectSize事件。该属性的可用值在如表12-50所示。
表12-50 CallAdjustObjectSize属性的可用值
值 |
说明 |
0(默认值) |
如果在AdjustObjectSize事件具有代码的话,则对所有布局对象运行此代码 |
1 |
不发生AdjustObjectSize事件,即使其中具有代码 |
2 |
AdjustObjectSize事件总是发生,不管事件中是否具有代码。该值主要的目的是用于调用BINDEVENT( ),而不是执行方法中的代码 |
如果报表输出不需要动态对象大小,可以关闭该功能,以实现更好的性能。假设在表单上有一个复选框被选定,下列代码示例使用CallAdjustObjectSize关闭AdjustObjectSize事件,进行最佳化报表输出。
oReport = CREATEOBJECT("myReportlistener")
IF THISFORM.chkNoAdjustSize.Value = .T.
oReport.CallAdjustObjectSize = 1
ENDIF
REPORT FORM (myreportfile) OBJECT oReport PREVIEW
2.CallEvaluateContents属性
与CallAdjustObjectSize属性类似,CallEvaluateContents属性用于指定是否要求ReportListener对报表上的所有的域控件调用EvaluateContents事件。通过
表12-51 CallEvaluateContents属性的可用值
值 |
说明 |
0(默认值) |
如果在EvaluateContents事件具有代码的话,则对所有布局对象运行此代码 |
1 |
不发生EvaluateContents事件,即使其中具有代码 |
2 |
EvaluateContents事件总是发生,不管事件中是否具有代码。该值主要的目的是用于调用BINDEVENT( ),而不是执行方法中的代码 |
现有一个报表,可以在运行时刻通过ReportListener的EvaluateContents事件修改域控件的画笔颜色,如果使用了一个非彩色打印机,则可能希望关闭EvaluateContents事件。下面的代码根据复选框的值来决定是否关闭EvaluateContents事件的处理。
oReport = CREATEOBJECT("myReportlistener")
IF THISFORM.chkColorPrinter.Value = .F.
oReport.CallEvaluateContents = 1
ENDIF
REPORT FORM (myreportfile) OBJECT oReport PREVIEW
3.PrintCachedPages方法
在SP2之前,在将报表输出到预览窗口后,如果希望打印缓冲区中的报表,只能在关闭预览窗口的情况下执行ReportListener的OnPreviewClose(.T.)方法(参考
由于ReportPreview应用程序中已经包含了PrintCachedPages方法,所以可以控制报表预览工具栏中打印按钮的行为。例如,如果希望在用户单击打印后打印预览窗口保持为打开状态,可以在REPORT FORM命令中包含NOWAIT子句。
REPORT FORM (filename) OBJECT oReportListener PREVIEW NOWAIT
4.可以在LoadReport方法中读写CommandClauses.File属性
从SP2开始,可以在LoadReport方法中读写CommandClauses.File属性,从而提供了在装载报表时修改要打印报表文件的能力。
12.17.2 P roperties对话框的增强
SP2包含新增的FX和GFX Handlers,以及添加到Properties对话框的新增选项卡,用来配合这些Handlers。这实际上是为用户提供了一个这些Handlers的设计时刻接口。
1.Document Properties选项卡
SP2添加了一个叫做Document Properties的选项卡到Report Properties对话框中,其中显示了一个自定义属性列表,可以从中存储有关文档的附加信息或控制报表的绘制,如图12-100所示。
图12-100 Document Properties选项卡
列表中以HTML开始的属性名称特定于HTML输出,并且当前仅被HTMLListener(包含在_ReportListener.vcx类库中)支持。而所有能够生成文档的ReportListener可以使用其他的属性名称。
例如,如果设置如图12-100中所示的自定义文档属性,则在使用HTML Report Listener绘制报表的情况下,下面的文本将包含在生成的HTML文件中。
<title>My Report</title>
<
<
尽管这些数据并不显示Web页上,但是在为搜索引擎创建文档索引时这却是有用的信息。在SP2之前,没有一种更有效的方法可以在HTML报表文档中包含这些信息。表12-52列出了对这些扩展属性的简要说明。
可以添加自定义属性到属性列表中,但是它们不能被标准的ReportListener识别,任何新增的自定义属性应当由新的ReportListener或自定义FX、GFX Handler进行处理。
表12-52 内置在新报表设计器中的报表属性
属性 |
说明 |
Document.Title |
为报表文档指定一个标题。对于HTML输出,这会作为一个TITLE标签在所绘制的文档中出现 |
Document.Author |
为报表文档指定作者信息。对于HTML输出,这将以一个META标签出现 |
Document.Description |
为报表文档指定一个说明。对于HTML输出,这将以一个META标签出现 |
Document.Keywords |
指定包含在报表文档中的关键词。对于HTML输出,这将以一个META标签出现 |
Document.Copyright |
为报表文档指定版本信息。对于HTML输出,这将以一个META标签出现 |
Document.Date |
为报表文档指定一个日期 |
HTML.CSSFile |
仅用于HTML输出。为生成的文档指定要使用的外部CSS文件名称 |
HTML.Metatag.HTTP-EQUIV |
仅用于HTML输出。指定一个包含在HTML输出中的HTTP-EQUIV标签 |
HTML.TextAreasOff |
仅用于HTML输出。对溢出伸展字段取消使用TEXTAREA标签 |
2.Advanced Properties选项卡
SP2向每个控件属性对话框(包括标签、字段、矩形、线条和图片)添加了一个新增的Advanced