1、Powerbuilder 中数据窗口打印和预览的设计和应用【关键词】 Powerbuilder 关键词: Powerbuilder;数据库;打印;预览;程序设计 0 引言 在 Power builder中设计一个打印格式要求较高的应用程序时,经常需要对欲打印的内容事先按一定的比例进行预览,对打印页面按一定的要求进行设置,以保证不同情况下的打印输出效果.为此,我们设计了数据窗口打印和预览程序. 1 数据源打印窗口设计 1.1 首先新建一个窗口 在该窗口中适当位置插入数据窗口控件,并为该控件命名.在 Power builder的命名规则中数据窗口控件名字以“dw-”为前缀(本文以 dw-1为例).
2、 1.2 建立数据窗口对象 选择数据源和显示风格,选择要连接的数据库表和视图.为了美化和增强数据窗口对象的功能,上述操作后可对数据窗口中的字体及各工作区的布局、颜色等进行设计.也可以将静态文本、计算对象、位图图像以及线段、矩形、椭圆等对象加到数据窗口的任何区域中.完成了数据窗口的总体设计后保存数据窗口对象,数据窗口对象的名字系统默认以“d_”为前缀.由于打印和浏览有一定区别,如有些背景图案、颜色等只适合显示浏览而不适合打印,所以除了建立可视的数据窗口对象外,还应建立一个非可视的数据存储对象(本文命名为ds_1). 1.3 将数据窗口控件与数据窗口对象相关联 选择已建立的数据窗口对象名称,可适当
3、调整数据窗口控件的大小,以适应数据窗口对象的显示预览和打印. 1.4 在该窗口的适当位置建立预览和打印按钮等 各按钮的编程代码介绍如下:预览放大按钮的 Clicked事件设计为:dx=dx+10/dx 为每按一次该按钮后的放大系数 dw-1.object.datawindow.print.preview.zoom=dx/设置放大功能预览缩小按钮的 Clicked事件设计为:if dx20then/该条件为当 dx系数值20 不许再缩小.dx=(dx)-10/每按一次该按钮后的缩小系数 end ifdw-1.object.datawindow.print.preview.zoom=dx/设置缩小
4、功能打印按钮的 Clicked事件代码设计为:Open with Parm(w-printsetup,dw-1)或 Open with Parm(w-printsetup,ds-1)利用该语句在打开一个窗口时将某些参数传递给该窗口.第一项参数为要打开打印参数设置窗口;第二项指定传递给打开窗口的数据,该数据保存在Message对象的属性中. 2 打印参数设置窗口的设计 在 Powerbuilder中 Datawin-dow对象的打印特性有许多,可以满足不同的需要.以下是我们在应用程序设计中建立的打印环境设置窗口,在该窗口设计了三个标签对象即打印设置、页面设置和打印预览标签,在本例中标签名为 ta
5、b-1,各标签页名分别为 tabpage-1,tab-page-2 和tabpage-3.在各标签页中分类设置打印参数. 2.1 定义实例变量 object io-obj/定义对象类型变量 datawindow win-dw/对应上级窗口传递来的可视数据窗口对象 datastore ids-win/对应上级窗口传递来的非可视数据存储对象 string dw-or-win 2.2 该窗口的 Open事件中的程序代码如下:io-obj=message.powerobjectparm.typeof()/得到上级窗口传递来的对象类型 CHOOSE CASE io-objCASE datawindow!
6、/当对象类型为可视的数据窗口对象时作以下参数设置 win-dw=message.powerobjectparm/将传来的数据窗口对象赋给变量 win-dw这里还需要设计以下三种功能代码:判断打开该窗体时的打印预览状态(程序代码略)判断打印方向,包括横向、纵向、缺省(程序代码略)打印机纸张类型与边界设置(程序代码略) 2.3 “打印设置”标签页中控件和事件代码 打印份数设计为“掩码编辑控件(Editmask) ”,在其属性对话框中为该控件取名为 em-copies,同时设置取值增量和取值范围等属性. 打印范围设计为两个“单选按钮(Radiobutton) ”和一个“单行编辑框(Single li
7、ne edit) ”,在各自属性对话框中为这三个控件起名为rb-all,rb-part 和 sle-pagenumber.rb-all控件设计 clicked事件代码为:if this.checked then/如果选择该项,则 sle-pagenumber置为无效.sle-pagenumber.enabled=falsesle-pagenumber.text= end if对rb-part设计 clicked事件代码为:if this.checked then/在 sle-pagenumber中填写打印的部分页码数.sle-pagenumber.enabled=truesle-pagenum
8、ber.setfocus()end if 2.4 “页面设置”标签页中控件和事件代码 纸张大小设计 为“下拉列表框(Drodrowlistbox) ”,在其属性框中起名为 ddlb-papersize,并输入纸张大小的内容项.应注意的是 Datawindow对象的Print.paper.size的有效值序号是从 0开始的,而在下拉列表框中内容项是从 1开始的,在编程时要考虑到此差别.为其所编写的 modified事件代码是(程序代码略). 页边距上、下、左、右分别设计为“掩码编辑控件(Edit-mask) ”,在各自的属性框中为其起名 em-top,em-bottom,em-left 和 em
9、-right.并对各控件设置适当的增量和取值范围. 打印方向设计为两个“单选按钮(Radio button) ”,纵向按钮和横向按钮,分别起名为 eb-portrait和 rb-landscape.打印方向 2是纵向、1是横向、3 是使用缺省值.纵向按钮的 clicked事件编码为:win-dw.object.datawindow.print.orientation=2横向按钮的 clicked事件编码为:win-dw.object.datawindow.print.orientation=1 是否选择彩色打印设计为“复选框(Checkbox) ”,为其取名 cbx-color. 2.5 “打
10、印预览”标签页中控件和事件代码 打印预览和打印标尺分别为“复选框(Checkbox) ”,为其取名 cbx-preview和 cbx-rulers.再为打印预览控件的 clicked事件的编码(程序代码略)预览缩放比例在这里设计了四种“单选按钮(Radio but-ton) ”,分别起名为 rb-1,rb-2,rb-3 和 rb-4.各单选按钮的 clicked事件编码为:win-dw.object.datawindow.print.preview.zoom=200在此分别取值为200,100,50,33.当然,也可以为预览缩放比例设计一个“掩码编辑控件(Editmask) ”使其任意选值.其
11、 modified事件的编码可写为:win-dw.object.datawindow.print.preview.zoom=integer(tab-1.tabpage-3.em-custom.text) 2.6 窗口按钮控件 “打印机设置”按钮取名为 cb-printer,对其clicked事件的编码可写为 printsetup().在执行时会弹出打印机设置对话框,可在其中选择打印机类型.“取消”按钮取名为“cb-cancel” ,对其 clicked事件的编码可写为 close(parent).“确定”按钮取名为“cb-ok”.单击该按钮,可对该窗口的三个标签页对象内的各选项进行认可,并按此进行打印或预览.其 clicked事件的编码与 open事件类似,也应判断是否为可视对象,再分别设置各类参数. 3 小结 以上是我们用 Powerbuilder设计大型应用程序时关于 Datawindow中打印的具体实现,并在实践中得到应用.当然,随着应用目的的不同,可能还有其他更为复杂的要求,本文的设计思路会对设计者有一定的启发.