版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第第14章章 用户自定义对象用户自定义对象 用户对象具有下述优势:用户对象具有下述优势:(1) 避免了在应用程序的不同地方编写功能相同或相近代码的麻烦,提高了应用程序的可维护性。(2) 用户对象可以把一组总在一起使用的可视控件组合在一起,构成一个完成特定功能的控件,应用程序可以随时使用它。(3) 用户对象提供了构造具有一致外观的可视部件的方法。(4) 用户对象能够把相关功能封装在一起。(5) 用户对象允许开发人员扩展某些对象的功能。 用户对象的命名一般以“u_”为前缀,用户对象控件或实例的命名一般以“uo_”为前缀。 第第14章章 用户自定义对象用户自定义对象14.1 可视用户对象可视用户对象
2、 14.2 类用户对象类用户对象 14.3 用户对象使用编程实例用户对象使用编程实例 14.1.1 创建标准可视用户对象创建标准可视用户对象 标准可视用户对象在现有控件基本功能的基础上增加应用程序需要的功能。继承了原始控件的各种特征,包括属性、事件和函数。 例如,命令按钮只能用鼠标点击,而不响应回车键,可以利用标准可视用户对象 来定制一个用户对象,既能用鼠标点击,又可以按回车键操作。点击主窗口的工具 栏 图 标 按 钮New或选择主菜单File的New子菜单,将打开标题为“New”的窗口,选择Object页。图图14-1 创建用户对象创建用户对象14.1.1 创建标准可视用户对象创建标准可视用
3、户对象 打开标题为“Select Standard Visual Type”的窗口,选择所要的对象类型,点击Ok按钮。这里我们选择commandbutton来定制一个命令按钮用户对象。 图图14-2 选择对象类型选择对象类型14.1.1 创建标准可视用户对象创建标准可视用户对象 选好标准对象类型后,将打开用户对象画板。该界面和创建窗口的界面相似。在这里可以设置CommandButton的属性如Text、字体、控件大小等作为该用户对象的默认值,还可以定义用户函数和用户事件,并给某些事件编写代码。 图图14-3 定义可视用户对象定义可视用户对象14.1.1 创建标准可视用户对象创建标准可视用户对象
4、 给该用户对象定义一个用户事件以响应用户的回车键操作。用户事件名为“ue_enter”,事件号选“pbm_keydown”。14-4 在用户对象中定义用户事件在用户对象中定义用户事件14.1.1 创建标准可视用户对象创建标准可视用户对象在该事件中输入代码: if KeyDown(KeyEnter!) then/如果是回车键,则触发鼠标单击事件this.TriggerEvent(Clicked!) end if保存该用户对象,名为u_commandbutton。定义了一个可视用户对象u_commandbutton,该对象除具备标准的CommandButton命令按钮的属性、事件、函数外,还有用户
5、自定义事件ue_keyenter,当焦点落在该控件上时,用户按回车键将触发该事件。14.1.2 使用可视用户对象使用可视用户对象 可视用户对象定义好后,就可以象标准控件那样使用。在窗口打开后,点击工具栏上的控件工具箱中的用户对象User Object图标按钮。 图图14-5 控件工具箱控件工具箱用户对象用户对象14.1.2 使用可视用户对象使用可视用户对象 将出现标题为“Select Object”的窗口,在其中列出了当前pbl文件中所有的用户对象,选择一个用户对象,点击OK按钮或直接双击所选的用户对象。这里选u_commandbutton。 调整用户对象在窗口中的位置、大小,并设置必要的属性
6、。这样,当焦点落在该控件上时,按回车键将触发Click事件。 图图14-6 选择用户对象选择用户对象图图14-7 打开用户对象打开用户对象2.选择选择pbl库库3.选择选择User Objects4.选择要修改的用选择要修改的用户对象户对象1.选择目标选择目标14.1.3 修改用户对象修改用户对象 修改用户对象。选择工具栏的Open图标,打开标题为“Open”的窗口。在Application Libraries中选择要修改的用户对象所在的pbl库文件,在对象类型Object Type中选择User Objects,选择要修改的用户对象,点击OK按钮或直接双击所选的用户对象,将打开用户对象定义画
7、板,如前图14-3所示。 14.1.4 创建定制可视用户对象创建定制可视用户对象 定制可视用户对象是将多个控件以及可视用户对象组合成一个整体,完成一定的功能和操作。选择主窗口工具栏上的图标按钮New 或选择主菜单File的New子菜单,将打开标题为“New”的窗口,选择Object页。 图图14-8 选择定制可视用户对象选择定制可视用户对象14.1.4 创建定制可视用户对象创建定制可视用户对象 定制可视用户对象画板。在左上角的窗口上放置所需的控件和已定义的可视用户对象。还可以定义用户函数和用户事件,并给某些事件编写代码。 图图14-9 定制可视用户对象画板定制可视用户对象画板在这里放置控件和在
8、这里放置控件和已定义的可视用户已定义的可视用户对象对象14.1.4 创建定制可视用户对象创建定制可视用户对象 注意注意: 该可视用户对象中的控件的大小、位置等属性不能在窗口上改变,而只能在如图14-9所示的定制可视用户对象画板中修改。 创建的定制可视用户对象作为一个整体来使用,与其它用户对象的一个明显差别是:定制可视用户对象中包括了多个控件。窗口中的代码控制定制可视用户对象中的控件时,需要用“用户对象名+控件名+属性或函数”这样的格式。 例如:例如: uo_1.cb_ok.text=”确定确定”/cb_ok是用户对象中的一个控件 st_1.text=uo_1.sle_1.text /sle_1
9、是用户对象中的一个控件,st_1 是窗口上的一个控件 uo_1.lb_1.additem(sle_2.text) /lb_1是用户对象中的控件,sle_2是窗 口上的控件 14.1.5 创建外部可视用户对象创建外部可视用户对象 使用外部控件的目的通常是为了完成PB本身难以完成或不支持的功能。 选择主窗口工具栏上的图标按钮New 或选择主菜单File的New子菜单,选择Object页。 图图14-10 创建外部可视用户对象创建外部可视用户对象14.1.5 创建外部可视用户对象创建外部可视用户对象 在图14-10 Object页中选择External Visual项,点击OK按钮或直接双击Exte
10、rnal Visual项,将打开外部可视用户对象画板。 图图14-11 外部可视用户对象画板外部可视用户对象画板14.1.5 创建外部可视用户对象创建外部可视用户对象 图14-11中,在LibraryName中输入外部用户对象所在的DLL文件名,或者单击Browse按钮选择DLL文件;在Class Name编辑框中键入DLL中的注册类名(该类名通常由生产DLL的厂商提供);在“Text”编辑框中输入显示在控件上的文本(并非都需要此项);根据需要设置其它属性;说明用户对象所需的函数、事件、变量、结构;编写用户对象的各种事件处理程序;最后保存用户对象。定义了外部可视用户对象后,就可以在窗口、定制可
11、视用户对象等多个地方运用该对象了。注意:注意:要创建外部可视用户对象,必须知道外部用户对象所在的DLL文件名和注册类名。 14.2.1 创建标准类用户对象创建标准类用户对象 选择主窗口工具栏上的图标按钮New 或选择主菜单File的New子菜单,将打开标题为“New”的窗口,选择Object页。 图图14-12 定义标准类用户对象定义标准类用户对象14.2.1 创建标准类用户对象创建标准类用户对象 在图14-12的 Object页中选择Standard Class项,点击OK或直接双击Standard Class项,打开标题为“Select Standard Class Type”的窗口来选择
12、创建的用户对象所继承的内部系统对象。图图14-13 选择标准对象类选择标准对象类14.2.1 创建标准类用户对象创建标准类用户对象 选择所要的对象类,点Ok,打开标准类用户对象定义画板。 类用户对象是不可见的,不能在它上面布置任何的可视控件。为这个对象封装属性、函数和事件以及变量等,编写用户对象所需的各种事件处理程序。最后保存用户对象。 图图14-14 标准用户类画板标准用户类画板14.2.2 使用类用户对象使用类用户对象 使用类用户对象时,需要在代码中创建它的一个实例 。步骤为: (1) 说明类用户对象类型的变量,用CREATE语句创建该对象的一个实例; (2) 在变量的整个作用域中,代码都
13、能访问该对象的属性、事件、函数,就像使用系统预定义对象那样(比如事务处理对象SQLCA); (3) 不再使用该用户对象时,使用DESTROY语句删除该对象,以释放它所占的内存。 14.2.2 使用类用户对象使用类用户对象例如:例如:我们已经创建了一个标准类用户对象u_datastore,它从数据存储对象Datastore继承得到,那么代码中可以这样使用:u_datastore myds /声明u_datastore类型的变量myds myds = CREATE u_datastore /创建用户对象实例myds myds.DataObject = d_user_search /将数据窗口对象与
14、类用 户对象联系起来 myds.SetTransObject(SQLCA) /设置类用户对象使用的事务对象 ret = myds.Retrieve(math) /检索数据据 ./应用程序所需的其它处理 DESTROY myds /使用后删除用户对象14.2.3 创建定制类用户对象创建定制类用户对象 定制类用户对象是用户自己设计的对象,用于封装不需要可视特性的处理过程。这些对象并不继承某个对象或控件,完全由用户通过定义实例变量、函数、事件来实现。定制类用户对象只有两个系统预定义事件:Constructor和Destructor。其创建过程和使用方法完全类似于标准类用户对象。 要将用户对象删除,只
15、有在Library工作区才能实现。方法是打开Library工作区,右击要删除的对象,出现弹出式菜单,选择Delete,打开一个提示框,选择Yes,删除所选的对象。参见PBL库管理器。 14.3 用户对象使用编程实例用户对象使用编程实例 在用户自定义事件的编程实例中,要求当焦点落在命令按钮上时,按回车键能代替鼠标。在数据窗口中,按回车键可以跳到下一个输入项,而不是下一行。在最后一行的最后一列按回车键时,将增加一个空行。在最后一行按向下的箭头键时,也增加一个空行。图图14-15 用户对象使用实例用户对象使用实例14.3 用户对象使用编程实例用户对象使用编程实例 应该设计一个统一的按钮,无须在每个用
16、到的地方分别编程。使用用户对象可以方便的解决问题。实例创建步骤如下:实例创建步骤如下:(1) 创建一个ustudent.pbl,其ApplicationObject为ustu,再建一个窗口w_uobject。 (2) 创建标准可视用户对象,它是从标准控件commandbutton命令按钮继承来的。给该用户对象增加自定义事件ue_keyenter,事件号为pbm_keydown。该用户对象能够响应鼠标和回车键操作。 在该用户对象的事件ue_keyenter中输入以下代码: if KeyDown(KeyEnter!) then /如果是回车键,则触发鼠标单击事件 this.TriggerEvent
17、(Clicked!) end if 保存该用户对象,名为u_commandbutton。 14.3 用户对象使用编程实例用户对象使用编程实例(3) 再创建标准可视用户对象,也是从标准控件commandbutton命令按钮继承来的。给该用户对象增加自定义事件ue_keyenter,事件号为pbm_keydown。该用户对象能够响应鼠标和回车键操作,并关闭控件所在的窗口。l 在该用户对象的自定义事件ue_keyenter中输入以下代码:if KeyDown(KeyEnter!) then/如果是回车键,则触发鼠标单击事件this.TriggerEvent(Clicked!)end ifl 在该用户
18、对象的事件click中输入以下代码:close(parent) /关闭控件所在的窗口保存该用户对象,名为u_cb_return。(4) 创建标准可视用户对象,它是从标准控件datawindow数据窗口继承来的。给该用户对象增加两个自定义事件和一个自定义函数: 14.3 用户对象使用编程实例用户对象使用编程实例l 一个事件是ue_keyenter,事件号为pbm_dwnprocessenter。该事件的主要功能是按回车键可以跳到下一个输入项,不是下一行。当在最后一行的最后一列按回车键时,将增加一个空行。l 一个事件是ue_keyarrow,事件号为pbm_dwntabdownout.。该事件的主
19、要功能是在最后一行按向下的箭头键时,增加一个空行。l 自定义函数是uf_getcolnumber(),无入口参数,返回值表示数据窗口中的列数。该函数的功能就是求当前数据窗口中的列的数目。l 在该用户对象的自定义函数uf_getcolnumber()中输入以下代码: /返回当前数据窗口的列数 long rowint col,oldcol,ret row=this.getrow() oldcol=this.getcolumn()/oldcol为当前列 if row1 then return 0/数据窗口为空则返回 14.3 用户对象使用编程实例用户对象使用编程实例/下面循环的意思是从第一列开始设置
20、为当前列,/若设置成功,则将下一列设置为当前列,./直到设置失败(setcolumn函数返回-1),/这时列数就是col-1/假设数据窗口的列数不超过10000列.for col=1 to 10000ret=this.setcolumn(col)if ret= - 1 thenthis.setcolumn(oldcol)/将原来的列恢复为当前列return col 1 /返回数据窗口中的列数end ifnext return 0l 在该用户对象的自定义事件ue_keyenter中输入以下代码: int col,colnum long row colnum=uf_getcolnumber()/求
21、数据窗口的列数14.3 用户对象使用编程实例用户对象使用编程实例if colnum1 then return 1 /如果列数小于如果列数小于1,则返回则返回col=getcolumn()row=getrow()if colcolnum then/当前列不是最后一列当前列不是最后一列setcolumn(col+1)/将下一列变为当前列将下一列变为当前列elseif rowrowcount() then /当前列是最后一列但当前行不是最后一行当前列是最后一列但当前行不是最后一行setrow(row+1)/将下一行的第一列变为当前列将下一行的第一列变为当前列scrolltorow(row+1)set
22、column(1)else/当前列是最后一列且当前行是最后一行当前列是最后一列且当前行是最后一行row=insertrow(0)/增加一行增加一行setrow(row)/将新行的第一列变为当前列将新行的第一列变为当前列scrolltorow(row)setcolumn(1)end ifend ifreturn 1 /放弃原来的操作放弃原来的操作 14.3 用户对象使用编程实例用户对象使用编程实例l 在该用户对象的自定义事件ue_keyarrow中输入以下代码: long row row=insertrow(0)/增加一行 setrow(row)/将新行变为当前行 scrolltorow(row
23、) (5) 在窗口w_uobject上创建用户对象控件: dw_1:从u_datawindow继承而来 cb_append:从u_commandbutton继承而来 cb_insert:从u_commandbutton继承而来 cb_delete:从u_commandbutton继承而来 cb_retrieve:从u_commandbutton继承而来 cb_update:从u_commandbutton继承而来 cb_return:从u_commandbutton继承而来 分别给cb_append、cb_insert、cb_delete、cb_retrieve、cb_update控件的text属性赋值;给dw_1的dataobject属性赋值,即将控件与某个数据窗口对象相关联。 14.3 用户对象使用编程实例用户对象使用编程实例l 给应用对象ustu的open事件编写代码:SQLCA.AutoCommit = Truesq
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026广东惠州博罗县园洲镇九潭卫生院招聘编外工作人员1人备考题库1套附答案详解
- 2026黑龙江大庆市肇源县医疗卫生专项人才引进22人备考题库附答案详解(满分必刷)
- 2026山东青岛海检冠图检测技术有限公司招聘1人备考题库完整附答案详解
- 2026北京燕东微电子股份有限公司春季校园招聘备考题库【考点提分】附答案详解
- 2026年度春季江铜集团江铜国际贸易有限公司校园招聘2人备考题库(综合卷)附答案详解
- 2026浙江省公安厅警务辅助人员招聘137人备考题库(真题汇编)附答案详解
- 2026清华大学基础医学院彭敏实验室招聘科研助理2人备考题库及参考答案详解一套
- 2026江苏南京大学XZ2026-036研究生院办公室文员招聘备考题库【新题速递】附答案详解
- 2026四川宜宾长宁县淯江文旅集团有限公司招聘员工20名备考题库含答案详解【能力提升】
- 2026最高人民检察院直属事业单位招聘13人备考题库附参考答案详解【典型题】
- 2026校招:陕西外经贸集团试题及答案
- 2026年南京交通职业技术学院单招职业适应性测试题库及答案详解(夺冠系列)
- 2026年六安职业技术学院单招职业适应性测试题库带答案详解(a卷)
- 2025年广西机场管理集团有限责任公司第一批次招聘106人笔试参考题库附带答案详解
- 护患沟通人文关怀课件
- 2026小红书创作者生态报告
- 新员工职业素养提升培训课程大纲
- 苯乙烯安全培训内容课件
- 毛概知识点总结全国示范课微课金奖教案(2025-2026学年)
- 灾难医疗救援中的资源分级与团队配置
- 物业管理规范-新产业园园区服务标准
评论
0/150
提交评论