PB 11第11章 自定义函数和结构
第11章 结构体与共用休

定义结构体类型的同时定义结构体变量
一般形式:
struct 结构体名 { 类型标识符 成员名; 类型标识符 成员名; ……………. }变量名表列;
例 struct student { int num; char name[20]; char sex; int age; float score; char addr[30]; }stu1,stu2;
num
25B
name sex age num
name sex age
stu[0]
stu[1]
结构体数组初始化
分行初始化: 结构体数组引用 顺序初始化: struct student struct student 引用方式: 结构体数组名[下标].成员名 { int num; 例 { int student struct num; 例 struct num; char { char name[20]; int name[20]; stu[1].age++; struct student { char num; int sex; char sex; name[20]; int age; num; {char name[20]; int int age; char sex; }; char sex; }; int char name[20]; age; struct student stu[ ]={{100,“WangLin”,„M‟,20, int char sex; age; struct student stu[ ]={100,“Wang Lin”,„M‟,20}, }stu[ ]={{……},{……},{……}}; {101,“LiGang”,„M‟,19, int age; }stu[ ]={{……},{……},{……}}; 101,“Li Gang”,„M‟,19}, strcpy(stu[0].name,”ZhaoDa”); {110,“LiuYan”,„F‟,19}; }str[3]; 110,“Liu Yan”,„域
PB11简介PPT课件

2021/7/22
23
谢谢大家!
个人观点供参考,欢迎讨论
2021/7/22
17
2.9 应用程序开发及发布
创建一个应用调试 利用开发工具编译成Dll或PBD 发布EXE、Dll(PBD) + Pb的支持动态库,类
似于Java的虚拟机
2021/7/22
18
3.1 Dw数窗的详细介绍
不同风格数窗使用介绍(12种风格) 如何设计数窗 数窗检索数据,正常检索、带参数检索 数窗更新数据 数窗的数据源介绍(无数据源、SQL语句组
PowerBuilder是著名的数据库应用开发工具生产 厂商PowerSoft公司推出的产品(PowerSoft现已 被数据库厂商Sybase所收购),它完全按照客 户机/服务器体系结构研制设计,在客户机/服 务器结构中,它使用在客户机中,作为数据库 应用程序的开发工具而存在。由于PowerBuilder 采用了面向对象和可视化技术,提供可视化的 应用开发环境,使得我们利用PowerBuilder,可 以方便快捷地开发出利用后台服务器中的数据 和数据库管理系统的数据库应用程序。
*.Pbl,*.PBD,*.Pbw,*.pbt,*.pbr,*.dll的介绍。
2021/7/22
15
2.7 PB开发工具与Sql语句
嵌入式SQL语句 4种动态游标 代码中直接写Sql语句 数窗与视图 数窗与存储过程
2021/7/22
16
2.8 应用程序开发及发布
创建一个应用调试 利用开发工具编译成Dll或PBD 发布EXE、Dll(PBD) + Pb的支持动态库
2021/7/22
pb的主要控件函数及其作用

函数返回值AcceptText Integer CanUndo Boolean CategoryCount Integer CategoryName StringClear IntegerClearValues Integer Clipboard Integer Copy IntegerCopyRTF String Create Integer CrosstabDialog Integer Cut Integer DataCount Long DBCancel Integer DBErrorCode Long DBErrorMessage String DeletedCount Long DeleteRow Integer Describe String Drag Integer Filter Integer FilteredCount IntegerFind Long FindCategory Integer FindGroupChange Long FindNext Integer FindRequired Integer FindSeries Integer GenerateHTMLForm Integer GetBandAtPointer StringGetBanderStyle Border GetChild Integer GetClickedColum Integer GetClickedRow Long GetColum Integer GetColumnName StringGetContextService Integer GetData Double GetDataPieExplode IntegerGetDataStyle IntegerGetDataValue Integer GetFormat String GetItemDate Date GetItemDateTime DateTime GetItemDecimal DecimalGetItemNumber Double GetItemStatus dwItemStatus GetItemString String GetItemTime Time GetMessageText String GetNextModified Long GetObjectAtPointer String GetParent PowerObject GetRow Long GetSelectedRow Integer GetSeriesStyle Integer GetSQLPreview String GetSQLSelect String GetText String GetTrans Integer GetUpdateStatus Integer GetValidate String GetValue String GroupCalc IntegerHide Integer ImportClipboard Long ImportFile Long ImportString Long InsertDocument IntegerInsertRow Long IsSelected Boolean LineCount Integer ModifiedCount LongModify StringMove Integer ObjectAtPointer grObjectTypeOLEActivate Integer Paste Integer PasteRTE Long PointerX Integer PointerY IntegerPosition IntegerPostEvent Boolean Print Integer PrintCancel Integer ReplaceText Integer ReselectRow Integer Reset Integer ResetDataColors Integer ResetTransObject Integer ResetUpdate Integer Resize Integer Retrieve LongRowCount Long RowsCopy Integer RowsDiscard Integer RowsMove Integer SaveAs Integer Scroll Integer ScrollNextPage Long ScrollNextRow Long ScrollPriorPage Long ScrollPriorRow Long ScrollToRow Integer SelectedLength Integer SelectedLine Integer SelectedStart Integer SelectedText String SelectRow IntegerSelectText Integer SelectTextAll Integer SelectTextLine Integer SelectTextWord IntegerSeriesCount Integer SeriesName String SetActionCode Integer SetBorderStyle Integer SetColumn Integer SetDataPieExplode IntegerSetDataStyle IntegerSetDetailHeight Integer SetFilter Integer SetFocus Integer SetFormat Integer SetItem Integer SetItemStatus Integer SetPosition IntegerSetRedraw Integer SetRow Integer SetRowFocusIndicatorInteger SetSeriesStyle IntegerSetSort Integer SetSQLPreview Integer SetSQLSelect Integer SetTabOrder Integer SetText Integer SetTrans Integer SetTransObject Integer SetValidate Integer SetValue Integer ShareData Integer ShareDataOff Integer Show Integer ShowHeadFoot IntegerSort Integer TextLine String TriggerEvent Integer TypeOf Object Undo Integer Update Integer功能将数据窗口控件中“漂浮”在当前行/列上的编辑框内的内容放入数据窗口缓冲区的当前项中(编辑框的内容必须通过数据有效性规则检查)检测最近一次编辑操作能否被取消.放回值为Ture时表示能够撤消,为False时表示不能撤消返回数据窗口控件指定统计图的数据类别数返回数据窗口控件的名称删除数据窗口控件的编辑框中所选内容,对RichText风格的数据窗口来说,删除数据窗口中所选内容删除数据窗口控件指定列的代码表中的所有值,该函数不影响指定列的数据值将数据窗口控件中指定的统计图复制到系统剪贴板将数据窗口控件当前行列上编辑框中的所选内容复制到系统剪贴板.对RichText风格的数据窗口来说,把数据窗口控件中所选内容复制到系统剪贴板将数据窗口控件中所选的文本,图像,输入字段作为一个超文本格式的字符串返回,位图和输入字段包括在字符串中使用指定的源代码创建窗口对象,并用新的数据窗口对象取代数据窗口控件中原有的数据窗口对象显示Crosstab Definition对话框,这样用户能够在运行时修改Crosstab风格的数据窗口对象的定义将数据窗口控件当前行列上编辑框中的所选内容复制到系统剪贴板.对RichText风格的数据窗口来说,把数据窗口控件中所选内容复制到系统剪贴板返回数据窗口控件指定图形,指定序列的数据点数取消数据库数据检索进程得到数据库访问出错时的错误编号(即将废弃)得到数据库访问出错时的错误信息(即将废弃)返回数据窗口控件中已经被删除但尚未做数据库更新的行的数量删除数据窗口控件中的指定行返回数据窗口控件的指定信息开始或结束数据窗口控件的拖动在数据窗口控件中显示满足当前过滤条件的行返回过滤缓冲区中数据行数在数据窗口控件中查找满足条件的下一行.对RichText风格的数据窗口来说,在该控件中查找满足条件的文本,搜索到后将其加亮.可以指定查找方向以及指定是否需要大小写匹配和单词匹配返回数据窗口控件中指定图形,指定类别的类别号从指定行开始,在数据窗口控件中查找指定分组的第一个分组位置使用Find()函数的条件继续查找,该函数只适用于RichText风格的数据窗口标识用户未填充的所需列返回数据窗口控件中指定图形,指定序列的号根据数据窗口的内容生成HTML Form语法返回一个字符串,字符串由带名,Tab字符(~t)和行号组成,指示当前鼠标指针位于哪个带的那个行上返回数据窗口控件指定列的边框类型,有效值为Box!, Lowered!, NoBorder!, Raised!, ResizeBorder!, ShadowBox!, Underline!得到指定列子数据窗口的名称并将其保存到变量中返回用户在数据窗口控件中单击或双击列的列号(即将废弃)返回用户在数据窗口控件中单击或双击列的行号(即将废弃)返回数据窗口控件当前列的列号返回数据窗口控件当前列的列名创建指定服务(包括ContextInformation, Internet以及Keyword)的上下文相关实例返回数据窗口控件指定图形,指定序列和指定数据点的值返回饼图中切开部分所占的百分比得到统计图中数据点的外观数据.序列中的每一个数据点都可以有不同的外观设置.该函数有3种语法形式得到数据窗口控件指定统计图,指定序列和指定数据点的值返回数据窗口控件指定列的显示格式返回数据窗口控件中指定行,指定列的Date型(日期型)数据值返回数据窗口控件中指定行,指定列的DateTine型(日期时间型)数据值返回数据窗口控件中指定行,指定列的Decimal型(十进制数字型)数据值返回数据窗口控件中指定行,指定列的数值型(包括decimal,double,Integer,Long或real)数据值返回数据窗口控件中指定行,指定列数据型的状态,有效值为 DataModified!, New!, NewModified!和NotModified!返回数据窗口控件中指定行,指定列的String型(字符串型)数据值返回数据窗口控件中指定行,指定列的Time型(时间型)数据值得到数据窗口控件中crosstab风格的数据窗口对象产生的消息文本(即将废弃)返回数据窗口控件指定缓冲区中位于指定行之后的第一个被修改过的行的行号返回一个字符串,字符串由列名或统计图对象名,tab字符(~t)和行号组成,指示当前鼠标指针位于哪个列或统计图对象的哪个行上返回父对象的名称返回数据窗口当前行的行号返回数据窗口控件中指定行之后的第一个被选行的行号返回统计图中某个序列的风格,该函数有四种语法格式返回当前数据窗口控件提交给数据库的SQL语句(即将废弃)返回数据窗口控件当前的SELECT语句返回数据窗口控件中悬浮在当前行,列之上的编辑框中的文本返回数据窗口事务对象的值将要被更新的行的行号保存在一个变量中,将缓冲区的类型保存在另一个变量中(即将废弃)返回数据窗口控件指定列的有效性规则得到数据窗口中指定列的值或代码表指定项的值让数据窗口控件重新计算分组隐藏数据窗口控件把系统剪贴板中的数据复制到数据窗口控件中把文件中的数据复制到数据窗口控件中把字符串中的数据复制到数据窗口控件中将超文本格式的文件或普通文件的内容插入到数据窗口控件中.利用该函数的参数可以指定下述插入方法:在插入点位置插入,取代现有的所有内容.这个函数只能应用与RichText风格的数据窗口在数据窗口控件指定行前面插入一行 返回值为当前行的行号当数据窗口控件中指定行被选择时返回Ture,当指定行未被选择或指定的行号大于数据窗口控件中的行数时返回False得到悬浮于当前行列上编辑框中数据的行数返回数据窗口控件中已经修改但尚未给新相应数据库表的行数修改数据窗口控件的属性将数据窗口移动到指定位置返回当前鼠标指针位于统计图的哪个区域并将相应的序列和数据点值保存到指定变量中将系统剪贴板的内容插入到数据窗口中"悬浮"于当前行/列的编辑框中将字符串中的超文本数据粘贴到RichText风格的数据窗口控件中返回当前鼠标指针离数据窗口控件左边缘的距离返回当前鼠标指针离数据窗口控件上边缘的距离返回数据窗口控件中悬浮在当前行/列的编辑框的插入点位置,对RichText风格的数据窗口控件返回当前插入点的行/列位置或所选文本的起始与结束位置将某个事件添加到数据窗口控件消息队列的尾部将数据窗口控件的内容发送到打印机上,这个函数有几种语法格式当数据窗口控件的内容发送到打印机后,该函数检查是否有要取消打印工作,查找到后,删除对应的脱机打印文件用指定字符串代替编辑框中所选内容访问数据库,重新选择所有被修改的列。
PB之常用函数

Return1
//不允许关闭
EndChoose //用户所有的选择情况处理完毕
通过上面的脚本,可以为用户提供一个很健壮的数据处理窗口。即使直接关闭该窗口,在数据窗口中所做的数据修改也不会丢失,除非用户 自己想放弃。
另外,需要注意的是,在其他事件中调用或者触发(使用TriggerEvent函数、PostEvent函数或者是对象名称.Event 事件名称格式调用事 件)Close事件,都只是执行该事件中的脚本,并不真正关闭窗口。也就是说,应该区别事件和事件处理脚本,这两者虽然有很多的联系但 并不相同。 PB中的所有事件和事件处理脚本都是有区别的。
row:要设置数据的行,为long类型。
column:要设置数据的列,可以是string类型的列名称,也可以是integer类型的列号。
插入空行:insertrow(0) dw_name.insertrow(0) 通常配合插入行使用的是滚动行 dw_name.scrolltorow(dw_name.insertrow(0)) \\滚动到插入行 比如:int row
row = dw_1.insertrow(0)
//显示
dw_1.scrolltorow(row)
该函数有返回值,1,2,3对选择的按键。
基本写法事例: MessageBox('此处为标题,'此处为内容') 完整写法事例: if MessageBox('提示信息','是否删除?',&Question! ,OKCancel! , 1 ) = 1 then//选择确定 MessageBox('提示信息', '你选择了删除') else//选择取消
//使用
pb的基本函数

1、Open 两种格式:一个是带参数的还有一个是不带参数的不带参数的是不确定具体的数据类型的2、Opensheet() opensheet(指定窗口名,{指定要打开的窗口的类型},指定要放置的工作表的框架窗口名,所打开的窗口是在第几个菜单下生产默认值为倒数第二个,打开方式arrangeopen。
)打开方式分为三种:cascade、layered、original。
Cascade:向右下方偏移。
默认值如果缺少的话Layered:最大化Original:与cascade相同。
只是打开的时候与原来的一样大3、Close4、Setfocus() 将焦点设置到指定控件上Objectname.setfocus() 如果objectname是列表框的话则控件将指向列表框的第一列表项上。
5、SelectText()返回该控件所选的文本。
返回值为long Singlelineeditname.selecttext(start,length)6、GetColumn()和GetColumnname()两个都没有返回值:第一个是返回当前列的列好,第二个则是返回当前列名7、Update()8、DeleteRow()Dwcontrol.deleteRow(row) row表示要删除的行数,当该值为0时则表示删除该行1、insert row 在数据窗口控件指定行前面插入一行dwcontrol.insertrow(row) scrolltorow():使新插入的行成为当前行。
2、ScrollToRow() 使用方法:rtename .scrolltorow(row)Rtename超文本编辑框的名称。
如果row的值为0的话则就回滚到第一行,如果row的值大于超文本的行数则回滚到最后一行3、selectedColumn()返回插入点后第一个字符的位置rtename.selectedcolumn()4、setcloumn5、print() 以当前字体在打开的打印作业中打印一行或多行文本print(printjobnumber,{tabl},string{,tab2})tab1为文本开始打印的位置,以千分之一英寸为单位。
《PB程序设计》第9章用户自定义事件

返回本节 录
9.4 触发用户事件
Static和Dynamic选项只能选择一个,缺省时为 Static。Static表示编译时指定事件必须存在,系统 要进行返回值类型检查;Dynamic表示编译时指定事 件可以不存在,系统把返回值类型检查推迟到应用 程序运行时进行。 Event是关键字,表示后面的Event Name是个事 件名而不是函数。Para list是事件的参数,有多个 参数时参数之间用逗号分隔。 如果用户事件定义了参数,只能使用上述格式触 发事件,而不能使用函数TriggerEvent()或 PostEvent()。
返回章目录
9.1用户自定义事件在应用中的作用
在下列情况下经常使用用户事件: (1)解决对象与窗口之间的通信问题。用 户事件可以通过参数进行信息传递。 (2)响应特殊操作。这些操作没有相应的 PowerBuilder预定义事件 (3)支持用户通过多种多样的方式完成同 一个功能
返回本节 录
返回本节 录
9.5 用户自定义事件应用实例
为了测试,我们在表中添加几条记录如图9ˉ12 所示
返回本节 录
9.5 用户自定义事件应用实例
运行程序:单击“显示记录”按钮,结果如图 9ˉ13所示
9.1用户自定义事件在应用中的作用
用户事件在许多地方与用户定义函数十分相似,用 户事件运用的灵活程度很大程度上反映出应用程序 的灵活性和适用性。PowerBuilder开始将事件和函 数同化,统称为方法。事件也可以带输入参数,并 有返回值。有时形式上难以区分事件和函数。不过, 函数一般是由用户调用,在编程时就已决定,而事 件除了可以由用户触发外,还可以由系统触发。大 多数的事件,都是由系统触发的。因此,事件比函 数更为灵活,应用范围更广
第11章 类

在面向对象程序设计中,算法与数据结构被捆绑成一个类。现实世界本 身就是一个对象的世界,任何对象都具有一定的属性和操作,也就总能用数 据结构与算法两者合一地描述,此时,程序定律再次改写: 对象=(算法+数据结构) 程序=(对象+对象+......)
【11.3 类的声明与定义成员函数】
类也是一种用户自定义数据类型。它不仅包含不同数据类型的变量,还可 以包含对这些变量数据进行操作的函数。 类是一组变量及其相关函数的组合。类中的变量称为类的成员变量或数据 成员;函数称为类的函数成员或方法。
类的定义举例
struct Savings { public: //可以省略 unsigned deposit(unsigned amount) { balance+=amount; return balance; } unsigned accountNumber; float balance; }; class Savings { public: unsigned deposit(unsigned amount) { balance+=amount; return balance; } private: unsigned accountNumber; float balance; };
注:1、关键字class表示类,Savings是类名,一般首字母大写,以示与对 象名的区别,关键字public和private表示存储控制。 2、C++中类与结构的唯一区别是:类定义中默认情况下的成员是private 的 ,而结构定义中默认情况下是public的;在C中,结构中不允许有成员函 数,而在C++中有成员函数。
在声明类时,一般来说应该把类的所有数据成员都声明为私有的,同时声明 公有成员函数来访问这些数据成员。 在类的声明中,关键字public、protected和private的出现顺序是任意的, 可以不出现或多次出现。类中的每个成员只能有一种特定的访问属性。
PB 11第11章 自定义函数和结构

1.选择目标
2.选择pbl源文件
3. 在 ObjectType 中 选 择 Functions或All Objects
图11-5 打开自定义全局函数
11.1.3删除自定义全局函数
打开Library库管理器,打开要删除的自定义全局函数所在的PBL,选择 要删除的自定义全局函数,右击,出现弹出式菜单,选择Delete将删除 所选的自定义全局函数。
点击该图标,将显示 /隐 含函数属性定义
图11-8定义对象函数的属性
11.2.1 创建自定义对象函数
在定义函数的下面窗口内编辑代码。若函数有返回值,立即输入代码,即必须 写一条return语句,否则产生错误。 对象函数的返回值的类型、参数名、个数及类型能随时更改,系统会给出一个 提示信息,以确认是否更改。 在其它对象的程序中调用时,应在函数名前加上函数所在的对象名如 w_pipe.wf_error(num),当然w_pipe必须已被打开。
1.选择Functions 2.选择New Function
图11-7 定义对象函数
11.2.1 创建自定义对象函数
Access缺省值为“public” 。 访问属性Access有三个选择: l public:在整个程序中都可访问。 l private:只能在当前对象的程序中使用,不能在该对象的后代的程序中使用。 l protected:只能在当前对象的程序以及该对象的后代的程序中使用。 对象函数的命名规则一般与对象有关,如应用对象Application Object的函数一般 以“af_”作前缀,窗口对象Window的函数一般以“wf_”作前缀,菜单对象menu 的函数一般以“mf_”作前缀,用户自定义对象的函数一般以“uf_”作前缀。这些 规则清楚地表明了函数所在对象的类型,便于程序的维护。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
图11-17
定义外部函数
输入下面的代码: // 定义外部函数,即声明外部函数的语法格式与来源 Function Long ShellExecuteA(Long hwindow, String lpOperation, String lpFile, String lpParameters, String lpDirectory, Long nShowCmd) Library 'shell32.dll' Function Long GetDesktopWindow() Library 'user32.dll' 在“设置口令”的命令按钮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) //调用外部函数
[access] FUNCTION return_type function_name([REF][type1 arg1,。。。,typen ,。。。, argn]) LIBRARY lib_name
用Subroutine的格式:
[access] SUBROUTINE sub_name([REF][type1 arg1 , 。 。 。 , typen argn]) LIBRARY lib_name
图11-4 编辑函数代码
点击该图标,将显示 点击该图标,将显示/ 隐含函数属性定义
11.1.2修改自定义全局函数 修改自定义全局函数
在开发环境的主窗口中, 选 择 工 具 栏 的 Open 图 标或选择主菜单File的 子 菜 单 Open , 将 出 现 标题为“Open”的窗口, 在ObjectType下拉框中 选 择 Functions , 在 Object中选择要打开的 Object 4.选择要打 选择要打 函数, 开的函数 双击或点击OK按钮,进 入全局函数的定义,如 前图11-4所示。可以更 改函数返回值的类型、 参数名、个数及类型和 函数代码。
1.选择 选择Functions 选择 2. 选 择 要 修 改 的 函数 点 击 该图 标 , 将显 示 /隐含函数属性定 隐含函数属性定 义 , 可以 更改 返回 更改返回 值类型及参数等
3.输入或修 输入或修 改代码
图11-10 修改对象函数
11.2.3 删除自定义对象函数
要删除自定义对象函数,首先打开自定义函数所在的对象,然后 选择主菜单View的子菜单Function List。
图11-12 列出所有对象函数
图11-13删除对象函数 删除对象函数
11.3.1外部函数的定义 外部函数的定义
使用外部函数之前,必须先对其进行说明。根据作用范围分为两种类型:全局外部 函数Global External Functions和局部外部函数Local External Functions。全局外部 函数可在应用程序的任何地方使用;局部外部函数只能在所定义的对象中使用。 打开要定义外部函数的对象,再打开Script代码编辑窗口,选择Declare,再选择 Global External Functions或Local External Functions,最后输入函数定义。
点击该图标, 点击该图标, 将显示/隐含 将显示 隐含 函数属性定义
图11-2定义全局函数的属性 定义全局函数的属性
11.1.1创建自定义全局函数 创建自定义全局函数
参数传递方式有三种: 参数传递方式有三种: Value:值传递---将实际参数的值传递给函数参数 : Reference:地址传递---把实际参数的地址传递给函数,此时,如果 函数修改了形式参数的值,那么实际参数的值也就被修改了。 Readonly:地址传递---把实际参数的地址传递给函数,不过不允许 : 修改参数的值。 要 增 加 或 删 除 参 数 , 可 在 图 11-2 中 右 击 , 出 现 弹 出 式 菜 单 。 Add Parameter增加参数,Insert Parameter插入参数,Delete Parameter 删除参数
第11章 自定义函数和结构 章
11.1 11.2 11.3 11.4 创建自定义全局函数 创建自定义对象函数 外部函数 结构
11.1.1创建自定义全局函数 创建自定义全局函数
在开发环境的主窗口中,选择工具栏的New图标或选择主菜单 File的子菜单New,将出现标题为“New”的窗口。
图1 定义全局函数
1.选择目标 选择目标
2.选择 源文件 选择pbl源文件 选择 3. 在 ObjectType 中 选 择 Functions或All Objects 或
图11-5 打开自定义全局函数
11.1.3删除自定义全局函数 删除自定义全局函数
打开Library库管理器,打开要删除的自定义全局函数所在的PBL,选择 要删除的自定义全局函数,右击,出现弹出式菜单,选择Delete将删除 所选的自定义全局函数。
图11-11 列出全部函数
11.2.3 删除自定义对象函数
选择Function List后将列出该对 象的全部函数,如图11-12,右 击要删除的函数,出现一个弹出 式菜单,图11-13,选择Delete将 删除所选的对象函数。 注意: 注意 : 一旦选择Delete将立刻删 除所选的对象函数,系统对删除 操作不作提醒。 在图11-13中,选择弹出式菜单 中的Script,或双击所选的函数, 将打开Script代码编辑窗口,以 便查看与修改所选的对象函数, 包括函数返回值的类型、参数名、 参数个数、参数类型及函数代码 等。
1.选择 选择Functions 选择 2.选择New Function .选择
图11-7 定义对象函数
11.2.1 创建自定义对象函数
Access缺省值为“public” 。 访问属性Access有三个选择: public:在整个程序中都可访问。 : private:只能在当前对象的程序中使用,不能在该对象的后代的程序中使用。 : protected:只能在当前对象的程序以及该对象的后代的程序中使用。 : 对象函数的命名规则一般与对象有关,如应用对象Application Object的函数一般 以“af_”作前缀,窗口对象Window的函数一般以“wf_”作前缀,菜单对象menu 的函数一般以“mf_”作前缀,用户自定义对象的函数一般以“uf_”作前缀。这些 规则清楚地表明了函数所在对象的类型,便于程序的维护。
11.3.3外部函数使用实例 外部函数使用实例
在Windows的控制面板中的有一个口令管 理程序,用来设置和修改Windows和其它 系统口令,如图11-15。如何调用这个口 令管理程序呢? 步骤如下: 步骤如下: (1) 创建一个setpassword.pbl,其应用对 象名为password,再创建一个窗口w_pw, 窗口上放一个“设置口令”的命令按钮 cb_setpw,如图11-16所示。
图11-6 删除自定义全局函数
11.2.1 创建自定义对象函数
可以为Application Object对象、窗口对象、用户对象创建自定义 函数,这种函数称为对象函数。 先打开要定义函数的对象,再打开Script代码编辑窗口,先选择 Functions,再选择New Function,将出现函数定义窗口。
点击该图标, 点击该图标 , 将显 示/隐含函数属性定 隐含函数属性定 义
图11-9编辑函数代码 编辑函数代码
11.2.2 修改自定义对象函数
打 开 自 定 义 函 数 所 在 的 对 象 , 打 开 Script 代 码 编 辑 窗 口 , 选 择 Functions,再选择要修改的函数。对象函数的返回值的类型、参数名、 个数及类型都能随时更改。系统会给出一个提示信息,以确认是否更 改。可以输入或更改函数代码。
2. 选择 Global External Functions 或 Local External Functions 1.选择 选择Declare 选择
3.输入函数定义 输入函数定义
图11-14定义外部函数 定义外部函数
11.3.1外部函数的定义 外部函数的定义
定义外部函数时使用两种关键词:有返回值用Function,无返回值用Subroutine。 用Function的格式:
其中: access:访问级别。是可选项,只用于局部外部函数Local External Functions, : return_type:返回值类型。必须是一个合法的PowerBuilder数据类型。 : function_name和sub_name:外部程序的函数名或子程序名储存在DLL库中。 和 : REF:参数通过地址传递。 : typei:参数的数据类型。 : argi:参数名 : lib_name:包含外部函数或子程序的DLL/EXE文件名。 :
图11-15 Windows口令管理窗 口令管理窗 口
图11-16 调用外部函数示例
11.3.3外部函数使用实例 外部函数使用实例
(2) 编写代码 在应用对象password的open事件中编写代码: open(w_pw) 在窗口w_pw中定义外部函数。先打开w_pw的Script代码编辑窗 口,再选择Declare,然后选择Local External Functions。
增加、插入、 图11-3 增加、插入、删除参数
11.1.1创建自定义全局函数 创建自定义全局函数
函数名及参数定义好 后,在定义函数的下 面窗口内编辑代码。 或选择主窗口View菜 单 的 Script 子 菜 单 , 打开函数代码编辑窗 口。函数返回值的类 型、参数名、个数及 类型可以随时更改。 若函数有返回值,必 须立即输入代码,即 必 须 写 一 条 return 语 句,否则产生错误。 定义好的全局函数和 标准函数一样使用。