· “File”菜单下增加了“Save As Class...”菜单项。
· 报表设计器的工具栏加入了一个名为“水平线(horizontal lines)”的控件,它用来把Grid Lines和Show Position这两个控件与其它的控件分割开来。
· “Report”菜单增加了“重贴标签(relabled)”、“新建(new)”以及“打印预览(Print Preview)”等菜单项。
快捷菜单对现有的快捷菜单添加了一些新条目,使得菜单条目与相应的对话框能保持更好一致性。
· “全局(Global)”快捷菜单增加了一个名为“重贴标签(relabled)”的菜单项。
· 通过右键单击任意带区(band)的灰色栏可以弹出名为“带区(Band)”的快捷菜单。
· 通过右键单击任意布局对象可以弹出名为“布局对象(Layout Object)”的快捷菜单。
工具栏如图6所示,报表设计器的工具栏增加了两个新的控件:页面设置控件和字体控件:
图6. 报表设计器增加的两个新控件
表达式构造对话框表达式构造对话框为“表达式域(Expression for Field)”输入框提供了一个更大的输入空间,允许用户输入更多的报表表达式。
如果你将_REPORTBUILDER这个系统属性设为空的话,那表达式构造对话框会指定本地行为,只有在数据环境中定义的数据表才能够显示在对话框中的列表中。那些没有在数据环境中定义的数据表则不会在列表中显示。
如果将_REPORTBUILDER系统属性为ReportBuilder.app的话,那表达式构造对话框则会呈现另外一种行为。首先,_GETEXPR中定义的表达式构造器会取代本地的表达式构造器。
表达式构造对话框还有一个下拉组合列表框,你可以从中选择要操作的数据表。只有当前已使用的数据表才会出现在这个列表框中。需要强调的是报表设计器是不会自动打开数据环境中定义的数据表的,因此如果数据表没有被打开的话,那它便不会出现在这个列表框中。
采用这种设计方式事,当用户使用你定义的报表时,你可以很好地控制用户能访问哪些数据表,不能访问哪些数据表。你可能在数据环境中定义了若干个数据表,但你不希望用户能访问所有的数据表,这时你可以打开一些允许用户访问的数据表,而其他未打开的数据表则对用户不可见。
鼠标指针的改进当报表中对象处于大小可变状态时,鼠标指针会发生相应的改变(参见图7)。
图7. 当一个对象处于大小可变状态时,鼠标指针发生的改变。
多项选择对话框VIsual FoxPro 9提供了一个多项选择对话框,你可以通过它一次性地设置多个布局对象的Portection和Print属性。它也允许你对单个布局对象的其它属性进行修改。要使用这种功能,先要选定多个布局对象,然后在任意一个对象上面单击右键来弹出这个对话框,如图8所示:
图8. 多项选择对话框
所有被选定的对象出现在对话框的“Selection”属性页的列表中。如果你要选取报表中所有的布局对象的话,用CTRL+A组合键可以对它们进行全选,然后再单击右键即可。
图8中的“Sort by”选项组允许你将布局对象按类型或出现在报表中的位置排序。“Remove from list”按钮可以删除列表中的布局对象。如果你双击列表中的某个对象,那么“Properties”属性页就会激活,并且显示出这些布局对象在报表中的某些属性。如图9所示,你可以一次性更改所有出现在“Selection”属性页中的布局对象的某些属性。
图9. 通过“Properties”属性页来修改布局对象的保护属性以及打印属性。
如果你选中了“Apply these protection settings to the selected objects”检查框,那可以对列表中的布局对象设置保护方式。如果你选中了“Apply this condition to the selected objects upon saving”检查框,那么可以允许打印。你可以根据自已的需要对保护及打印做更进一步的设置,设置完毕后,单击“OK”按钮便可同时改变所选的布局对象的这些属性。
更大的缩放级别预览窗口有了更大的缩放级别,可以从10%缩放到500%。
布局对象的增强布局对象也做了一些改进,包含一个操控模板字符的可选项,字符表达式的裁剪模式,以及能指定布局对象的相对位置和绝对位置。
模板字符域属性对话框增加了对模板字符的一些新支持,它们分别是覆盖(Overlay)和交错(Interleave)。用来支持字符的一些特殊格式。
当你使用覆盖方式时,特殊字符会被当做数据的一部分,并且会覆盖其它的字符。举个例子来说,当你使用一个格式化字符串“999-999”时,而用户实际输入的数据是“123456”,那报表的最终结果将会显示为“123-56”,注意数字“4”被格式化字符中的“-”覆盖了。
当你使用交错方式时,特殊字符会插入到当前数据中。举个例子来说,当你使用一个格式化字符串“999-999”时,而用户实际输入的数据是“123456”,那报表的最终结果将会显示为“123-456”,注意“-”插入到了数字“3”和数字“4”的中间。
字符表达式的裁剪模式在Visual FoxPro 9以前,当域对象中的文本过长时一般都会被自动裁剪。在Visual FoxPro 9中,你可以指定域对象的如下几种裁剪方式:
· 缺省裁剪方式。这种方式类似于以前版本的Visual FoxPro的处理方式。
· 裁剪最近的字符。它将多余的字符全部裁掉,直至刚好满足输入域的长度。
· 裁剪最近的单词。它将多余的单词全部裁掉,直至刚好满足输入域的长度。
· 文件裁剪方式。如果输入域中的内容中一个非常长的文件路径,那么中间的路径将会以省略号代替,只保留头尾路径。
大小及位置现在可以更方便地控制布局对象的大小以及所处的位置。与原版本不同,当在新版本报表中加入一个对象时,此对象的“From page top”、“From left”、“Height”和“Width”属性都会自动设置。在报表设计器中,“From page top”属性是指对象相对于页面顶端的相对位置。此对象上的所有灰色栏的高度也都被计算在内。改变对象的“From page top”属性有可能将对象移到到另一个区带中去。
相对位置:“From page top”属性和“Height”属性共同确定了当前对象是处于绝对位置还是相对位置。当对象的“From page top”属性的取值范围在报表的区域内,并且“Height”属性小于或等于所在区带的高度时对象就处于相对位置。一般来说,只有区带内的对象才需要使用相对位置,而像Page Header和Page Footer这样的对象则不需要使用相对位置。
绝对位置:当对象的“From page top”属性的取值范围在报表的区域以外,并且“Height”属性大于所在区带的高度时对象就处于绝对位置。绝对位置意味着对象在每页报表中都有着一个精确的位置,不会发生偏移。
我们可以利用绝对位置来为报表增加水印效果。将一幅水印图像放在Page Header区带中,并且将它设为“缩放内容,保持形状”模式。将水印图像的“From page top”属性和“From left”属性设为某组值,这组值相当于你的水印图像在报表中的左上角坐标。然后通过改变“Height”和“Width”属性来指出水印的大小,但注意的是不要将图像的尺寸设得过大,以免超过了打印区域的边界。
增强的数据分组功能
Visual FoxPro 9报表设计器对数据分组功能做了一些改进,增大了数据分组的最大数量限制以及对水平栏的改进。
最大数据分组数最大数据分组数从原来的20个增加到了现在的74个。实际原来的版本也支持最大74个数据分组数,但由于原来的界面只支持20个数据分组的输入,从而导致了这种限制。
水平分栏在以前的版本中,如果要为一个数据组定义多个水平分栏的话将会浪费很多报表空间。并且第一行第一列与报表的顶端之间有一些空白,数据还会从行1列2开始显示。并且在每个数据组中都会有一个多余的区带,如图10所示。即使数据组的页头区带的高度为0,Visual FoxPro 仍然将保留这些空白,如图11所示。
图10. 当为数据组定义多个水平分栏时,原来版本的Visual FoxPro浪费的报表空间
图11. 即使数据组的页头区带高度为0,原来版本的Visual FoxPro仍将保留这些空白
在Visual FoxPro 9中数据组分栏得到了改进。当报表设计器发现一个新数据组时,它将从第一列开始显示,直至満行。如果不满一行,那剩下的部分将以空格填充。如果还有未打印完的明细记录的话,那这些记录会从下一行开始输出,如图12所示。如果数据组的页头区带的高度为0,则Visual FoxPro 将不会保留任何空白,如图13所示。
图12. 将数据组进行水平分栏时,Visual Foxpro 9将节省更多的空间
图13. 如果数据组的页头区带高度为0时,Visual Foxpro 9不会保留任何空白
多条明细区带这个新增功能其实早在以前就很需要,它是对老版本的一个很大的改进。它能让你在一个父表中为每一条记录处理相对应的子表,这种报表格式的一个典型实例如图14所示。






