PB教程第十一章 对象Word文档下载推荐.docx
- 文档编号:20825250
- 上传时间:2023-01-25
- 格式:DOCX
- 页数:21
- 大小:219.23KB
PB教程第十一章 对象Word文档下载推荐.docx
《PB教程第十一章 对象Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《PB教程第十一章 对象Word文档下载推荐.docx(21页珍藏版)》请在冰豆网上搜索。
图11-3
下面就用户对象画板的工作区。
我们看到上面有一个图片控件。
在它上面单击鼠标右键,弹出菜单,选择SCRIPT命令,开始编写脚本。
编写用户对象的脚本要处理的一个重要问题就是解决用户对象和拥有它的窗口之间的通讯问题。
一般的情况之下,我们有两种选择:
使用函数,或者使用用户事件。
所谓用户事件就是在POWERBUILDER标准事件以及WINDOWS标准事件之外,由用户自己定义的事件。
下面我们示范如何定义和使用用户事件。
在主菜单中选择DECLARE的USEREVENT命令,定义一个用户事件。
如图11-4。
图11-4
在EVENTNAME一栏当中可以敲入事件的名称,在EVENTID一栏当中可以敲入事件的ID号,不过如果您定义的用户事件与WINDOWS标准消息无关的话,可以忽略这个命令ID号。
单击OK按钮结束定义。
如图11-5。
EVENTNAME为ALTERPIC,EVENTID为PBM_CUSTOM01。
图11-5
在脚本画板的工作区当中,单击SELECTEVENT事件选择列表框,我们看到ALTERPIC这个用户定义的事件已经出现在列表当中了。
下面的工作当中,我们将会用到一个全局变量。
如何定义一个全局变量呢?
选择DECLARE菜单当中的DECLAREGLOBALVARIABLES命令,在POWERBUILDER弹出的全局变量定义对话框当中输入变量的定义integerpicnum,单击OK按钮,就完成了定义。
如图11-6。
图11-6
在这个事件的脚本当中我们还将使用一个结构。
什么是结构呢?
结构就是相关变量的集合,结构的相关变量被称为结构属性。
结构可以分为全局级和对象级两种,这里我们定义一个对象级的结构,用来保存几个字符串。
定义结构的方法非常的简单。
选择DECLARE中的USEROBJECTSTRUCTURES命令,系统弹出结构选择对话框,单击NEW按钮,新建一个结构。
在VARIABLENAME一栏当中输入变量的名字,选择变量的类型。
输入需要的变量之后,关闭结构定义画板。
如图11-7。
图11-7
系统将会提示我们保存这个结构,选择“是”按钮,给结构取一个名字strucpicturename,定义结构的工作就完成了。
如图11-8。
图11-8
如何在程序中使用这个结构呢?
一个结构就是一个新的数据类型,在使用之前必须实例化。
这句脚本的意思就是生成一个结构的实例。
(这一步可以略过,因为后面也没有用上。
)
strucPictureNamename
我们可以使用点操作符给结构的变量赋值。
name.pic1="
1.bmp"
name.pic2="
2.bmp"
name.pic3="
3.bmp"
name.pic4="
4.bmp"
name.pic5="
5.bmp"
name.pic6="
6.bmp"
name.pic7="
7.bmp"
这段脚本的意思是根据全局变量的值从结构变量当中取出合适的值来改变图片控件的属性。
这一段代码的意思是创建一个名为name的以strucPictureName为模板的结构体。
以下脚本是写在alterpic事件里面的:
CHOOSECASEpicnum
case1
this.picturename="
picnum=2
case2
picnum=3
case3
picnum=4
case4
picnum=5
case5
picnum=6
case6
picnum=7
case7
picnum=1
ENDCHOOSE
单击POWERBAR上面的RETURN按钮,关闭工作区。
关闭用户对象定义工作区。
单击“是”按钮确认保存这个用户对象,为这个对象取名字animatepic。
单击OK按钮。
如图11-9。
图11-9
接下来,打开一个窗口,单击控件布置按钮,弹出控件列表,单击USEROBJECT按钮,系统弹出用户对象选择对话框,在列表中选择刚才定义的控件,选择然后在窗口上单击鼠标左键,布置这个控件。
如图11-10。
图11-10
在窗口上面单击鼠标右键,弹出菜单,选择SCRIPT命令。
在事件选择列表当中选择OPEN事件,在其中加入一段代码。
Timer(0.5)
它的意思是在窗口打开的时候,设置该窗口的定时器触发时间间隔为半秒钟。
设置然后选择窗口的TIMER定时器触发事件。
加入这样的代码。
p_1.TriggerEvent("
alterpic"
它的意思是当定时器计时已满事件触发的时候,程序触发我们刚才定义的用户事件。
这样就完成了窗口和用户对象的接口定义。
关闭脚本画板工作区。
关闭窗口画板工作区。
从上面的例子当中,可以看出使用用户对象的便利之处。
11.3类用户对象
一般不推荐使用这种方法建立函数,最好在POWERBAR1里面找fun按钮,建立全局的函数。
为了使读者有一个比较全面的知识结构,笔者在这里简单提一下,有兴趣的读者可以阅读学习,类用户对象对于多个返回值的函数有优势,可是总的来说使用起来不是很方便,如果想见效快的朋友,可以直接跳到11.4进行阅读学习全局函数的使用方法。
除了可视的用户对象之外,POWERBUILDER还提供了一种不可视的用户对象:
类用户对象。
它也具有非常广泛的应用领域。
比方说,在制作一个商用数据库软件的时候,经常会使用某些商业规则对数据进行重复地计算和处理。
如果我们定义一个用户对象,由它来管理这套数据处理的办法,那就会使程序的设计工作方便很多。
下面我们通过一个例子来说明如何建立和使用类用户对象。
首先单击POWERBAR上面的用户对象画板按钮USEROBJECT。
系统弹出对象选择对话框。
单击NEW按钮,新建一个对象。
接着,系统询问新建用户对象的类型。
关于这两个组框的含义,在介绍可视化用户对象的时候已经进行了大致的说明。
CLASS组框当中的STANDARD图标表示标准类型的类用户对象。
POWERBUILDER本身带有一些不可视的用户对象,比方说前面曾经提到过的系统事务处理对象,通过继承这些系统对象生成的类用户对象就是标准类型的类用户对象。
CUSTOM图标表示定制的类用户对象,顾名思义就是用户自己定义的类对象。
我们选中这个图标,建立一个定制类用户对象。
单击OK按钮,进入用户对象画板的工作区。
如图11-11。
图11-11
这个矩形框就代表着用户对象,由于类用户对象是不可见的,所以我们不能在它上面布置任何的可视控件。
接下来要做的工作是为这个对象封装属性和函数。
在对象上面单击鼠标右键,弹出菜单。
如图11-12。
图11-12
GLOBALVARIABLES,SHAREDVARIABLES,INSTANCEVARIABLES这三个命令都可以用来为对象定义变量属性。
GLOBALVARIABLE是全局变量,它可以从应用程序的任何地方直接访问。
INSTANCEVARIABLE是实例变量,什么是实例呢?
我们在这里定义的是类用户对象,它相当于一个模板,进行程序的设计的时候,我们可以在需要的时候根据这个模板生成具体的对象,这些具体的对象才是我们真正使用的东西,它们被称为实例。
实例变量就是为一个对象产生的所有实例定义的,但是它的值对于每一个实例而言又是不同的。
SHAREDVARIABLE是共享变量,和实例变量一样,它也是与一个对象的所有实例都有关系,不同的是共享变量在每一个实例变量当中都具有相同的值。
我们选择INSTANCEVARIABLE定义一个实例变量。
屏幕上弹出声明实例变量的对话框。
如图11-13。
图11-13
在里面敲入以下需要定义的变量。
decimal{1}value1
decimal{1}value2
decimal{1}value3
decimal{1}value4
decimal{1}value5
decimal{1}thevalue
单击OK按钮,关闭对话框。
再次在对象上面单击鼠标右键,选择USEROBJECTFUNCTIONS命令,为对象封装函数。
如图11-14。
图11-14
屏幕上显示函数选择对话框,单击NEW按钮新建一个函数。
这里介绍两种方法,第一种如图11-15。
图11-15
在NAME一栏当中,输入函数的名字calplan1。
单击ACCESS列表框,如图11-16。
图11-16
Access缺省值为“public”。
访问属性Access有三个选择:
public:
在整个程序中都可访问。
表示可以从应用程序的任何地方访问这个函数。
private:
只能在当前对象的程序中使用,不能在该对象的后代的程序中使用。
protected:
只能在当前对象的程序以及该对象的后代的程序中使用。
对象函数的命名规则一般与对象有关,如应用对象ApplicationObject的函数一般以“af_”作前缀,窗口对象Window的函数一般以“wf_”作前缀,菜单对象menu的函数一般以“mf_”作前缀,用户自定义对象的函数一般以“uf_”作前缀。
这些规则清楚地表明了函数所在对象的类型,便于程序的维护。
选择PRIVATE类型。
这样就可以在使用的时候直接改变存储的数值,不需要再用赋值语句。
在RETURN列表框中可以选择当前函数运行的返回值类型。
我们接受缺省的INTEGER整数类型。
下面的ARGUMENT组框是用来定义当前函数的参数表的。
我们要定义的函数只接受一个参数,输入参数的名称thevalue,在参数类型选择列表框当中选择需要的参数类型。
PASSBY列表框是用来定义参数传递方法的。
单击这个列表框,如图11-17。
图11-17
VALUE方式的意思是传参的时候将这个参数复制一份,再利用这个值进行计算,函数操纵的是参数的复制品,这样函数被调用结束的时候将不会影响参数的值,这个参数实际上就相当于C语言中的形参;
REFERENCE引用方法的意思就是函数进行数据处理的时候将会直接地操纵这个参数,这意味着在函数当中将可以改变参数的值,这个参数实际上就相当于C语言中的变参;
READONLY方式与引用方式的不同之处在于函数只能读参数的值而不能直接改变参数。
可简单总结如下:
Value:
值传递---将实际参数的值传递给函数参数
Reference:
地址传递---把实际参数的地址传递给函数,此时,如果函数修改了形式参数的值,那么实际参数的值也就被修改了。
Readonly:
地址传递---把实际参数的地址传递给函数,不过不允许修改参数的值。
进行了以上的设置之后,单击OK按钮,就进入了POWERBUILDER的函数工作区,
我们可以在这里输入需要的函数定义了,mod(被除数,除数)=余数。
如图11-18。
value1=value1-mod(value1,1)
value2=value2-mod(value2,1)
value3=value3-mod(value3,1)
value4=value4-mod(value4,1)
value5=value5-mod(value5,1)
thevalue=value1+value2+value3+value4+value5
return0
图11-18
第二种方法更为简单,推荐使用。
如图1。
图1
不需要设置任何的ARHUMENTS。
这样的好处在使用的时候不需要提供任何的参数,更方便调用。
进行了以上的设置之后,单击OK按钮,就进入了POWERBUILDER的函数工作区,
设置的函数与方法一完全一致。
关闭工作区,选择“是”保存这个函数。
前面我们已经完成了给对象封装变量和函数的工作,关闭工作区,单击“是”按钮确认保存这个对象,给对象取名为calplan,单击OK按钮。
这样就完成了一个类用户对象calplan的定义。
那么如何使用这个类用户对象呢?
下面举一个例子。
打开一个已经准备好的应用程序,在需要使用用户对象首先声明一个用户对象:
calplaninstance
然后使用CREATE生成类用户对象的一个实例:
instance=CREATEcalplan
当对象例化之后,我们就可以使用这个实例进行工作了。
需要注意的是当不再需要使用这个对象的时候,必须用DESTROY语句来清除这个对象:
DESTROYcalplan
在“按方案一计算按钮”的按钮中写以下脚本。
如图11-19。
图11-19
calplaninstance
instance=CREATEcalplan
instance.value1=dec(em_1.text)
instance.value2=dec(em_2.text)
instance.value3=dec(em_3.text)
instance.value4=dec(em_4.text)
instance.value5=dec(em_5.text)
instance.calplan1()
em_6.text=string(instance.thevalue)
DESTROYinstance
在程序中其它使用这个类用户对象的地方也要进行同样的工作。
我们运行这个程序。
按下“按方案一计算按钮”,对象对数据取整加和。
“按方案二计算按钮”的演示这里就不提供了,因为用这种方法在实际中不是很实用。
笔者建议还是使用全局函数比较方便。
下面我们开始学习使用全局函数。
11.4使用全局函数
首先创建一个名为w_1的窗口,结论框旁边的是11.1中制作的插件animatepic,可直接插入检验效果,如图11-20。
图11-20
em_1到em_5的设置如图11-21。
图11-21
结论的那个框em_6的设置如图11-22。
图11-22
至此,准备工作就基本完成了。
下面开始写函数。
点击POWERBAR1中的FUNCTION按钮。
选择NEW,创建新的函数wf_1。
ARGUMENT中有5个参数,ls_1到ls_5,属性都一致。
如图11-23。
图11-23
点击OK。
确定建立以下函数。
如图11-24。
decld_1,ld_2,ld_3,ld_4,ld_5,ld_return//定义为数值
ld_1=dec(ls_1)-mod(dec(ls_1),1)
ld_2=dec(ls_2)-mod(dec(ls_2),1)
ld_3=dec(ls_3)-mod(dec(ls_3),1)
ld_4=dec(ls_4)-mod(dec(ls_4),1)
ld_5=dec(ls_5)-mod(dec(ls_5),1)
ld_return=ld_1+ld_2+ld_3+ld_4+ld_5
Returnld_return
图11-24
保存退出。
然后再创建新的函数wf_2。
ARGUMENT的设置跟wf_1一样。
函数体如下。
decld_1,ld_2,ld_3,ld_4,ld_5,ld_return
ld_1=round(dec(ls_1),0)
ld_2=round(dec(ls_2),0)
ld_3=round(dec(ls_3),0)
ld_4=round(dec(ls_4),0)
ld_5=round(dec(ls_5),0)
ROUND的作用是进行四舍五入,0是表示小数点后保留0位。
如图11-25。
图11-25
在“使用方案一计算”的按钮下写以下脚本。
如图11-26。
em_6.text=string(wf_1(em_1.text,em_2.text,em_3.text,em_4.text,em_5.text))
图11-26
在“使用方案二计算”的按钮下写以下脚本。
em_6.text=string(wf_2(em_1.text,em_2.text,em_3.text,em_4.text,em_5.text))
点击RUN。
点击方案一如图11-27。
图11-27
点击方案二如图11-28。
图11-28
类用户对象的定义和使用的方法就介绍到这里。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- PB教程第十一章 对象 PB 教程 第十一