返回


1996年 .第49期 .软件与编程


编程技巧


PowerBuilder应用开发系列讲座(6)

DataWindow的打印输出(续)

华天新技术开发公司 张健姿

打印控制函数

PowerBuilder提供了一组打印控制函数来控制要交给打印机打印的对象。第一个函数PrintOpen()在这章的前面我们已介绍过了,其它还有:

PrintCancel(print_job_number)

这个函数将中止打印作业号所打印的作业,不发送任何内容给打印机。

datawindowcontrol.PrintCancel()

这个函数与上一函数的区别是:这个函数取消的是用Datawindowcontrol.Print()提交的作业。

PrintClose(print_job_number)

这个函数将关闭指定的打印作业并且把它发给打印机(或者假脱机程序)。为了避免挂起打印作业,所有打开的打印作业都应在应用的结束前被关闭或取消。

PrintDefineFont(print_job_number,fontnumber,facename,height,weight,font-pitch,fontfamily,italic,underline)

你可以用这个函数定义字型。Power-Builder允许在一个打印作业中使用八种字型,用这个函数可定义其中的任一个。这个字型所属的打印作业号由Print_job_number参数指定,font_number参数是这个打印作业所采用的字型号(1-8)。其余的参数描述了字型如何显示,是否斜体字、粗体和下划线等。facename参数是一个包含了你所定义的字体名字的字符串(例:courier 100CPI)。height参数是你所需的以千分之一寸为单位的字体的高度(例:250将是一个18点阵courier 10 CPI字体),height参数也可使用一负值来表示点阵数指定点尺寸(例:-18是18点阵)。weight参数值是您所要的字型的笔画权值(例:400是平常正文,700是粗体)。fontpitch参数是一个枚举数据类型,它指定了字体的间距(Default!,Fixed!或variable!);fontfamily参数也是一个枚举类型,指定了字体系列(AnyFont!,Decorative!,Mod-ern!,Roman!,Script!,Swiss!)。这两种参数只在基于Windows的操作系统中使用,在Macintosh等机 器中不能使用。italic参数是一个布尔型变量,指定字体是斜体(True)或非斜体(False),underline参数也是一个布尔值,用法同上。

PrintOpen()

这个函数已在这章的开始讲述过了,它定义一个打印作业以便将所有的打印项成组发送给打印机。它的返回值是唯一的打印作业ID,如果返回值为负,则意味着产生错误。

PrintPage(print_job_number)

这个函数将指定的打印作业的当前页传送给打印机(或假脱机程序),并另起一页用于之后的打印集。

PrintSend(print_job_number,string{,zero_character})

这个函数在打印作业中发送一个特定的字符串给打印机。这个字符串一般是一个包含转义字符的命令串用来启动或操作打印机。这些打印机的控制代码因打印机的不同而不同,您应查询您的打印机手册来得到正确的代码。

这个与打印机进行通信的字符串应是一个ASCII码集,并以ASCII码0来结束。如果你需要发送ASCII码0,你可以用另外的一个字符来替代0,给定的这个替代字符的ASCII值由可选参数 zero-character来指定。这个函数一般用于改变纸的定向(Landscape或por-trait)或者改变 打印用的纸盘等。

PrintSetFont(print_job_number,fontnumber)

这个函数设置当前打印机字体,它是你使用PrintDefineFont()函数中定义的八个字体中的一个。

PrintSetSpacing(print_job_number,spacing)

这个函数使用Spacing参数来决定正文行之间的行距。这个值乘以当前字体高得到行距,缺省值是1.2。

PrintSetup()

这个函数调用Windows的Print Setup对话框,实际显示的Setup窗口依赖于你所安装的打印机驱动程序。

PrintWidth(print_job_number,string)

这个函数的sting参数返回字符串的宽度(以千分之一寸为单位)。返回值的大小是依赖于当前选择的字体。

PrintX(print_job_number)

这个函数返回当前打印光标的X坐标(水平)值。

PrintY(print_job_number)

这个函数返回当前打印光标的Y坐标(垂直)值。

除非特别说明,上述函数的返回值1意味着成功,-1意味着失败。

DataWindow控件的打印属性

使用modify函数,我们可以改变DataWindow的打印属性。在打印DataW-indow之前,我们可以调用如图所示的窗口,从而得到我们想让用户设置的参数。这个窗口在PowerBuilder Enterprise的实例库中,您也可以在直接调用它前对其显示界面进行汉化和作适当修改。

例如,我们使用下面语句来改变我们想打印的份数。

dw_data..Modify("DataWindow.Print.Copies=3")

你可以使用PowerBuilder Enterprise打包软件DWSYN40.EXE----DataWindow语法生成器来建立Modify语句。

下面所列的可以修改的参数全部以DataWindow.print为前缀,后接这个属性。

Collate=Yes or No(缺省为no,不作校对)

这个属性用来指示是否要对打印进行校对。校对通常较慢,因为整个打印过程必须反复几次以得到一个校对后的结果。

Color=1(彩色)or 2(单色)

这个属性指示传送给打印输出的是彩色(如果你有一台彩色打印机)还是单色。

Columns=<an integer>(缺省为1)

这个属性用来指示DataWindow以报纸风格打印在一页上的栏的数量。

Columns.Width=<an integer>

这个属性指示以报纸风格打印的栏的宽度(基于为DataWindow指定的单位)。

Copies=<an integer>

这个属性指示你所需的打印的数量。

DocumentName=<a string>

