第1章 的 复习内容请问第1章中主要介绍了什么内容?当你拿到一个实际项目的时候,你应该分哪几个步骤来完成该项目?在用PowerBuilder 来开发项目时,其对象创建的先后顺序如何?请问实验一中的独立实验应该如何实现?第2章 PowerScript编程2.1 PowerS cript编程环境 2.2 PowerScript语言基础2.3 PowerScript数据类型2.4 PowerScript声明 语句2.5 PowerScript运算符 2.6 PowerScript控制语句2.7 PowerScript常用系统函数 2.8 PowerScript自定义函数 2.9 PowerScript自定义结构 2.10 本章小结2.11 本章习题2.1 Pow erScript编程环境PowerBuilder提供的编程环境实际上就是相关对象画板的脚本(Script)视图,主要用于查看或编写 事件和函数的代码、声明变量、常量、外部函数以及创建用户事件等等。 你知道PowerBuilder的哪些对象呢?应用对象 窗口对象 菜单对象 等事务对象 等2.1.1 脚本视图的打开PowerBuilder中几乎所有的对象都可以为之编写相应的脚本程序。当 然,在为对象编写脚本代码之前,应该首先打开相应的脚本视图。 对象选择事件选择脚本视图变量声明2.1.2 脚本视图定制一般来说,Po werBuilder提供的默认脚本视图已经能够满足绝大多数情况的需要。当然必要时用户也可以自己对脚本视图进行定制。 2.1.3 自 动脚本功能使用自动脚本功能是一种用来帮助编写脚本代码的辅助功能。它通过在脚本视图中显示上下文相关的属性、函数、事件、变量等信息的列 表框以供选择来大幅度地提高编写程序的效率,同时保证了代码输入的正确性。 2.2.1 脚本注释注释是开发人员针对程序功能人为添加的一 些说明性的文字,其本身并不参加程序的编译和执行。Power Script提供的注释方式与C语言完全相同,包括单行注释和多行注释。 例2.1 程序注释的示例:// 这是放在行开头的注释cb_1.text = “This代词”/ 这是多行注释的开始cb_1.te xt = “This代词”这是多行注释的结束 /2.2.2 分隔与续行如果要将多条短语句书写在一行上,可以在多条语句之间使用分隔 符分号“;”,如果要将一条长语句分成多行书写,可以在长语句的每个断点处加上续行符号“&”。 例2.2 分隔与续行的示例:分隔:B = B + 1 ;C = C + 1 ;A = B + C 续行:messagebox("提示" , "保存信息吗?", Qu estion! , YesNo! ,1) 可以写成 messagebox("提示" , "保存信息吗?", & Question! , YesNo! , 1)2.2.3 标识符标识符是指在程序代码中 用来代表变量、常量、函数、窗口、控件、菜单等名称的符号 .PowerScript中标识符在定义的时候必须遵循以下的规则:必须以英文 字母或者下划线“_”开头;不能是保留字; 最大长度为40个字符,字符之间不能有空格;不区分大小写;只能由字母、数字以及5个特殊字符 (“_”、“-”、“$”、“#”、“%”)组成; 例2.3 判断以下列举的标识符中,哪些是对,哪些是错? 标识符:ABC_Code 、Child-Id、Actual-$-amount 标识符:2nd-quantity、ABC Code、Child''s Id 2. 2.4 保留字保留字是系统预先保留的,提供系统内部使用的标识符。保留字不可以用作用户自定义的标识符,否则系统将给出编译器警告信息。 2.2.5 特殊ASCII字符PowerBuilder允许用户在字符串中使用特殊ASCII字符。特殊ASCII字符的输入以 “~ ”开头,后接一些普通字符或者数字。 2.2.5 特殊ASCII字符例2.4 特殊ASCII字符的示例: messagebox("提 示","特殊ASCII字符:~n~~n 新行 ~~~" 双引号 ~n~~t 制表符 ~~~'' 单引号" )消息框的显示界面如图2-6所示。2.2.6 空值NULL空值NULL是在与数据库进行交换时使用的一种特殊值,代表数据未定义,它与 空字符串“”、空字符‘’、数字0以及日期0000-00-00均不同。 函数SetNull()可以将一个变量赋值为NULL,函数Is Null()可以测试变量或者表达式是否为空值。 例2.5 空值NULL示例:String ls_name SetNull( ls_name) if IsNull(ls_name) then messagebox("提示", "ls_name为空值" )end if ls_name = null2.2.7 常用代词代词主要有This、Parent、ParentWindow和Sup er。 This用来指代当前正在为之编写脚本的对象,例如窗口、窗口控件、菜单、应用对象以及用户对象等。实际编程中,This经常可以 省略或者直接以对象或者控件的名称代替。 Parent用来指向包含当前对象的父对象。这里的当前对象可以是窗口中的控件、用户对象中的控 件或者某个菜单项。当窗口中的控件使用Parent时,Parent指向包含该控件的窗口;当用户对象中的控件使用Parent时,Par ent指向当前用户对象;当菜单中使用Parent时,Parent指向当前菜单项的上一级菜单。 2.2.7 常用代词ParentWi ndow用来代表当前菜单所关联的窗口,因此仅能在菜单的事件处理程序中使用。 Super用来调用当前子对象所继承的父对象中的事件处理 过程或者函数。子对象调用父对象的事件处理过程的语法格式为:Call Super :: <事件名> 或者Super :: Event <事件名>()调用父对象的函数的语法格式为:Super :: <函数名> ({ 参数列表 })2.3 PowerScript数 据类型PowerScript具有强大的数据处理功能,并为此提供了丰富的数据类型,主要包括以下四类:标准数据类型枚举类型系统对象数据 类型任意(Any)数据类型。不同的数据类型声明将直接影响到变量、常量、数组和其他对象在系统中的存储空间大小以及能表示的具体内容。2 .3.1 标准数据类型>> 接后页2.3.1 标准数据类型2.3.2 系统对象类型系统对象类型是一种特殊的数据类型,每一种类型都对 应一种系统对象,如窗口、菜单、控件等。对于可视化的系统对象如按钮、文本框等控件,一般不必特意将其作为数据类型来处理,而只需要选择直 接使用即可;对于非可视化的系统对象如事务对象(Transaction)则可以按照常见数据类型来处理。 例2.12 系统对象数据类型 示例:假设窗口w_object中有两个按钮分别是cb_1和cb_2,其中两个按钮的文本显示依次为“第一个按钮”和“第二个按钮”,如 图2-9所示。当程序运行时单击cb_2,通过消息框显示cb_1的文本内容。2.3.2 系统对象类型通常写法:messagebox( "提示","通过声明系统对象类型,~r得到cb_1的文本内容为''" + cb_1.text + "''") 系统对象写法:comma ndbutton cbcb = cb_1messagebox("提示","通过声明系统对象类型,~r得到cb_1的文本内容为''" + cb.text + "''") 2.3.3 枚举数据类型枚举类型是PowerBuilder预定义的数据类型,常被用于作为函数的参 数,或者用于指定对象或控件的属性。所有枚举类型都以感叹号“!”结尾,并且用户不能定义自己的枚举类型,这一点正是与其他高级语言如C、 C++等不同的地方。 2.3.4 Any数据类型Any数据类型是一种可变的数据类型,它可以存储包括标准数据类型、系统对象数据类型、 数组以及结构等在内的各种类型的值。对某Any类型的变量赋值之后,可以使用函数ClassName()来获得Any类型变量中保存数据的 实际类型。例2.14 Any数据类型示例:Any a_value String s_typea_value = 3.45s_typ e = ClassName(a_value)messagebox("提示",s_type) 2.3.5数据类型转换函数实际开发过程 中,不同的数据类型之间常常需要实现彼此之间的转换,转换操作必须依赖于数据类型转换函数来实现。 2.3.6数据类型检查函数数据类型检 查函数常用来检查字符串中内容是否为合法值。 2.4 PowerScript声明语句在PowerBuilder中,除系统预定义的5 个全局变量(SQLCA、SQLDA、SQLSA、Error、Message)外,其他使用的所有变量、常量以及数组等和其他程序设计语 言如C++一样,遵从先定义、后使用的原则,以便编译时进行存储空间的分配。 2.4.1变量声明变量是指在程序的运行过程中,其值可以被 改变的量。PowerBuilder中简单变量的声明只需要说明数据类型和变量名即可。其声明的格式为:<数据类型> <变量名1>[=< 初始值>][,<变量名2>[=<初始值>][, ……]] 其中“=”为赋值符号。如果一次声明多个变量,需要在变量之间使用“,”间隔 。例2.15 变量声明示例:int i long k=123456 date today , birthd ay char c="A" string my_address="Hello" 2.4.1变量声明变量被声明后, 若未指定初值,则系统赋予默认值。变量的数据类型不同,系统赋予的默认值也不一样。 2.4.1变量声明变量作用域决定了变量在程序中的哪 些地方可以被访问。根据作用范围的不同,变量分为四种类型,即 Global Variables (全局变量)、Instance Va riables (实例变量)、Shared Variables (共享变量)以及 Local Variables (局部变量)。 全局变量可以在整个应用程序中访问,存储在应用对象中。一般情况下不建议使用全局变量,因为这会降低程序的可读性。局部变量只能在相应的事 件或函数脚本中定义,事件或函数脚本执行完毕后,相应的变量也就撤销了。2.4.1变量声明实例变量与具体的对象实例相关联,可以将其看作 是对象实例的一个新增属性。对于一个具体的实例变量,可以在其所关联的对象实例的事件或函数(同时包括了该对象的所有控件的事件及函数)被 访问,是一种局部的全局变量。实例变量在其所关联的对象被打开时创建,被关闭时释放。共享变量属于一个对象并且可以被该对象的所有实例所访 问。当一个对象实例关闭时,共享变量的值保持不变;当再次打开这个对象实例时,可以继续使用关闭前的值。对于同一对象的所有实例,共享变量 的值始终保持不变。2.4.1变量声明变量的声明位置直接决定了变量的作用域。局部变量在使用该变量的程序段代码中直接声明和使用,而全局 变量、共享变量和实例变量则在窗口、菜单等对象的Script窗口中进行声明。2.4.1变量声明实例变量与局部变量的区别:请思考以下问 题在窗口的clicked事件中编写代码,要求程序能够辨认当前鼠标在窗口上单击的次数.实例变量与共享变量的区别:请思考以下问题在窗口 的clicked事件中编写代码打开一个新的窗口,同时在新打开的窗口的标题栏上显示这是该窗口第几次被打开.2.4.2常量声明常量是指 在程序的运行过程中,其值一直保持不变的量。常量的声明与变量类似,不过存在以下两点不同:声明时需要在数据类型前用关键词CONSTAN T修饰;声明时必须给常量赋初值。常量的声明格式为:CONSTANT <数据类型> <常量名1> = <初始值>[,<常量名2>=< 初始值>[, ……]]其中“=”为赋值符号。如果一次声明多个常量,需要在常量之间使用“,”间隔。例2.16 常量声明示例:CONS TANT int age=23 CONSTANT string city="温州" 2.4.3数组声明数组是具有一定顺序关系 且数据类型相同的若干个元素组成的集合。数组中的各个变量通常称为数组元素,数组元素通过下标进行访问。数组的声明格式为: <数据类型> <数组名>[<数组元素的个数> ] = { 初值表 }其中,数组元素的个数可以省略,但方括号不能省略。如果省略数组元素的个数,则 该数组被声明为动态数组。缺省情况下数组元素的下标从1开始。如果一次声明多个数组,需要在数组名称之间使用逗号“,”间隔。如果定义多维 数组,下标之间用逗号分开。例2.17 数组声明示例:int scores[30]int scores[ 2 to 10]strin g address[] = {"温州","杭州","台州"}real val[5,5] 2.5 PowerScript运算符运算 符用于构造各种表达式,以便完成一定的运算。PowerScript提供的运算符主要包括4种:算术运算符关系运算符逻辑运算符连接运算符 。2.5.1算术运算符算术运算符用于构成算术表达式,完成加、减、乘、除和乘方5种算术运算。 2.5.2关系运算符关系运算符用于两个 可以比较的数据类型之间的关系比较,其结果为True或者False。 字符串的大小如何进行比较?2.5.3逻辑运算符逻辑运算符用于完 成布尔类型的值的逻辑运算,其结果为True或者False或者Null。 2.5.4连接运算符连接运算符主要用于把两个String类 型变量或者Blob类型变量的内容连接在一起,从而形成新的字符串或者二进制大对象数据。PowerScript提供的连接运算符只有一个 ,就是符号“+”。 例2.18 字符串连接的示例如下:String FirstName , LastName , FullName FirstName = “shen”LastName = “John”FullName = LastName + FirstNam e2.5.5运算符优先级在由运算符构成的表达式中,其运算需要按照运算符的特定次序进行,这一特定的次序由运算符的优先级决定。 2.6 PowerScript控制语句PowerScript控制语句主要用于控制程序流程.。赋值语句条件语句循环语句。。。 2.6.1 赋值语句赋值语句用于把一个常量、变量或者是表达式的结果赋值给变量、对象的属性。其语法格式为:variablename = expr ession赋值语句两边的数据类型应该一致,否则需要数据类型转换函数进行转换。 例2.20 赋值语句示例:ls_name = “J ohnshen”li_age = 23在PowerScript中,赋值号与关系运算符的“=”是相同的,因此不能在一条语句中给多个变 量赋值。li_a = li_b = 3 2.6.2条件语句IF语句单行if语句的语法格式为:IF condition THEN action1 { Else action2 }例2.21 单行IF语句示例:IF true THEN a=3 ; b =4IF true THEN a=3 else b=4 ; c=5多行if语句的语法格式为: IF condition1 THEN act ion1 {ElseIF condition2 THEN action2 。。。} {Else action3} En d IF例2.22 多行IF语句示例:IF true THEN a=3Else b=4 c=5End IF2.6.2条件语句C HOOSE CASE语句CHOOSE CASE语句是一种多分支选择语句,能够根据表达式值的不同而执行不同的语句,其语法格式为:CH OOSE CASE testexpression CASE expressionlist statementblock { CA SE expressionlist statementblock 。。。} {CASE ELSE statementbl ock }End CHOOSE例2.23 CHOOSE CASE语句示例:CHOOSE CASE Weight CASE 1, 2,3,4,5 Postage=Weight0.70 CASE IS < 16 Postage=Weight 0.30 CASE 16 to 48 Postage=4.50 CASE ELSE Post age=25.00END CHOOSE2.6.3循环语句FOR…NEXT循环 FOR…NEXT是一种计数循环,它能够使循环体中的语 句执行规定的次数,因此这种循环适用于循环次数已经确定的情况,其语法结构为:FOR varname = start TO end { STEP increment} statementblockNEXT例2.24 FOR…NEXT循环示例:FOR count = 1 TO 10 STEP 1 messagebox("提示","这是第" + String(count) + "次循 环")NEXT2.6.3循环语句DO…LOOP循环 DO…LOOP是一种条件循环,因此这种循环更加适合于循环次数事先无法确定的情况 。第一种其语法格式为:DO UNTIL condition statementblockLOOP第二种其语法格式为:DO WHILE condition statementblock LOOP第三种其语法格式为:DO stat ementblockLOOP UNTIL condition第四种其语法格式为:DO statementblockLO OP WHILE condition2.6.3循环语句例2.25 将用FOR…NEXT循环语句改写成以4DO…LOOP循环方式。F OR count = 1 TO 10 STEP 1 messagebox("提示","这是第" + String(coun t) + "次循环")NEXT第一种其语法格式为:DO UNTIL condition statementblockLO OPint count = 1do until count > 10 messagebox("提示","这是第" + String (count) + "次循环") count ++loop第二种其语法格式为:DO WHILE condition sta tementblock LOOPint count = 1do while count <= 10 messagebox("提示" ,"这是第" + String(count) + "次循环") count ++loop第三种其语法格式为:DO sta tementblockLOOP UNTIL conditionint count = 1do messagebox("提示"," 这是第" + String(count) + "次循环") count ++loop until count > 10第四种其语法 格式为:DO statementblockLOOP WHILE conditionint count = 1do m essagebox("提示","这是第" + String(count) + "次循环") count ++loop while count <= 102.6.3循环语句Continue和Exit语句 Continue和Exit语句一般用于FOR…NEXT和D O…LOOP循环中,可以更加灵活的控制循环的执行。当循环体在执行过程中,遇到CONTINUE语句时,将跳过本次循环而直接开始新一轮 循环;遇到Exit语句时,将立即退出当前循环,程序将转到循环后的语句继续执行。例2.27 Continue和Exit语句示例: f or count = 1 to 10 if count = 3 then continue messagebox("提示"," count现在的值为" + String(count)) if count = 4 then exitnext 2.6.4其他语 句Return语句 Return语句用于立即终止事件处理程序或者函数的运行,同时返回到调用程序,其语法格式为:Return { e xpression }可选项expression为一个表达式,它的值将作为返回值返回给事件处理程序或者函数。Halt语句 Halt 语句用于终止整个应用程序的运行,其语法格式为:Halt {Close}当Halt语句不带Close选项时,该语句将立即终止应用程序 的运行;带Close选项时,一旦执行该语句,应用程序先执行应用对象的Close事件处理程序,再终止应用程序的运行。2.6.5粘贴控 制语句在脚本代码的编写过程中,经常需要使用到以上的控制语句如条件语句、循环语句等。以上控制语句除了从脚本视图直接输入之外,也可以通 过粘贴的方法来提高代码的输入速度。粘贴控制语句的步骤如下所述: 2.7 PowerScript常用系统函数系统函数不属于任何对象 或控件,在程序的任何地方都可以直接使用。PowerBuilder提供了几百种系统函数,熟练的掌握它们不仅有助于加快应用程序开发的进 度,而且提高了程序的运行效率。以下主要介绍在实际开发过程中的一些常用的系统函数,其他更多的系统函数请使用联机帮助查看。 2.7.1 MessageBox()函数MessageBox()函数将在屏幕上显示一个提示框,用于向用户显示一些提示、警告、出错、询问等信息 。MessageBox()函数的格式如下:MessageBox ( title, text {, icon {, button { , default } } } ) 例2.29 MessageBox()函数示例:int li_returnli_return = Messagebox("提示","请选择按钮",Question!,YesNo!)if li_return = 1 then Messagebox("提示","你选择了Yes",Exclamation!)else Messagebox("提示","你选择 了No",Exclamation!)end if2.7.2 字符串相关函数Asc()函数 Asc()函数用于获取字符串中第一个字符 的ASCII码值。其语法格式为:Asc ( string ) 如Asc(“ABCD”)Char()函数Char() 函数用于获取字符串的第一个字符,或者将Blob变量的第一个值或一个数值转换为字符。其语法格式为:Char ( n ) 如char(65)Fill()函数Fill()函数用于获取一个由指定长度的指定字符构成的字符串。其语法格式为:Fil l ( chars, n ) 如Fill(“ABCD” , 3) , Fill(“” , 3)2.7.2 字符串相关 函数Left()函数Left()函数用于获取指定字符串中左部的指定长度的子串。其语法格式为:Left ( string, n ) 如Left(“ABCD” , 2)Mid()函数Mid()函数用于获取指定字符串中指定位置开始的指定长度的子串。其 语法格式为:Mid ( string, start {, length } ) 如Mid(“ABCD” , 2 , 2)Rig ht()函数Right ()函数用于获取指定字符串中右部的指定长度的子串。其语法格式为:Right ( string, n ) 如Right(“ABCD” , 2)2.7.2 字符串相关函数LeftTrim()函数LeftTrim()函数用于删除字 符串中左部的空格。其语法格式为:LeftTrim ( string ) 如LeftTrim(“ ABCD”)RigthTr im()函数RigthTrim ()函数用于删除字符串中右部的空格。其语法格式为:RigthTrim ( string ) 如R ightTrim(“ABCD ”)Trim()函数 Trim ()函数用于删除字符串中两边的空格。其语法格式为: Trim ( string ) 如Trim(“ ABCD ”)2.7.2 字符串相关函数Lower()函数Lower() 函数用于将字符串中所有的大写字母转换为小写字母。其语法格式为:Lower ( string ) 如Lower( “ABCD”)Upper()函数Upper ()函数用于将字符串中所有的小写字母转换为大写字母。其语法格式为:Upper ( st ring ) 如Upper(“abcd”)Len()函数Len()函数用于求指定字符串或者Blob变量的长度 。其语法格式为:Len ( string or blob ) 如Len(“ABCD”) 2.7.2 字符串相关函数Pos()函 数Pos()函数用于在一个字符串中从指定位置开始查找其子串的位置。其语法格式为:Pos ( string1, string2 {, start } ) 如Pos(“ABCD” , “C”)Replace()函数Replace()函数用于将一个字符串中指定长 度的子串替换为另一个字符串。其语法格式为:Replace ( string1, start, n, string2 )如Repla ce(“ABCD” , 2 , 3 , “ELL”)2.7.2 字符串相关函数例2.28 字符串函数示例:? = Asc("A") ? = Char(65) ? = Fill("-+", 2) ? = Left("BABE RUTH", 4)? = Mid("BABE RUTH", 5, 5) ? = Right("BABE RUTH", 4) ? = LeftTrim(" RUTH")? = RightTrim( "RUTH ") ? = Trim(" BABE RUTH ") ? = Lower("Babe Ruth") ? = Upper("Babe Ruth") ? = Len("") ? = Pos("BABE RUTH", "RU") ? = Replace("Davis", 4, 2, "e")2.7.3 数值相 关函数Abs()函数Abs()函数用于计算一个数的绝对值。其语法格式为:Abs ( n ) Int()函数Int()函数用于求不大 于(即小于或等于)某个指定值的最大整数。其语法格式为:Int ( n )Ceiling()函数Ceiling ()函数用于求不小于 (即大于或等于)某个指定值的最大整数。其语法格式为:Ceiling ( n )Max()函数Max()函数用于求两个数中的最大值。 其语法格式为:Max ( x, y )2.7.3 数值相关函数Min()函数Min ()函数用于求两个数中的最小值。其语法格式为 :Min ( x, y )Mod()函数Mod()函数用于求两个数的余数。其语法格式为:Mod ( x, y ) Round() 函数Round()函数用于将给定的小数四舍五入到指定的小数位数。其语法格式为:Round ( x, n )Rand()函数Rand ()函数主要用于随机得到一个位于1和最大值之间的整数。其语法格式为:Rand ( n )2.7.3 数值相关函数例2.29 数值函 数示例:? = Abs(-4) ? = Int(3.8) ? = Int( - 3.8) ? = Ceiling (-4.2)? = Max(4,7) ? = Min(- 4, - 7) ? = Mod(20, 6) ? = Ro und(9.625, 2)? = Rand(10)2.7.4 日期相关函数Today()函数Today()函数用于获取当前的系统 日期。其语法格式为:Today ( )Year()函数Year()函数用于获取日期中的年份。其语法格式为:Year ( date )Month()函数 Month ()函数用于获取日期中的月份。其语法格式为:Month ( date )Day()函数Day ( )函数用于获取日期中的日期。其语法格式为:Day ( date )2.7.4 日期相关函数Now()函数Now()函数用于获取当前 的系统时间。其语法格式为:Now ( )Hour()函数Hour ()函数用于获取时间(24小时制)中的小时。其语法格式为:Hou r ( time )Minute()函数Minute ()函数用于获取时间(24小时制)中的分钟。其语法格式为:Minute ( time )Second()函数Second ()函数用于获取时间(24小时制)中的秒数。其语法格式为:Second ( time )2.7.4 日期相关函数例2.30 日期函数示例:? = today() ? = Year(today()) ? = Month((today()) ? = Day(today())? = now() ? = Hour(now()) ? = Minute(now()) ? = Second(now())2.7.5 数组相关函 数LowerBound()函数LowerBound()函数用于获取数组中指定维的下界。其语法格式为:LowerBound ( ar ray {, n } )其中,array为指定的数组名,n为可选项,用于指定数组的某一维。UpperBound()函数UpperB ound ()函数用于获取数组中指定维的上界。其语法格式为:UpperBound ( array {, n } )其中,array 为指定的数组名,n为可选项,用于指定数组的某一维。 2.7.5 数组相关函数例2.31 数组函数示例:假设声明以下数组intege r a[5], b[2,5],请问? = LowerBound(a) ? = UpperBound(a)? = LowerBound(b) ? = UpperBound(b)? = LowerBound(b,2) ? = UpperBound(b,2)2.7.6 定时相关函数Idle()函数Idle()函数用于设置定时器时间间隔,如果 用户在指定的时间间隔内没有任何动作就触发应用对象的idle事件。其语法格式如下:Idle ( n )Timer()函数Timer( )函数用于设置定时器时间间隔,并且在这一时间间隔内反复触发指定窗口的Timer事件,其语法格式如下:Timer ( interva l {, windowname } )例2.32 定时函数示例:Idle(100) timer(2 , this)2.7.7 调用相关函数Run()函数Run()函数用于运行一个指定的应用程序。Run()函数的语法格式为:Run ( string {, windowstate } )ShowHelp()函数ShowHelp()函数用于显示指定的帮助文件。其语法格式如下:ShowHe lp ( helpfile, helpcommand {, typeid } )例2.33 调用函数示例: Run("notepa d", Maximized! ) ShowHelp("C:\PB\INQ.HLP", Index!)2.7.8粘贴系统函数在脚本代 码的编写过程中,经常需要使用到以上的各种系统函数。除了从脚本视图直接输入之外,也可以通过粘贴系统函数的方法来提高代码的输入速度。粘 贴系统函数的步骤如下所述:2.8 PowerScript自定义函数PowerBuilder中除了系统提供的函数之外,用户也可以根 据程序需要定义自己的函数。用户自定义函数主要分为自定义全局函数和自定义对象函数。自定义全局函数与任何对象均无关联,在应用程序的任何 位置均可以进行调用;自定义对象函数则是定义在窗口、菜单等对象之中,是这些对象的一部分,而且通常只能在所在对象的脚本之中进行调用,但 是必要时也可以在其它对象中通过“对象名.函数名()”进行调用。 2.8.1 自定义全局函数图2-21 New对话框图2-22 函数 画板访问范围返回类型函数名称参数信息功能实现2.8.2 自定义对象函数图2-23 应用对象脚本视图 图2-24 应用对象函数画板 访问范围返回类型函数名称参数信息功能实现2.9.1 自定义全局结构在一个结构中,可以包含一个或者多个成员变量,并且各个成员变量均 具有相应的数据类型和名称。在Type下拉列表框中选择成员变量的类别,在Variable Name中直接输入成员变量的名称。 图2- 25 全局结构画板2.9.2 自定义对象结构打开要创建的结构所在的对象画板,然后选择菜单Insert的子菜单项Structure打 开相应的结构画板,如图2-26所示。 图2-26 对象结构画板2.10 本章小结本章主要介绍了PowerBuilder的脚本编程 环境,PowerScript语言的基本语法及流程控制语句,PowerBuilder提供的部分常用系统函数以及如何自定义函数和结构。通过本章的学习,应该进一步熟悉PowerBuilder编程环境,并且熟记PowerScript的编程语法及其相关应用,为后续章节的学习打下扎实的基础。2.11 本章习题一、填空题1、PowerScript中的续行符号是_______,分隔符号是______。2、PowerScript中的注释分为_________和_________。3、PowerScript中代词主要包括_______、_________、________、_________。4、PowerScript语言中,所有的枚举类型都是以______结尾5、PowerScript中常量的声明必须使用关键字__________。6、PowerBuilder中如果声明的变量只能在事件或函数中使用,则该变量属于______变量。7、PowerBuilder中通过函数________设置变量为NULL,函数________判断变量是否为空。2.11 本章习题二、简答题1、PowerScript中的四个代词依次指代什么?2、PowerScript语言中的标识符允许使用短横线“-”吗?3、PowerScript中的数据类型共分为哪几种?如何查看每种数据类型?4、PowerScript中变量作用域分为哪几种?各有什么不同?5、PowerScript中的运算符主要分为哪几种?6、PowerScript中常用的系统函数主要分为哪几类?2.11 本章习题三、编程题1、编写一个判断是否闰年的程序,要求对于任意输入的一个月份,程序能够判断出该年份是否是闰年。2、编写一个“字符统计”的程序,要求对于任意一个字符串,程序能够分别统计出其中所包含的各类字符,包括数字字符、英文字符、空格字符以及其他字符的个数。3、编写一个求和的程序,要求能任意输入两个整数,程序能够计算出这两个整数之间的所有奇数和、偶数和。2.11 本章习题4、试设计如图2-27所示的“成绩等级”窗口,以便实现将百分制转换为相应等级的功能,其中,90分及以上为“优秀”,80分及以上为“良好”,70分及以上为“中等”,60分及以上为“及格”,60分以下为不及格(分别用IF语句和CHOOSE CASE语句实现)。5、创建两个自定义函数,两个函数的功能是分别求出任意给定的两个整数的最大公约数和最小公倍数。 (辗转相除法来求最大公约数 )图2-27 成绩等级窗口 |
|