




已阅读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按钮,进入全局函数的定义。 在图中,Function Name项中输入函数名、Return Type下拉框中选择函数返回值的类型、Argument Name中输入函数参数名、Argument Type下拉框中选择函数参数类型、PassBy下拉框中选择参数传递方式。,11.1.1创建自定义全局函数,参数传递方式有三种: Value:值传递-将实际参数的值传递给函数参数 Reference:地址传递-把实际参数的地址传递给函数,此时,如果函数修改了形式参数的值,那么实际参数的值也就被修改了。 Readonly:地址传递-把实际参数的地址传递给函数,不过不允许修改参数的值。 要增加或删除参数,可在图11-2中右击,出现弹出式菜单。Add Parameter增加参数,Insert Parameter插入参数,Delete Parameter删除参数,图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 创建自定义对象函数,可以为Application Object对象、窗口对象、用户对象创建自定义函数,这种函数称为对象函数。 先打开要定义函数的对象,再打开Script代码编辑窗口,先选择Functions,再选择New Function,将出现函数定义窗口。,11.2.1 创建自定义对象函数,Access缺省值为“public” 。 访问属性Access有三个选择: l public:在整个程序中都可访问。 l private:只能在当前对象的程序中使用,不能在该对象的后代的程序中使用。 l protected:只能在当前对象的程序以及该对象的后代的程序中使用。 对象函数的命名规则一般与对象有关,如应用对象Application Object的函数一般以“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的子菜单Function List。,图11-11 列出全部函数,11.2.3 删除自定义对象函数,选择Function List后将列出该对象的全部函数,如图11-12,右击要删除的函数,出现一个弹出式菜单,图11-13,选择Delete将删除所选的对象函数。 注意:一旦选择Delete将立刻删除所选的对象函数,系统对删除操作不作提醒。 在图11-13中,选择弹出式菜单中的Script,或双击所选的函数,将打开Script代码编辑窗口,以便查看与修改所选的对象函数,包括函数返回值的类型、参数名、参数个数、参数类型及函数代码等。,11.3.1外部函数的定义,使用外部函数之前,必须先对其进行说明。根据作用范围分为两种类型:全局外部函数Global External Functions和局部外部函数Local External Functions。全局外部函数可在应用程序的任何地方使用;局部外部函数只能在所定义的对象中使用。 打开要定义外部函数的对象,再打开Script代码编辑窗口,选择Declare,再选择Global External Functions或Local External Functions,最后输入函数定义。,11.3.1外部函数的定义,定义外部函数时使用两种关键词:有返回值用Function,无返回值用Subroutine。 用Function的格式: access FUNCTION return_type function_name(REFtype1 arg1,。,typen argn) LIBRARY lib_name 用Subroutine的格式: access SUBROUTINE sub_name(REFtype1 arg1,。,typen argn) LIBRARY lib_name 其中: l access:访问级别。是可选项,只用于局部外部函数Local External Functions, l return_type:返回值类型。必须是一个合法的PowerBuilder数据类型。 l function_name和sub_name:外部程序的函数名或子程序名储存在DLL库中。 l REF:参数通过地址传递。 l typei:参数的数据类型。 l argi:参数名 l lib_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-15 Windows口令管理窗口,图11-16 调用外部函数示例,11.3.3外部函数使用实例,(2) 编写代码 l 在应用对象password的open事件中编写代码: open(w_pw) l 在窗口w_pw中定义外部函数。先打开w_pw的Script代码编辑窗口,再选择Declare,然后选择Local External Functions。,图11-17 定义外部函数,11.3.3外部函数使用实例,输入下面的代码: / 定义外部函数,即声明外部函数的语法格式与来源 Function Long ShellExecuteA(Long hwindow, String lpOperation, String lpFile, String lpParameters, String lpDirectory, Long nShowCmd) Library shell32.dll Function Long GetDesktopWindow() Library user32.dll l 在“设置口令”的命令按钮cb_setpw的clicked事件中输入以下代码: /在PowerBuilder中调用Windows控制面板中的口令管理程序 String cpl_name String ls_null SetNull(ls_null) cpl_name = “Password.cpl“ ShellExecuteA(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,选择Insert Row将插入元素,选择Delete Row将删除元素。,图11-19 全局结构定义画板,图11-20 增加、删除结构元素,11.4.1 定义全局结构,定义好结构的元素后,选择保存,输入结构名。结构名一般以“s_”作前缀。,图11-21 保存结构,11.4.2 定义对象层结构,为Application Object对象、窗口对象、菜单对象、用户对象等创建结构称为对象层结构。对象层结构一般只能在该对象内使用,当该对象正在打开时,其它对象的程序可以使用该结构。 打开要定义结构的对象,选择主菜单Insert的子菜单Structure,如图11-22,出现结构定义窗口,如图11-23。输入结构名、元素名及类型。按右键出现弹出式菜单,选择Insert Row将插入元素,选择Delete Row将删除元素。对象层的结构与所在的对象一起保存,不能单独保存。,图11-22 定义对象层结构,图11-23 结构定义画板,11.4.3 使用结构,要使用某结构,应该先声明一个该结构类型的实例变量,然后再引用该结构的变量。 例如,设s_student是定义的一个全局结构,则在程序中使用该结构类型的代码例子为: s_student s1,s2 /定义两个s_student型的实例变量s1和s2 s1.no=“320108800123204” /给结构s1的元素no赋值 =sle.text /给结构s1的元素name赋值 s1.math=96 /给结构s1的元素math赋值 s2=s1 /将结构s1各元素的值赋给结构s2的对应元素, /只有同一类型的结构才能这样整体赋值。 对象层的结构其引用方法与全局结构基本一样,但在其它对象的代码中引用时,需指明结构所在的对象(象引用对象函数那样)。 例如,s_stru是在窗口w_main中定义的结构,在窗口中定义一个实例变量s3: s_stru s3 /在窗口的Declare中定义Instance Variable 要在另一窗口w_sub中引用s3,格式为: sle_1.text=w_main.s3.id sle_2.text=w_,11.4.4
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年度房产抵押贷款三方借款合同
- 2025年厨房设备租赁与改造工程合同
- 2025版高空作业平台外架工程班组劳务承包合同
- 2025版汽车4S店专用汽车运输服务合同
- 2025版智慧城市建设投资借款合同
- 2025版水电工程设计与施工及维护保养协议
- 2025版土建资料承包项目施工组织设计与进度控制合同
- 2025年度港口码头施工总价合同模板
- 2025版智慧城市建设土地测绘与规划合同协议
- 2025第一部生物科技药物研发与生产合同协议书
- 初中数学教材解读人教八年级上册(2023年修订)第十三章轴对称等边三角形 导学案
- DB11-T1515-2018养老服务驿站设施设备配置规范
- 《机械知识》(第六版)电子教案(全)完整版课件整套教学课件
- 政府会计制度应用课件
- 五年级上册美术教学计划
- 有色金属贵金属冶金
- 2020外研社高中英语选择性必修四课文翻译
- 西方文论课程教学大纲
- 外科医学—颅内和椎管内血管性疾病
- 井控设备(2015)
- 2022交通事故处理委托书范本
评论
0/150
提交评论