2024年5月6日发(作者:)

维普资讯

第22卷第2期 

2002年2月 

文章编号:1001—9081(2002)2一(;093—02 

计算机应用 

Computer Appficafions 

Ⅵ22.No.2 

Feb.,2002 

PowerBuilder数据窗口打印控制技术及通用打印模块的设计 

黄洪 

(浙江工业大学经贸管理学院管理科学与I程学科,浙江杭州310014) 

摘要:文中介绍使用PowerBuilder开发信息系统时数据窗口的打印控制技术,包括打印预览、部 

分打印、缩放打印、边界设置等,并给出了一个具有实用价值的可以挂接任何数据窗口的通用打印模 

块设计实倒。 

关键词:PowerBuilder;打印;数据窗 ;通用程序设计 

中图分类号:3tB91.41 文献标识码:A 

值为整型 

1 引言 

PB是目前开发信息系统的重要工具,其独有的数据窗El 

技术使得对数据库数据的操纵和显示等相关程序的设计变得 

非常方便。使用数据窗El,不仅可以查询显示数据,而且可以 

通过使用 nt()和prlntdatawindow()函数方便地实现数据窗12 

的打印。但信息系统的用户对打印常常需要实行更复杂灵活 

的控制,如在打印之前进行预览、选择部分页面打印、改变纸 

D uH蹦£ 

字符串 

文档名称 

Du e:c:打印方向 

值为整型:J鲑省岛m (…):2水平;3垂直 

n盼 :底部更面边界的宽度 

值为整型 

西n.L :页面边界的宽度 

值为整型 

M 目n.I{j 页面边界的宽度 

值为整型 

M峨 n 1砷:页面边界的宽度 

张大小进行缩放打印、设置打印边界,等等。要象Word等字 

处理软件一样允许用户设置各种打印选项, 实现上述对数 

据窗口打印的完全控制,则必须了解数据窗口的打印属性并 

进行较复杂的编程。本文将详细舟绍数据窗口打印的相关技 

值为整型 

∞ m:打印方向 

术,并给出一个通用的数据窗口打印程序的设计方法。 

值为整型0使用打印机的毓省设置 I横向:2纵向 

2数据窗口的打印控制技术 

对于数据窗口的打印控制,主要是通过设置数据窗口 

R 打印的页面范泪 

值为字符串,页_面数字用逗母分开。形如 1,2,5—1 。若为空 

则打印所有页 

print属性下的相关属牲来实现。获取和设置数据窗El的打印 

届l生通常使用两种方法:点标记方法和数据窗El函数。其相 

应的语法形式如下: 

I ̄nge[ndude:指定打印页 

值为整型 进一步指定要打印I-进范围中的哪些页:0打日I全 

都页,l打印偶数更;2}丁印奇数页 

Paper.Size打印纸张太小 

点标记语法 

ob 。c£D出W m .P m properet' 

获取属牲值: 

Ve ̄nb/e=d c曲酬

值为整型:O采用打印机的缺省设置:1到41舒剐对应不同太 

小的标准纸张 

设置属性值: 

d ̄'-eontrd.Obj ̄t.1)nlaWin& ̄'Print property= 

Pte ̄4ew:是否采用打印预览方式先时数据宦口 

Yes采用:No不采用 

Preview Rule ̄:在预览方式下是否显示标尺 

Yes显示标尺 N0不娃示f缺省1 

Preview zlx邢:预览时的显示比例 

使用函数 

k r DataWir ̄-Pnm),top=me) 

获取属性值: 

Va ̄ab]e=dve_mntm/D 

值为整型,表示百舟比 缺省为100% 

设置属性值: 

dw—cl圳 .M 曲P HwLnd Print} 竹:value 1 

若要将数据窗口进行缩放打印则还要用到下面一个属 

性,该属性为数据窗El对象的缩放比例,值为整型,表示百分 

比,缺省为100%。该属性的点标记形式为: 

dw-contrd obj ̄t.DataWindow.Zoom,在函数中使用则取 

DataWindow z0o 

其中参数 一c0【|tm1是数据窗口控件名,property是打印 

属性名,v ue是赋给属性的值。常用的打印属性及其取值如 

下: 

Color:确定是舌彩色打印 

值为接型1彩色打印;2单色打印 

c eH打印份数 

收稿日期:2001—08—17 

3通用打印程序的设计 

通用数据窗口打印程序的设计思路是将皱打印的数据窗 

作者简介:黄洪,副教授,主要研究方向:数据库系坑、管理信息系统、决策支持系统、电子商务 

维普资讯

计算机应用 

口(源数据窗口)复制到通用打印窗口的数据窗口(目标数据 

窗口)中,通过对目标数据窗口的控制实现对源数据窗口的打 

 ̄X)02阜 

接受用户对打印内容的选取,并返回用户的选择结果 “打印 

内容设置”按钮调用该窗口,并根据返回的值完成打印内容的 

设置。 

印控制。其具体实现方法如下(限于篇幅,仅给出关键部分的 

脚本代码): 

3 1通用打印窗口及其初始化 

建立通用打印窗口w--print,其上包括一个目标数据窗口 