这个属性可以让你为文件设置一个名字。这个名字在DataWindow传送给打印机时在打印序列中出现。

Duplex=1(单一)or 2(水平)or 3(垂直)

这个属性指示打印输出的方向。

Filename=<filename string>

这个属性仅当把DataWindow输出为一个文件时才有用。这个属性包含的字符串是将在磁盘中存储的文件的名字。

Margin.Bottom=<an integer>

这个属性为一整型指示页面下部空白的宽度(用DataWindow指定的单位)

Margin.Left=<an integer>

功能与Margin.Botton相同,但指示的是左侧空白宽度。

Margin.Right=<an integer>

功能与Mangin.Bottom相同,但指示的是右侧空白宽度。

Margin.Top=<an integer>

功能与Mangin.Bottom相同,但指示的是顶端空白宽度。

Orientation=0(打印机的缺省设置)或2(横向打印)或3(纵向打印)这个属性用来指示打印定向。你可以使用打印机缺省设置,或者设置成Landscape或Portrait模式,覆盖缺省的打印设置。

Page.Range=<page range string>

这个属性为一字符串指明你要打印的页数。在字符串中的数字用逗号分隔,或者数字之间用由一横线分隔表示一范围或两者同时使用,例如:"1,2,3,6-12",空字符串表示要打印所有的页。

Page.RangeInclude=0(全部打印)或1(打印奇数页)或2(打印偶数页)

这个属性用来指示在Page.Range指示的范围中哪些页要打印。你可以先选择打印偶数页,然后将纸放入打印机中,再选择奇数页打印。这一功能像在打印书时那样,需在纸的两面打印时非常有用。

Paper.Size=<an integer>

这一属性用来指示打印纸的尺寸。可接受的值如下:

0-缺省

1-Letter 8 1/2 x 11 in

2-LetterSmall 8 1/2 x 11 in

3-Tabloid 17 x 11 inches

4-Ledger 17 x 11 in

5-Legal 8 1/2 x 14 in

6-Statement 5 1/2 x 8 1/2 in

7-Executive 7 1/4 x 10 1/2 in

8-A3 297 x 420 mm

9-A4 210 x 297 mm

10-A4 Small 210 x 297 mm

11-A5 148 x 210 mm

12-B4 250 x 354

13-B5 182 x 257 mm

14-Folio 8 1/2 x 13 in

15-Quarto 215 x 275 mm

16-10 x 14 in

17-11 x 17 in

18-Note 8 1/2 x 11 in

19-Envelope #9 3 7/8 x 8 7/8

20-Envelope #10 4 1/8 x 9 1/2

21-Envelope #11 4 1/2 x 10 3/8

22-Envelope #12 4 x 11 1/276

23-Envelope #14 5 x 11 1/2

24-C size sheet

25-D size sheet

26-E size sheet

27-Envelope DL 110 x 220 mm

28-Envelope C5 162 x 229 mm

29-Envelope C3 324 x 458 mm

30-Envelope C4 229 x 324 mm

31-Envelope C6 114 x 162 mm

32-Envelope C65 114 x 229 mm

33-Envelope B4 250 x 353 mm

34-Envelope B5 176 x 250 mm

35-Envelope B6 176 x 125 mm

36-Envelope 110 x 230 mm

37-Envelope Monarch 3.875 x 7.5 in

38-6 3/4 Envelope 3 5/8 x 6 1/2 in

39-US Std Fanfold 14 7/8 x 11 in

40-German Std Fanfold 8 1/2 x 12 in

41-German Legal Fanfold 8 1/2 x 13 in

Paper.Source=<an integer>

这一属性是一个整型值,指明纸的来源。可接受的值如下:

0-Default

1-Upper

2-Lower

3-Middle

4-Manual

5-Envelope

6-Envelope manual

7-Auto

8-Tractor

9-Smallfmt

10-Largefmt

11-Large capacity

14-Cassette

Preview=Yes(进入打印预览状态)或No(缺省-退出打印预览状态)

这个属性允许您的DataWindow进入和退出打印预览状态。这种状态可以所见即所得地看到用户即将打印的结果。

Preview.Rulers=Yes(显示标尺)或No(缺省-不显示标尺)

这个属性是指Print Preview状态下,是否要在DataWindow对象上显示标尺。

Preview.Zoom=<an integer>

这个属性是Print Preview状态下,为预览的DataWindow指定一个放缩因子。缺省值为100%(Preview.zoom=100%)

Prompt=Yes(缺省-显示提示)或No(无提示)

这个属性可以控制PowerBuilder显示一个允许用户在作业打印前取消打印作业的提示。

Quality=0(缺省)or 1(高)or 2(适中)or 3(低)or 4(草稿)

这个属性可以选择打印输出的质量。

Scale=<an integer>

这个属性指定打印输出放大或缩小的比例。

制作一个屏幕打印:如何打印全屏

PowerBuilder 4.0的一个新特征是可以把屏幕图像提交打印作业,在纸上的任一点打印屏幕。我们使用PrintScreen()函数实现这一功能。

PrintScreen()的语法如下:

PrintScreen(print_job_number,x,y{,width,height})

执行这一函数,在指定的打印作业中将当前屏在由X,Y参数(千分之一寸为单位)指定的坐标处打印。width和height参数指示你所要的打印屏幕的宽和高。最后这两个参数是可选的,如果缺省,屏幕将按初始的宽度和高度打印。

本版责任编辑 刘晓龙