PowerBuilder下DataWindow的打印控制技术在线教程
改进后的打印
改进后,每次打印DataWindow前首先弹出一个信息框,提示用户准备什么格式的打印纸,用户确认后,马上给出一个选择窗口,请用户选择打印范围,用户选好范围,确定,即可进入打印进程。 图1
在打印过程中,同时显示打印进度窗口,提示当前打印进展状况, 允许用户随时中断打印过程。窗口格式为 图2
改进过程所使用的技术
改进技术中涉及的有关事件:
·PrintStart事件 DataWindow事件,每次DataWindow打印开始时 触发,系统同时传过来一个long型参数pagesmax,给出本次要打印的总页数。
·PrintPage事件DataWindow事件,在DataWindow每一页打印格式化前触发,系统同时传过来两个long型参数:一个是pagesprinted,给出当前打印页的页号;一个是copy,给出当前打印份数。此外该事件的返回值将控制本页是否被打印,若返回值为0则打印,值为1则将本页跳过。
·PrintEnd事件 DataWindow事件,每次DataWindow打印结束时触 发,系统同时传过来一个long型参数pagesprinted,给出本次实际打印的总页数。
改进技术中用户定义的全局变量:
·printtotalpage integer型变量,存放打印的总页数。
·printstartpage integer型变量,存放打印的起始页号。
·printendpage integer型变量,存放打印的终止页号。
·printpagesize string型变量,存放打印纸规格信息。
·printall boolean型变量,标记是否全部打印,是取值1、否取 值0。
·printcancel boolean型变量,标记是否取消打印,是取值1、否取值0。
改进技术中用户定义的函数:
·fn—dwprintstart()打印初始化函数,由PrintStart事件调用 。
主要功能:提示用户准备什么规格的打印纸,请用户选择打印范围 ,弹出打印状态显示窗口。
调用参数:一个是dw1,DataWindow型,传递本次打印的DataWindow ;
一个是maxpages,integer型,传递本次打印内容总页数;
返回值:integer型,正常打印为0,否则为-1。
·fn—dwprintpage()当前页打印控制函数,由PrintPage事件调 用。
主要功能:判断打印取消标志,即变量printcancel,如为真则取消本次打印;
否则判断当前页是否在用户选择的打印范围内,是则打印,否则跳过;
若打印,修改打印进度窗口中的打印进展信息。
调用参数:一个是dw1,DataWindow型,传递本次打印的DataWindow ;
一个是currentpage,integer型变量,传递当前打印页号;
返回值:integer型,打印0,跳过为1。
改进技术中用到的窗口:
·w—printdiag 打印会话窗口,为应答窗口,用户可通过它指定打印范围,以便确定printstartpage、printendpage两个变量的取值 。
·w—printing 打印状态显示窗口,为弹出式窗口,显示打印进展信息,用户可通过它终止打印过程,即将变量printcancel置为真。
有关程序脚本
1.fn—dwprintstart()函数的脚本
int i
/*弹出提示框,提示用户准备什么规格的打印纸 */
i=MessageBox("准备打印","请放好"+printpagesize+&"打印纸, 准备打印~n是否确定?",Question!,YesNo!,2)
/* 如果用户选择确定,则继续打印 */
if(i=1)then
/* 将全局变量printtotalpage赋值为本次打印总页
数赋值*/
printtotalpage=maxpages
/* 打开选择对话窗口*/
Open(w—printdiag)
/* 判断全局变量printcancel,若取值为假,则打开打印状态显示 窗口,继续打印*/
if(printcancel=false)then
Open(w—printing);
return(0)
end if
end if
/*取消本次打印,返回*/
dw1.printcancel
return(-1)
2.fn—dwprintpage()函数的脚本
/*变量skipit存放返回码,控制本页是否打印,为0则打印,为1则 跳过*/
int skipit;
/*判断全局变量printcancel,若取值为真,则取消本次打印,返回 */
if(printcancel=true)then
dw1.printcancel()
return(1)
end if
/*判断全局变量printall,若取值为真,则打印所有页,将skipit 同赋为0*/
if(Printall=true)then
skipit=0
elseif(currentpage>=printstartpage and currentpage<=prin tendpage)then
/*否则,判断当前页是否在指定的打印范围内,如是,则打印,将sk ipit赋为0*/
skipit=0
else
/*否则,跳过本页,将skipit赋为1*/
skipit=1
end if
/*若打印本页,则修改打印状态显示窗口中的打印进展信息*/
if skipit=0 then
w—printing.st—currentpage.text="正在打印第"+string(cur rentpage)&+"页,还剩"+string(printendpage-currentpage+1)+"页"
end if
/*返回skipit*/
return(skipit)
3.w—printdiag窗口中的脚本
open事件脚本:
/*先将打印范围取默认值,即打印起始页为1,终止页为最大页*/
em—start.text="1"
em—end.text=string(printtotalpage)
【确定】按钮clicked事件脚本:
double
i
//不取消本次打印,将全局变量printcancel置为假
printcancel=false
/*根据用户选择的打印范围,将全局变量printall、printstartp age、printendpag e初始化*/
if rb—all.checked then
printall=true
printstartpage=1
printendpage=totalpage
else
printall=false
em—start.getdata(i)
printstartpage=int(i)
em—end.getdata(i)
printendpage=int(i)
/*若用户指定的起始页大于终止页,提示用户重新输入,返回*/
if(printstartpage>printendpage)then
Messagebox("起止页号错误","请正确填写起止页码")
return
end if
/*根据用户指定的打印范围,修改打印总页数*/
totalpage=printendpage-printstartpage+1
end if
/*关闭w-printdiag窗口*/
close(parent)
【取消】按钮clicked事件脚本:
/*取消本次打印,将全局变量printcancel置为真,关闭w—printd iag窗口*/.
printcancel=true
close(parent)
4.w—printing窗口中的脚本
open事件脚本:
/*设置打印总页数提示信息*/
st—totalpage.text="打印内容共"+string(totalpage)+"页"
【取消】按钮clicked事件脚本:
/*取消本次打印,将全局变量printcancel置为真*/
printcancel=true
使用方法
使用本技术控制打印某个datawindow,只须完成下列工作:(在这里假设要打印的Dat aWindows是dw—1)
对dw—1的有关事件编写脚本:
PrintStart事件
/*调用打印初始化函数,并将本次打印的DataWindow及打印总页数传递给它*/
fn—dwprintstart(this,pagesmax)
PrintPage事件
/*调用当前页打印控制函数,并将本次打印的DataWindow及当前页数传递给它*/
fn—dwprintpage(this,pagesprinted)
PrintEnd事件
/*关闭打印状态显示窗口*/
close(w—printing)
用下列脚本与打印dw—1对应:
/*将打印纸规格信息存入全局变量printpagesize,调打印函数*/
printpagesize="××××××"
dw—1.print(false)
以上是一种实现打印控制的改进技术,从中可以领略到PowerBuil der提供了丰富的打印功能,只要我们把有关的函数、事件领会清楚, 灵活地去使用,即可达到预期的目的。