PB14第14章用户自定义对象.ppt_第1页
PB14第14章用户自定义对象.ppt_第2页
PB14第14章用户自定义对象.ppt_第3页
PB14第14章用户自定义对象.ppt_第4页
PB14第14章用户自定义对象.ppt_第5页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第14章用户自定义对象,用户对象具有下述优势:(1)避免了在应用程序的不同地方编写功能相同或相近代码的麻烦,提高了应用程序的可维护性。(2)用户对象可以把一组总在一起使用的可视控件组合在一起,构成一个完成特定功能的控件,应用程序可以随时使用它。(3)用户对象提供了构造具有一致外观的可视部件的方法。(4)用户对象能够把相关功能封装在一起。(5)用户对象允许开发人员扩展某些对象的功能。用户对象的命名一般以“u_”为前缀,用户对象控件或实例的命名一般以“uo_”为前缀。,第14章用户自定义对象,14.1可视用户对象14.2类用户对象14.3用户对象使用编程实例,14.1.1创建标准可视用户对象,标准可视用户对象在现有控件基本功能的基础上增加应用程序需要的功能。继承了原始控件的各种特征,包括属性、事件和函数。例如,命令按钮只能用鼠标点击,而不响应回车键,可以利用标准可视用户对象,来定制一个用户对象,既能用鼠标点击,又可以按回车键操作。点击主窗口的工具栏图标按钮New或选择主菜单File的New子菜单,将打开标题为“New”的窗口,选择Object页。,图14-1创建用户对象,14.1.1创建标准可视用户对象,打开标题为“SelectStandardVisualType”的窗口,选择所要的对象类型,点击Ok按钮。这里我们选择commandbutton来定制一个命令按钮用户对象。,图14-2选择对象类型,14.1.1创建标准可视用户对象,选好标准对象类型后,将打开用户对象画板。该界面和创建窗口的界面相似。在这里可以设置CommandButton的属性如Text、字体、控件大小等作为该用户对象的默认值,还可以定义用户函数和用户事件,并给某些事件编写代码。,图14-3定义可视用户对象,14.1.1创建标准可视用户对象,给该用户对象定义一个用户事件以响应用户的回车键操作。用户事件名为“ue_enter”,事件号选“pbm_keydown”。,14-4在用户对象中定义用户事件,14.1.1创建标准可视用户对象,在该事件中输入代码:ifKeyDown(KeyEnter!)then/如果是回车键,则触发鼠标单击事件this.TriggerEvent(Clicked!)endif保存该用户对象,名为u_commandbutton。定义了一个可视用户对象u_commandbutton,该对象除具备标准的CommandButton命令按钮的属性、事件、函数外,还有用户自定义事件ue_keyenter,当焦点落在该控件上时,用户按回车键将触发该事件。,14.1.2使用可视用户对象,可视用户对象定义好后,就可以象标准控件那样使用。在窗口打开后,点击工具栏上的控件工具箱中的用户对象UserObject图标按钮。,14.1.2使用可视用户对象,将出现标题为“SelectObject”的窗口,在其中列出了当前pbl文件中所有的用户对象,选择一个用户对象,点击OK按钮或直接双击所选的用户对象。这里选u_commandbutton。调整用户对象在窗口中的位置、大小,并设置必要的属性。这样,当焦点落在该控件上时,按回车键将触发Click事件。,图14-6选择用户对象,14.1.3修改用户对象,修改用户对象。选择工具栏的Open图标,打开标题为“Open”的窗口。在ApplicationLibraries中选择要修改的用户对象所在的pbl库文件,在对象类型ObjectType中选择UserObjects,选择要修改的用户对象,点击OK按钮或直接双击所选的用户对象,将打开用户对象定义画板,如前图14-3所示。,14.1.4创建定制可视用户对象,定制可视用户对象是将多个控件以及可视用户对象组合成一个整体,完成一定的功能和操作。选择主窗口工具栏上的图标按钮New或选择主菜单File的New子菜单,将打开标题为“New”的窗口,选择Object页。,图14-8选择定制可视用户对象,14.1.4创建定制可视用户对象,定制可视用户对象画板。在左上角的窗口上放置所需的控件和已定义的可视用户对象。还可以定义用户函数和用户事件,并给某些事件编写代码。,14.1.4创建定制可视用户对象,注意:该可视用户对象中的控件的大小、位置等属性不能在窗口上改变,而只能在如图14-9所示的定制可视用户对象画板中修改。创建的定制可视用户对象作为一个整体来使用,与其它用户对象的一个明显差别是:定制可视用户对象中包括了多个控件。窗口中的代码控制定制可视用户对象中的控件时,需要用“用户对象名+控件名+属性或函数”这样的格式。例如:uo_1.cb_ok.text=”确定”/cb_ok是用户对象中的一个控件st_1.text=uo_1.sle_1.text/sle_1是用户对象中的一个控件,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-10Object页中选择ExternalVisual项,点击OK按钮或直接双击ExternalVisual项,将打开外部可视用户对象画板。,图14-11外部可视用户对象画板,14.1.5创建外部可视用户对象,图14-11中,在LibraryName中输入外部用户对象所在的DLL文件名,或者单击Browse按钮选择DLL文件;在ClassName编辑框中键入DLL中的注册类名(该类名通常由生产DLL的厂商提供);在“Text”编辑框中输入显示在控件上的文本(并非都需要此项);根据需要设置其它属性;说明用户对象所需的函数、事件、变量、结构;编写用户对象的各种事件处理程序;最后保存用户对象。定义了外部可视用户对象后,就可以在窗口、定制可视用户对象等多个地方运用该对象了。注意:要创建外部可视用户对象,必须知道外部用户对象所在的DLL文件名和注册类名。,14.2.1创建标准类用户对象,选择主窗口工具栏上的图标按钮New或选择主菜单File的New子菜单,将打开标题为“New”的窗口,选择Object页。,图14-12定义标准类用户对象,14.2.1创建标准类用户对象,在图14-12的Object页中选择StandardClass项,点击OK或直接双击StandardClass项,打开标题为“SelectStandardClassType”的窗口来选择创建的用户对象所继承的内部系统对象。,图14-13选择标准对象类,14.2.1创建标准类用户对象,选择所要的对象类,点Ok,打开标准类用户对象定义画板。类用户对象是不可见的,不能在它上面布置任何的可视控件。为这个对象封装属性、函数和事件以及变量等,编写用户对象所需的各种事件处理程序。最后保存用户对象。,图14-14标准用户类画板,14.2.2使用类用户对象,使用类用户对象时,需要在代码中创建它的一个实例。步骤为:(1)说明类用户对象类型的变量,用CREATE语句创建该对象的一个实例;(2)在变量的整个作用域中,代码都能访问该对象的属性、事件、函数,就像使用系统预定义对象那样(比如事务处理对象SQLCA);(3)不再使用该用户对象时,使用DESTROY语句删除该对象,以释放它所占的内存。,14.2.2使用类用户对象,例如:我们已经创建了一个标准类用户对象u_datastore,它从数据存储对象Datastore继承得到,那么代码中可以这样使用:u_datastoremyds/声明u_datastore类型的变量mydsmyds=CREATEu_datastore/创建用户对象实例mydsmyds.DataObject=d_user_search/将数据窗口对象与类用户对象联系起来myds.SetTransObject(SQLCA)/设置类用户对象使用的事务对象ret=myds.Retrieve(math)/检索数据据./应用程序所需的其它处理DESTROYmyds/使用后删除用户对象,14.2.3创建定制类用户对象,定制类用户对象是用户自己设计的对象,用于封装不需要可视特性的处理过程。这些对象并不继承某个对象或控件,完全由用户通过定义实例变量、函数、事件来实现。定制类用户对象只有两个系统预定义事件:Constructor和Destructor。其创建过程和使用方法完全类似于标准类用户对象。要将用户对象删除,只有在Library工作区才能实现。方法是打开Library工作区,右击要删除的对象,出现弹出式菜单,选择Delete,打开一个提示框,选择Yes,删除所选的对象。参见PBL库管理器。,14.3用户对象使用编程实例,在用户自定义事件的编程实例中,要求当焦点落在命令按钮上时,按回车键能代替鼠标。在数据窗口中,按回车键可以跳到下一个输入项,而不是下一行。在最后一行的最后一列按回车键时,将增加一个空行。在最后一行按向下的箭头键时,也增加一个空行。,图14-15用户对象使用实例,14.3用户对象使用编程实例,应该设计一个统一的按钮,无须在每个用到的地方分别编程。使用用户对象可以方便的解决问题。实例创建步骤如下:(1)创建一个ustudent.pbl,其ApplicationObject为ustu,再建一个窗口w_uobject。(2)创建标准可视用户对象,它是从标准控件commandbutton命令按钮继承来的。给该用户对象增加自定义事件ue_keyenter,事件号为pbm_keydown。该用户对象能够响应鼠标和回车键操作。在该用户对象的事件ue_keyenter中输入以下代码:ifKeyDown(KeyEnter!)then/如果是回车键,则触发鼠标单击事件this.TriggerEvent(Clicked!)endif保存该用户对象,名为u_commandbutton。,14.3用户对象使用编程实例,(3)再创建标准可视用户对象,也是从标准控件commandbutton命令按钮继承来的。给该用户对象增加自定义事件ue_keyenter,事件号为pbm_keydown。该用户对象能够响应鼠标和回车键操作,并关闭控件所在的窗口。l在该用户对象的自定义事件ue_keyenter中输入以下代码:ifKeyDown(KeyEnter!)then/如果是回车键,则触发鼠标单击事件this.TriggerEvent(Clicked!)endifl在该用户对象的事件click中输入以下代码:close(parent)/关闭控件所在的窗口保存该用户对象,名为u_cb_return。(4)创建标准可视用户对象,它是从标准控件datawindow数据窗口继承来的。给该用户对象增加两个自定义事件和一个自定义函数:,14.3用户对象使用编程实例,l一个事件是ue_keyenter,事件号为pbm_dwnprocessenter。该事件的主要功能是按回车键可以跳到下一个输入项,不是下一行。当在最后一行的最后一列按回车键时,将增加一个空行。l一个事件是ue_keyarrow,事件号为pbm_dwntabdownout.。该事件的主要功能是在最后一行按向下的箭头键时,增加一个空行。l自定义函数是uf_getcolnumber(),无入口参数,返回值表示数据窗口中的列数。该函数的功能就是求当前数据窗口中的列的数目。l在该用户对象的自定义函数uf_getcolnumber()中输入以下代码:/返回当前数据窗口的列数longrowintcol,oldcol,retrow=this.getrow()oldcol=this.getcolumn()/oldcol为当前列ifrow1thenreturn0/数据窗口为空则返回,14.3用户对象使用编程实例,/下面循环的意思是从第一列开始设置为当前列,/若设置成功,则将下一列设置为当前列,./直到设置失败(setcolumn函数返回-1),/这时列数就是col-1/假设数据窗口的列数不超过10000列.forcol=1to10000ret=this.setcolumn(col)ifret=-1thenthis.setcolumn(oldcol)/将原来的列恢复为当前列returncol1/返回数据窗口中的列数endifnextreturn0l在该用户对象的自定义事件ue_keyenter中输入以下代码:intcol,colnumlongrowcolnum=uf_getcolnumber()/求数据窗口的列数,14.3用户对象使用编程实例,ifcolnum1thenreturn1/如果列数小于1,则返回col=getcolumn()row=getrow()ifcolcolnumthen/当前列不是最后一列setcolumn(col+1)/将下一列变为当前列elseifrowrowcount()then/当前列是最后一列但当前行不是最后一行setrow(row+1)/将下一行的第一列变为当前列scrolltorow(row+1)setcolumn(1)else/当前列是最后一列且当前行是最后一行row=insertrow(0)/增加一行setrow(row)/将新行的第一列变为当前列scrolltorow(row)setcolumn(1)endifendifreturn1/放弃原来的操作,14.3用户对象使用编程实例,l在该用户对象的自定义事件ue_keyarrow中输入以下代码:longrowrow=insertrow(0)/增加一行setrow(row)/将新行变为当前行scrolltorow(row)(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=Truesqlca.DBMS=odbcsqlca.database=studentsqlca.dbpass=dbasqlca.

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论