2008年03月31日 星期一 下午 03:10
我们在文字处理过程中,常常在打印前要预览,以便控制打印效果,特别在数据打印中要有选择地打印页面,更需要预览。PowerBuilder
提供了程序开发过程中的数据打印预览,下面介绍在程序应用中实现打印预览通用方法。
打印预览窗口w_preview
一、下面讲述创建上述窗口的实现过程:
1.创建一个新窗口W_preview,设置该窗口的类型(WindowType)为child!
2.在主窗口中按示意图放置各个控件:
Gb_1:用于显示的控件按钮,放在窗口最上面
gb_2:用于显示纵向和横向打印的收音机按钮(rb_1,rb_2),放在窗口的右部
dw_prt:用于显示打印预览结果,放在窗口的左部
3.为窗口创建结构s_preview,具体步骤是:
在结构成员名(Variable Name)中输入“dw_name,sql_txt",在结构类型(Type)中选择“String",以“s_preview"为对象名保存此结构。
4.为窗口w_preview定义Open事件程序如下:
s_preview dwparm
dwparm=Message.Powerobjectparm
dw_prt.SetSQLSelect(dwparm.sql_txt)
dw_prt.Dataobject=dwparm.dw_name
dw_prt.settransobject(sqlca)
dw_prt.object.datawindow.print.preview = "yes"
dw_prt.Object.Datawindow.Print.Preview.Rulers="yes"
dw_prt.Modify("DataWindow.Print.Margin.Left=200")
dw_prt.Modify("DataWindow.Print.Margin.Top=200")
dw_prt.retrieve( )
cbx_1.checked=true
rb_1.checked=true
5.为窗口w_preview定义resize事件程序如下:
gb_1.width=this.workspacewidth( )
dw_prt.height=this.workspaceheight( ) - gb_1.height -this.y -200
dw_prt.width=this.workspacewidth( ) - gb_2.width - this.x -200
gb_2.x=dw_prt.width
rb_1.x=gb_2.x + 40
rb_2.x=gb_2.x + 40
p_7.x=gb_2.x + gb_2.width
p_6.x=p_7.x - p_7.width * 3
p_5.x=p_6.x - p_6.width * 3
p_4.x=p_5.x - p_5.width * 3
p_3.x=p_4.x - p_4.width * 3
二、上述W_preview窗口中各控件说明及相关实现:
1. 命令按钮控件(CommandButton)
p_1:执行打印动作,脚本如下:
dw_prt.print()
p_2:执行保存动作,脚本如下:
string is_filename, is_fullname
if GetFileOpenName ("另存为", is_fullname, is_filename, &
"TXT", "文本文件 (*.txt),*.txt", "d:/", 512) < 1 then return
dw_prt.SaveAs(is_fullname, Text!, False)
p_3: 用于数据窗口翻至首页,脚本如下:
dw_prt.scrolltorow( 0)
p_5: 用于数据窗口向上翻页,脚本如下:
dw_prt.scrollpriorpage( )
p_4: 用于数据窗口向下翻页,脚本如下:
dw_prt.scrollnextpage( )
p_6: 用于数据窗口翻至尾页,脚本如下:
dw_prt.scrolltorow( dw_prt.rowcount())
p_7: 用于关闭打印预览数据窗口,脚本如下:
close(parent)
2.复选框控件(CheckBox)
Cbx_1:用于为预览数据窗口添加显示标尺,clicked的脚本如下:
IF Checked=TRUE THEN
dw_prt.Object.Datawindow.Print.Preview.Rulers="yes"
ELSE
dw_prt.Object.Datawindow.Print.Preview.Rulers="no"
END IF
3.掩码编辑器控件(EditMask):Em_1:用于显示和改变打印预览的相对比例。
3.1为掩码编辑器(Em_1)定义属性,在General页中定义Text为“100”,在Mask页中为Mask定义为“###”,选中Spin Control, 设置Spin
Increment为“1”,设置Spin Range的Min为“1”、Max为“200”
3.2定义用户事件(user events)ue_change, 事件ue_change 的事件标识为pbm_enchange,它是在编辑器值发生改变时触发,脚本如下:
IF Integer(This.Text)>0 And Integer(This.Text)<=200 THEN
dw_prt.Object.Datawindow.Print.Preview.Zoom=Integer(This.Text)
END IF
4.成组框控件(GroupBox)
Gb_1:用于显示上面的控件按钮,放在窗口最上面
gb_2:用于显示纵向和横向打印的收音机按钮(rb_1,rb_2),放在窗口的右部
5.收音机按钮控件(RadioButton)
Rb_1:用于控制纵向打印,脚本如下:
dw_prt.Object.Datawindow.Print.Orientation=2
Rb_2:用于控制横向打印,脚本如下:
dw_prt.Object.Datawindow.Print.Orientation=1
6.数据窗口控件(DataWindow)
dw_prt:用于显示打印预览结果,放在窗口的左部
三、调用上述通用打印预览窗口(w_preview)
在打印按钮clicked!事件下:
s_preview parm
parm.dw_name=dw_1.dataobject
messagebox('',parm.dw_name)
//parm.dw_name='r'+Right(parm.dw_name,Len(parm.dw_name) - 1)
//messagebox('',parm.dw_name)
parm.sql_txt=dw_1.GetSQLSelect()
OpenWithParm(w_preview, parm)
来自:https://www.cnblogs.com/lenya/archive/2010/11/12/3706914.html