PowerBuilder下DataWindow的打印控制技术在线教程

减小字体 增大字体 作者:佚名  来源:本站整理  发布时间:2009-03-16 22:39:00
在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提供了丰富的打印功能,只要我们把有关的函数、事件领会清楚, 灵活地去使用,即可达到预期的目的。

Tags:

作者:佚名
分享到: 微信 更多