




已阅读5页,还剩21页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第11章自定义函数和结构,11.1创建自定义全局函数11.2创建自定义对象函数11.3外部函数11.4结构,11.1.1创建自定义全局函数,在开发环境的主窗口中,选择工具栏的New图标或选择主菜单File的子菜单New,将出现标题为“New”的窗口。,图11-1定义全局函数,11.1.1创建自定义全局函数,Object页的Function,双击Function项或点击OK按钮,进入全局函数的定义。在图中,FunctionName项中输入函数名、ReturnType下拉框中选择函数返回值的类型、ArgumentName中输入函数参数名、ArgumentType下拉框中选择函数参数类型、PassBy下拉框中选择参数传递方式。,11.1.1创建自定义全局函数,参数传递方式有三种:Value:值传递-将实际参数的值传递给函数参数Reference:地址传递-把实际参数的地址传递给函数,此时,如果函数修改了形式参数的值,那么实际参数的值也就被修改了。Readonly:地址传递-把实际参数的地址传递给函数,不过不允许修改参数的值。要增加或删除参数,可在图11-2中右击,出现弹出式菜单。AddParameter增加参数,InsertParameter插入参数,DeleteParameter删除参数,图11-3增加、插入、删除参数,11.1.1创建自定义全局函数,函数名及参数定义好后,在定义函数的下面窗口内编辑代码。或选择主窗口View菜单的Script子菜单,打开函数代码编辑窗口。函数返回值的类型、参数名、个数及类型可以随时更改。若函数有返回值,必须立即输入代码,即必须写一条return语句,否则产生错误。定义好的全局函数和标准函数一样使用。,11.1.2修改自定义全局函数,在开发环境的主窗口中,选择工具栏的Open图标或选择主菜单File的子菜单Open,将出现标题为“Open”的窗口,在ObjectType下拉框中选择Functions,在Object中选择要打开的函数,双击或点击OK按钮,进入全局函数的定义,如前图11-4所示。可以更改函数返回值的类型、参数名、个数及类型和函数代码。,11.1.3删除自定义全局函数,打开Library库管理器,打开要删除的自定义全局函数所在的PBL,选择要删除的自定义全局函数,右击,出现弹出式菜单,选择Delete将删除所选的自定义全局函数。,图11-6删除自定义全局函数,11.2.1创建自定义对象函数,可以为ApplicationObject对象、窗口对象、用户对象创建自定义函数,这种函数称为对象函数。先打开要定义函数的对象,再打开Script代码编辑窗口,先选择Functions,再选择NewFunction,将出现函数定义窗口。,11.2.1创建自定义对象函数,Access缺省值为“public”。访问属性Access有三个选择:lpublic:在整个程序中都可访问。lprivate:只能在当前对象的程序中使用,不能在该对象的后代的程序中使用。lprotected:只能在当前对象的程序以及该对象的后代的程序中使用。对象函数的命名规则一般与对象有关,如应用对象ApplicationObject的函数一般以“af_”作前缀,窗口对象Window的函数一般以“wf_”作前缀,菜单对象menu的函数一般以“mf_”作前缀,用户自定义对象的函数一般以“uf_”作前缀。这些规则清楚地表明了函数所在对象的类型,便于程序的维护。,11.2.1创建自定义对象函数,在定义函数的下面窗口内编辑代码。若函数有返回值,立即输入代码,即必须写一条return语句,否则产生错误。对象函数的返回值的类型、参数名、个数及类型能随时更改,系统会给出一个提示信息,以确认是否更改。在其它对象的程序中调用时,应在函数名前加上函数所在的对象名如w_pipe.wf_error(num),当然w_pipe必须已被打开。,11.2.2修改自定义对象函数,打开自定义函数所在的对象,打开Script代码编辑窗口,选择Functions,再选择要修改的函数。对象函数的返回值的类型、参数名、个数及类型都能随时更改。系统会给出一个提示信息,以确认是否更改。可以输入或更改函数代码。,11.2.3删除自定义对象函数,要删除自定义对象函数,首先打开自定义函数所在的对象,然后选择主菜单View的子菜单FunctionList。,图11-11列出全部函数,11.2.3删除自定义对象函数,选择FunctionList后将列出该对象的全部函数,如图11-12,右击要删除的函数,出现一个弹出式菜单,图11-13,选择Delete将删除所选的对象函数。注意:一旦选择Delete将立刻删除所选的对象函数,系统对删除操作不作提醒。在图11-13中,选择弹出式菜单中的Script,或双击所选的函数,将打开Script代码编辑窗口,以便查看与修改所选的对象函数,包括函数返回值的类型、参数名、参数个数、参数类型及函数代码等。,11.3.1外部函数的定义,使用外部函数之前,必须先对其进行说明。根据作用范围分为两种类型:全局外部函数GlobalExternalFunctions和局部外部函数LocalExternalFunctions。全局外部函数可在应用程序的任何地方使用;局部外部函数只能在所定义的对象中使用。打开要定义外部函数的对象,再打开Script代码编辑窗口,选择Declare,再选择GlobalExternalFunctions或LocalExternalFunctions,最后输入函数定义。,11.3.1外部函数的定义,定义外部函数时使用两种关键词:有返回值用Function,无返回值用Subroutine。用Function的格式:accessFUNCTIONreturn_typefunction_name(REFtype1arg1,。,typenargn)LIBRARYlib_name用Subroutine的格式:accessSUBROUTINEsub_name(REFtype1arg1,。,typenargn)LIBRARYlib_name其中:laccess:访问级别。是可选项,只用于局部外部函数LocalExternalFunctions,lreturn_type:返回值类型。必须是一个合法的PowerBuilder数据类型。lfunction_name和sub_name:外部程序的函数名或子程序名储存在DLL库中。lREF:参数通过地址传递。ltypei:参数的数据类型。largi:参数名llib_name:包含外部函数或子程序的DLL/EXE文件名。,11.3.2外部函数的调用,全局外部函数的使用类似于全局函数,局部外部函数的使用类似于对象函数。在其它对象的代码中使用局部外部函数时需加上函数定义所在的对象名。但在实际应用中会发现,调用外部函数经常不成功,原因可能是以下几种情况:(1)32位环境调用16位DLL(2)数据类型不一致。外部函数一般是用C/C+写的,有许多PowerBuilder所没有的数据类型。(3)指针。PowerBuilder没有指针数据类型。(4)函数名大小写错误。在PowerBuilder中不区分大小,但使用外部函数时却要区分大小写。(5)外部函数所在的库文件DLL或EXE文件找不到。可能不在当前路径下。,11.3.3外部函数使用实例,在Windows的控制面板中的有一个口令管理程序,用来设置和修改Windows和其它系统口令,如图11-15。如何调用这个口令管理程序呢?步骤如下:(1)创建一个setpassword.pbl,其应用对象名为password,再创建一个窗口w_pw,窗口上放一个“设置口令”的命令按钮cb_setpw,如图11-16所示。,图11-15Windows口令管理窗口,图11-16调用外部函数示例,11.3.3外部函数使用实例,(2)编写代码l在应用对象password的open事件中编写代码:open(w_pw)l在窗口w_pw中定义外部函数。先打开w_pw的Script代码编辑窗口,再选择Declare,然后选择LocalExternalFunctions。,图11-17定义外部函数,11.3.3外部函数使用实例,输入下面的代码:/定义外部函数,即声明外部函数的语法格式与来源FunctionLongShellExecuteA(Longhwindow,StringlpOperation,StringlpFile,StringlpParameters,StringlpDirectory,LongnShowCmd)Libraryshell32.dllFunctionLongGetDesktopWindow()Libraryuser32.dlll在“设置口令”的命令按钮cb_setpw的clicked事件中输入以下代码:/在PowerBuilder中调用Windows控制面板中的口令管理程序Stringcpl_nameStringls_nullSetNull(ls_null)cpl_name=Password.cplShellExecuteA(GetDesktopWindow(),ls_null,rundll32.exe,shell32.dll,Control_RunDLL+cpl_name+,ls_null,0)/调用外部函数,11.4.1定义全局结构,在开发环境的主窗口中,选择工具栏的New图标或选择主菜单File的子菜单New,将出现标题为“New”的窗口。,图11-18定义全局结构,11.4.1定义全局结构,选择Object页的Structure项,双击Structure项或点击OK,进入全局结构的定义,如图11-19。在图11-19全局结构定义画板中,输入元素名,并选择元素的数据类型。右击将出现弹出式菜单,如图11-20,选择InsertRow将插入元素,选择DeleteRow将删除元素。,图11-19全局结构定义画板,图11-20增加、删除结构元素,11.4.1定义全局结构,定义好结构的元素后,选择保存,输入结构名。结构名一般以“s_”作前缀。,图11-21保存结构,11.4.2定义对象层结构,为ApplicationObject对象、窗口对象、菜单对象、用户对象等创建结构称为对象层结构。对象层结构一般只能在该对象内使用,当该对象正在打开时,其它对象的程序可以使用该结构。打开要定义结构的对象,选择主菜单Insert的子菜单Structure,如图11-22,出现结构定义窗口,如图11-23。输入结构名、元素名及类型。按右键出现弹出式菜单,选择InsertRow将插入元素,选择DeleteRow将删除元素。对象层的结构与所在的对象一起保存,不能单独保存。,图11-22定义对象层结构,图11-23结构定义画板,11.4.3使用结构,要使用某结构,应该先声明一个该结构类型的实例变量,然后再引用该结构的变量。例如,设s_student是定义的一个全局结构,则在程序中使用该结构类型的代码例子为:s_students1,s2/定义两个s_student型的实例变量s1和s2s1.no=“320108800123204”/给结构s1的元素no赋值=sle.text/给结构s1的元素name赋值s1.math=96/给结构s1的元素math赋值s2=s1/将结构s1各元素的值赋给结构s2的对应元素,/只有同一类型的结构才能这样整体赋值。对象层的结构其引用方法与全局结构基本一样,但在其它对象的代码中引用时,需指明结构所在的对象(象引用对象函数那样)。例如,s_stru是在窗口w_main中定义的结构,在窗口中定义一个实例变量s3:s_strus3/在窗口的Declare中定义InstanceVariable要在另一窗口w_sub中引用s3,格式为:sle_1.text=w_main.s3.idsle_2.text=w_,11.4.4
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 扎兰屯职业学院《医学超声技术》2023-2024学年第二学期期末试卷
- 西安思源学院《商业演出策划与实践》2023-2024学年第二学期期末试卷
- 山东省济南市天桥区重点中学2025年初三第五次模拟考试数学试题试卷含解析
- 宁夏吴忠市盐池一中学2025年初三下-第一次调研考试化学试题试卷含解析
- 浙江省宁波万里国际学校2025年初三数学试题下学期第二次模拟考试试题含解析
- 沙洲职业工学院《通信工程专业导论》2023-2024学年第二学期期末试卷
- 江苏省江都区六校2025届初三入学调研物理试题(1)试卷含解析
- 江西司法警官职业学院《生物信息处理》2023-2024学年第二学期期末试卷
- 宁波市海曙区2025届初三1月调研(期末)测试物理试题含解析
- 吉林司法警官职业学院《工程流体力学》2023-2024学年第二学期期末试卷
- 基于深度学习的小学数学跨学科主题探究
- DB65-T 4828-2024 和田玉(子料)鉴定
- 2022-2023学年北京市海淀区中关村中学八年级(下)期中数学试卷
- 疫情统计学智慧树知到答案2024年浙江大学
- DB32-T 4765-2024 化工行业智能化改造数字化转型网络化联接实施指南
- 龟兔赛跑英语故事带翻译完整版
- 中学驻校教官管理方案
- Siemens Simcenter:Simcenter声振耦合分析技术教程.Tex.header
- 永辉超市存货管理问题及对策分析
- 2024数据中心基础设施运行维护管理规范
- 乙酸说课课件 2023-2024学年高一下学期化学人教版(2019)必修第二册
评论
0/150
提交评论