控件 一print,以及对该数据窗口控件进行控制的若干命令 

图2 

按钮等如图1所示(为节省篇幅对数据窗口进行了压缩)。 

图1 

首先定义以下实例变量: 

dat啪ndow dw…: 

intege ̄1 p“nL rT e=I.ii-prl 。0p I, 

ikpagecount.iLrange--incl ̄le=0 

ng{ pnnLrange=~0; 

在该窗口打开时,完成从源数据窗口到目标数据窗口的 

复制,并进行相关初始设置。窗口打开事件的脚本如下: 

blab lblh-d ̄statusidw-seurce=me a f)州 e pa肺 

//按取赦打印的数据窗口对象(源数据窗口) 

//根据瓿取的数据窗口对象柏语法,在数据窗口控{牛 

d u兀m巾动态创建目标数据宙l l对象 

dw_print creme(id e de l)ef”data ̄ndow syntax"1 

//获取泺数据窗口的完整状忠,并以之设置d pnnt中的目标数 

据窗口对象}l勺状态 

ldw—getfullstate(1bLdwstatus) 

nt sefullstat ̄(1 d ̄-ztatus) 

//根据操数据窗口的排序规则对目标数据窗口进行排序,并重新 

计算分组数据 

面m.sort() 

dw_ptint 州 p c() 

/,将目标数据窗口设置成打印欲览方式井显示标j己 

dw-ptint.modify(“datawindow.prim p ̄'iew datat ̄ndow.print. 

口r …【… ) 

I埘ev哪 L SlInwpa ()//触发用户定义事件,获得并显示页码 

this.title=dw_prim d ̄be(’data ̄ndow.v,in【d0cu口 一) 

//显示打印数据窗口文档的名 

ern- ̄sle曲n=r100% //显示缩放打印的初始比例 

dmⅨ ∞k【em= 100%’ 

/,显示打印预览的初始显示比例 

if dw_pfint.RowCotmt()=0 Then 

//投有数据,使得个打印设置按钮无效 

cb—pd咄Ea ̄led=F 

eb-set ̄r Enabled=蹦 

ch Ⅱ【.ETⅢ ed=F 吕e 

ch-last Enabled=F e 

eh-…Fambled=f 

