




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第第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 Ty
2、pe下拉框中选择函数返回值的类型、Argument Name中输入函数参数名、Argument Type下拉框中选择函数参数类型、PassBy下拉框中选择参数传递方式。 图图11-2定义全局函数的属性定义全局函数的属性点击该图标,点击该图标,将显示将显示/隐含隐含函数属性定义函数属性定义11.1.1创建自定义全局函数创建自定义全局函数参数传递方式有三种:参数传递方式有三种:Value:值传递-将实际参数的值传递给函数参数Reference:地址传递-把实际参数的地址传递给函数,此时,如果函数修改了形式参数的值,那么实际参数的值也就被修改了。Readonly:地址传递-把实际参数的地址传递给函数
3、,不过不允许修改参数的值。 要增加或删除参数,可在图11-2中右击,出现弹出式菜单。Add Parameter增加参数,Insert Parameter插入参数,Delete Parameter删除参数 图图11-3 增加、插入、删除参数增加、插入、删除参数11.1.1创建自定义全局函数创建自定义全局函数 函数名及参数定义好后,在定义函数的下面窗口内编辑代码。或选择主窗口View菜单的Script子菜单,打开函数代码编辑窗口。函数返回值的类型、参数名、个数及类型可以随时更改。若函数有返回值,必须立即输入代码,即必须写一条return语句,否则产生错误。定义好的全局函数和标准函数一样使用。图图1
4、1-4 编辑函数代码编辑函数代码点击该图标,将显示点击该图标,将显示/隐含函数属性定义隐含函数属性定义图图11-5 打开自定义全局函数打开自定义全局函数3 . 在在 O b j e c t Ty p e 中 选 择中 选 择Functions或或All Objects4.选择要打选择要打开的函数开的函数2.选择选择pbl源文件源文件1.选择目标选择目标11.1.2修改自定义全局函数修改自定义全局函数 在开发环境的主窗口中,选择工具栏的Open图标或选择主菜单File的子菜单Open,将出现标题为“Open”的窗口,在ObjectType下拉框中选择Functions,在Object中选择要打开
5、的函数, 双击或点击OK按钮,进入全局函数的定义,如前图11-4所示。可以更改函数返回值的类型、参数名、个数及类型和函数代码。11.1.3删除自定义全局函数删除自定义全局函数 打开Library库管理器,打开要删除的自定义全局函数所在的PBL,选择要删除的自定义全局函数,右击,出现弹出式菜单,选择Delete将删除所选的自定义全局函数。图图11-6 删除自定义全局函数删除自定义全局函数11.2.1 创建自定义对象函数创建自定义对象函数 可以为Application Object对象、窗口对象、用户对象创建自定义函数,这种函数称为对象函数。 先打开要定义函数的对象,再打开Script代码编辑窗口
6、,先选择Functions,再选择New Function,将出现函数定义窗口。1.选择选择Functions2选择选择New Function图图11-7 定义对象函数定义对象函数11.2.1 创建自定义对象函数创建自定义对象函数 Access缺省值为“public” 。 访问属性Access有三个选择: l public:在整个程序中都可访问。 l private:只能在当前对象的程序中使用,不能在该对象的后代的程序中使用。 l protected:只能在当前对象的程序以及该对象的后代的程序中使用。对象函数的命名规则一般与对象有关,如应用对象Application Object的函数一般以
7、“af_”作前缀,窗口对象Window的函数一般以“wf_”作前缀,菜单对象menu的函数一般以“mf_”作前缀,用户自定义对象的函数一般以“uf_”作前缀。这些规则清楚地表明了函数所在对象的类型,便于程序的维护。图图11-8定义对象函数的属性定义对象函数的属性点击该图标,将显示点击该图标,将显示/隐隐含函数属性定义含函数属性定义11.2.1 创建自定义对象函数创建自定义对象函数 在定义函数的下面窗口内编辑代码。若函数有返回值,立即输入代码,即必须写一条return语句,否则产生错误。 对象函数的返回值的类型、参数名、个数及类型能随时更改,系统会给出一个提示信息,以确认是否更改。 在其它对象的
8、程序中调用时,应在函数名前加上函数所在的对象名如w_pipe.wf_error(num),当然w_pipe必须已被打开。图图11-9编辑函数代码编辑函数代码点击该图标,将显点击该图标,将显示示/隐含函数属性定隐含函数属性定义义11.2.2 修改自定义对象函数修改自定义对象函数 打开自定义函数所在的对象,打开Script代码编辑窗口,选择Functions,再选择要修改的函数。对象函数的返回值的类型、参数名、个数及类型都能随时更改。系统会给出一个提示信息,以确认是否更改。可以输入或更改函数代码。图图11-10 修改对象函数修改对象函数1.选择选择Functions2.选择要修改的选择要修改的函数
9、函数点击该图标,将显点击该图标,将显示示/隐含函数属性定隐含函数属性定义,可以更改返回义,可以更改返回值类型及参数等值类型及参数等3.输入或修输入或修改代码改代码11.2.3 删除自定义对象函数删除自定义对象函数 要删除自定义对象函数,首先打开自定义函数所在的对象,然后选择主菜单View的子菜单Function List。图图11-11 列出全部函数列出全部函数11.2.3 删除自定义对象函数删除自定义对象函数选择Function List后将列出该对象的全部函数,如图11-12,右击要删除的函数,出现一个弹出式菜单,图11-13,选择Delete将删除所选的对象函数。 注意:注意:一旦选择D
10、elete将立刻删除所选的对象函数,系统对删除操作不作提醒。 在图11-13中,选择弹出式菜单中的Script,或双击所选的函数,将打开Script代码编辑窗口,以便查看与修改所选的对象函数,包括函数返回值的类型、参数名、参数个数、参数类型及函数代码等。 图图11-12 列出所有对象函数列出所有对象函数图图11-13删除对象函数删除对象函数11.3.1外部函数的定义外部函数的定义 使用外部函数之前,必须先对其进行说明。根据作用范围分为两种类型:全局外部函数Global External Functions和局部外部函数Local External Functions。全局外部函数可在应用程序的
11、任何地方使用;局部外部函数只能在所定义的对象中使用。 打开要定义外部函数的对象,再打开Script代码编辑窗口,选择Declare,再选择Global External Functions或Local External Functions,最后输入函数定义。 图图11-14定义外部函数定义外部函数1.选择选择Declare2.选择选择Global External Functions或或Local External Functions3.输入函数定义输入函数定义11.3.1外部函数的定义外部函数的定义定义外部函数时使用两种关键词:有返回值用Function,无返回值用Subroutine。用F
12、unction的格式: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_n
13、ame和和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所没有的数据类型
14、。(3) 指针。PowerBuilder没有指针数据类型。(4) 函数名大小写错误。在PowerBuilder中不区分大小,但使用外部函数时却要区分大小写。(5) 外部函数所在的库文件DLL或EXE文件找不到。可能不在当前路径下。11.3.3外部函数使用实例外部函数使用实例 在Windows的控制面板中的有一个口令管理程序,用来设置和修改Windows和其它系统口令,如图11-15。如何调用这个口令管理程序呢? 步骤如下:步骤如下:(1) 创建一个setpassword.pbl,其应用对象名为password,再创建一个窗口w_pw,窗口上放一个“设置口令”的命令按钮cb_setpw,如图11
15、-16所示。 图图11-15Windows口令管理窗口令管理窗口口 图图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 Shell
16、ExecuteA(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 SetNu
17、ll(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项,双击Structur
18、e项或点击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对象、窗口对象、菜单对象、用户对象等创建
19、结构称为对象层结构。对象层结构一般只能在该对象内使用,当该对象正在打开时,其它对象的程序可以使用该结构。 打开要定义结构的对象,选择主菜单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和s2s1.no=“320108800123204” /给结构
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论