万卷书>>电脑书籍>>程序设计>>pb程序设计>>PowerBuilder使用技巧集

WANJUANSHU.COM

PowerBuilder下DataWindow的打印控制技术


  在PowerBuilder中,如果我们只是简单地调用Print()函数来打印报表,它会将DataW indow中的数据全部打印出来,而我们有可能只需要报表中的一部分,因而我们需要对这种打印方法予以改进。

  改进后的打印

  改进后,每次打印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提供了丰富的打印功能,只要我们把有关的函数、事件领会清楚, 灵活地去使用,即可达到预期的目的。

  山东财政学院信息系 (250014) 李文继 杨莉萍 《计算机世界》98年7期
上一页 WanJuanShu.COM 下一页
WANJUANSHU.COM 万卷书