eh-n哪Enab[耐=False 

mdif 

3 2数据窗口打印内窖的选取 

建立一个reporase型窗1:3 w_wlmt_ta.-ptlrtt如图2,该窗1:3 

本窗口的 确定 命令按钮的脚本如下: 

String lB—Tt 

if ii-pdnLnrode=1 th帆 

一 

nLr =。0, 

endif 

lffi—pdn ̄mode=2 11lcn 

{s—p玎nL硼 8l p且gLra 1 m 

Ifis_pfinLt'ang ̄= Or kNu¨(L pdnL T )’Fhm 

¨_I nLmde=1 

L Drin ̄range= 0 

Et1tj 

E 

L1一pnn ̄mpies=ln ( n~∞py m) 

IL咖=S ̄ing(ii—pfint-copies)+ * +stxing(ii—r ̄nge-include) 

+ * 十&S (iLpnnL 1+ ”+ 一 L 

C[ ̄WithRetura(Parent,】LT【l1 J 

“打印内容设置”命令按钮的脚本如下: 

stirng IL p ,】 

inte ̄r li-6 .1i—seco ̄ 

】0 g lEon'redraw 

0perI( 一 诅L n—p nt) 

Message.Dt ̄lePann=一1 rl ̄en 

I"U ̄IIm 0 

£r】dⅡ 

/,从返回的字符串中析出要设置的参数 

ts-mpann=Message SCdn 盯m 

lL6 =P昭(1 |etp n. *”,1) 

ikllnnt-copim=Integer(Mid(1s_ ̄.1 1L6 一lJ) 

】L—nd=Pos(】L憎p 瑚, * .h_ r8E十1) 

ii-range-include=integer(Midns— par【『1.IL 【十I.[i-seeocxt 

1L-6商一11) 

ILfirst=Iksecocxt 

ti_secmd=P ̄(1s-re,pann. * .1L 十1) 

ikpfint-mode=iate ̄r c!v[td(】LⅡmmn.[i-first+I,1k ̄nd一 

】L6 一1" 

{s—pnnLr Mid([s-re,pann,I1 d+l,Len(IL p明n) 

ti_sectmd) 

dw_pfim a,jec【.DalaWit ̄"Print c叩i =【Lp nLc叩 髑 

//设置打印份戥 

Choose Case ik Tn—n ode //设置打印范围 

Case1 ,,打印生都 

dw-ptlnt Object l ̄mWindow.Print.P }Range= 

Case 2 //?E尉打印 

dw print,Object D {nd㈣Pdnt Page.R岫 =LL 

P n ̄r/mge 

(下转第96页) 

维普资讯

计算机应用 

在取消紧急通行后,方可恢复正常通行,反之亦然。 

利用VB6.0作为开发工具,在Windows98环境下,实现了 

lal ̄ll7.LinkPoke 

2OO2丘 

上位机与Pig之间的串行通信,成功地在交通信号灯控制系 

统中进行了实验。部分通信程序如下: 

定义公用变量; 

Publicflag,flgln AsInteger 

l", ̄bhc n sL 

h Ⅱ 

下面是黄灯亮的控制程序 

Ifn(=4 Then 

Shape2 FillCol0r=&tWFFF& 

S}la FillCol_1r=&HH1下F& 

Shapel FillCdor=&H0& 

Ska ̄3 FiIlCdor=&嗽 

下面是南北紧急通行控制程序: 

ne Sub Commm ̄l_ClJekf 

日mDe4 FillCcam-=&HOg, 

Sk .FillCd ̄=&H0& 

丌i =I 

Hag I 

[abeD.C叨 帅= ,’ 

If =I T11m 

[abe17.1jnkMcde=2 

[abe17 IinkP&e 

End 

Skmpe6.E1]Col ̄=&H 

Sh瞄.FillCd ̄=&I-WF0 ̄ 

ShaDe1.Fil1Color=&肿& 

EndIf 

5结束语 

随着PLC应用的日益普及,对PLC的监控和管理显得非 

常必要。在PLC与上位机的实时通信中,上位机通过通信程 

序对PLC进行读写操作,而Pig无需做复杂的编程,通过通 

End Sub 

下面是取消紧急通行的程序: 

蹦 Sob Cmmand4一C1 ck c' 

LInlo ̄dMe 

Ttre ̄l Fmalaled=Fdge 

l"ur ̄l E,udaled=Fak ̄e 

Fad 

信模块和简单的设置即可响应上位机的命令。 

本文所述的通信程序已成功地用于上述的控制系统中。 

通过该通信软件,利用C ̄ZNBUS的性能和特点,对一定距离内 

的交通干道上的各个十字路1:3的交通状况进行监视和控制, 

完成“点控制”向“线控制”的跨越。同时本程序实现了上位机 

下面是南北通行绿灯亮东西红灯亮的控制程序 

lf n>14 7md n<=20 T11肌 

Shape6.nI1Cd_1r=&Hf 

Sh ̄_3 阳1Cd_1r=越 

Sh ̄oe1.FfllCo]or=&H0& 

Sha ̄2.FiIICo]or=&}l0& 

sII印e5 FillColor=&m& 

Sty,4 FiIIC oF=&} & 

Lal ̄13 CⅡDd0n= 

& 

与PLC之间的通信,不仅适用于交通管理,对于建筑管理、消 

防管理和楼宇自动化皆有一定的借鉴意义。 

参考文献 

I1】邬宽明.c 总线原理和应用系统设计【M】.北京:北京航空航 

天大学出版社,1996. 

【2】阳宪惠现场总绒技术及其应用【M】北京:清华大学出版社. 

1999 

Label3.LinkMode=2 

(上接第 页) 

c心 3 

]l-c ̄rrenn'ow= —pfint 

1L Te【1忡

() 

I dⅡ 

//当前页 

=dv_Frint.d ̄fibe( evaluate( page(1 . +stirng 

Ⅱli_scale(10 

T Text= 1O% 

IL-scale=10 

EndIf 

{】LcuT眦1廿0w)+ ) ) 

iflea(k_emTentpnge)>0 1hen 

dw-wnt modify( DataWi.dow.Zoom= +St:rlng(Integer(1i_scale}” 

3.4打印机、打印纸等的选择及打印边界的设置 

+1 d 

if 

End凸0㈣ 

nt.岫( datawlndow print page range= 

在打印机设置命令按钮的单击事件脚车中,调用 

ntSc.tup()函数即可实现打印机的选择,打印纸的选择,打印 

方向控制等设置,而打印页面边界的设置则可通过拖动数据 

 pB +” ) 

dv,'-pfint.0 【DamWindo ̄'Prim page rangeindude=ti_I 目e— 

窗口标尺上的标志直观地完成,不必使用数据窗口的打印属 

性来实现。这样可充分利用PowerBuilder的现有资源,简化程 

序设计的复杂程度。 

i ̄luae g/设置打印贞面 

3 3数据窗口缩放打印的实现 

缩放打印的控制是通过一个editmask控件en ̄scale和两 

4结语 

上述打印控制程序具有通用性,可将其单独保存在一个 

pbl库中,研制信息系统时,只需将诙pbl库包含在应用中即 

可;在需要打印某数据窗121时,只需用函数OpenWithPam ̄( — 

Drlnt,datawindowttame)调用密1:3 w_print即可。 

参考文献 

【1】 f美)s —Collagher, 【n|耵Herhe ̄.Pt ̄erBm'lder5 0程序设计太 

全【M】.北京:机械工业出版杜.1997 

个命令按钮控件cb_mmller、cL1arg盯来实现的,用命令按钮 

来改变缩放比例(呵Lsc .text的值)并触发ett ̄scale控件的 

modiifed事件.em scale控件的modiifed事件脚本如下: 

Integer It- ̄cale 

IfThla.Text= T11肌 

1】一8c e=1130 

nse 

lL8cale=Integer(肌dfThis.Text,l,flen(this t L)一1”)