1 / 47

第 2 章 PowerScript 语言

第 2 章 PowerScript 语言. 2.1 PowerScript 基础 2.2 数据类型 2.3 变量声明及作用域 2.4 运算符及表达式 2.5 PowerScript 语句 2.6 几个常用的标准函数 2.7 编辑代码 2.8 应用程序编程实例. 2.1.1 注释. (1) 单行注释用 // 从双斜杠开始到行尾均为注释。 (2) 多行注释用 /* */ 从 /* 开始到 * / 结束均为注释。 例如: // 这是一个计算器程序 decimal add1 // add1 表示中间结果

huey
Download Presentation

第 2 章 PowerScript 语言

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第2章 PowerScript 语言 2.1PowerScript基础 2.2 数据类型 2.3 变量声明及作用域 2.4 运算符及表达式 2.5 PowerScript语句 2.6 几个常用的标准函数 2.7 编辑代码 2.8 应用程序编程实例

  2. 2.1.1注释 (1)单行注释用// 从双斜杠开始到行尾均为注释。 (2)多行注释用/* */ 从/*开始到*/结束均为注释。 例如: // 这是一个计算器程序 decimal add1 // add1表示中间结果 /* flag=1表示按下的数字是前面数字的一部分 flag=0表示按下的数字是一个新的数字的开始 */ PowerScript 在 工 具 栏 提 供了将 所 选 文 字 加 上/去 除 注释 的两个图 标

  3. 2.1.2 标识符 标识符是程序中用来代表变量、标号、函数、窗口、菜单、控件、对象等名称的符号。 标识符的命名规则: l必须字母或下划线开头; l由字母、数字、下划线—、短横线- 、¥、# 、%组成; l不能是PowerScript保留字(见附录); l不区分大小写。(但若用于Web、Unix等必须区分大小写); l最长40个字符。 注意: 短横线与减号是同一个字符,而短横线可以用在标识符中,因此,表达式中使用减法运算符时,必须在减号的两边加上空格,否则可能产生语法甚至语义错误。

  4. 2.1.3 续行符 语句超长,为阅读方便可以将语句分成几行,续行符& 例如:IF side1 = 5 AND & side2 = 6 THEN area = 5*7 相当于 IF side1 = 5 AND side2 = 6 THEN area = 5*7 注意:不能在标识符或保留字的中间续行。

  5. 2.1.4 特殊字符 常用的特殊字符 :如表 表2-1常用特殊字符

  6. 2.1.5 空值 空值既不是零,也不是非零的任何数值。 变量被赋予空值的途径有两条: (1)从数据库中读到空值; (2)使用SetNull()函数赋值. 例如:String person // person="" SetNull(person) // person值为NULL 测试变量或表达式是否为空值时,使用函数IsNull(),而不是直接使用关系表达式, 例如:假设a是个变量,要测试它是否为空值,可以这样写: IF IsNull(a) THEN ........

  7. 2.1.6 代词 PowerScript 提供了四个代词,分别为:This、Parent、ParentWindow和Super。常用的是前面三个。使用代词主要是为了增加代码的通用性,不受所指代的控件或对象的名称发生变化的影响。 lThis:This代表窗口、用户对象、菜单、应用对象或控件本身。如果不用This,则需要用按钮控件名cb_1、cb_2、cb_i等,将来修改维护很麻烦,同时难以使用复制、粘贴。 lParent:Parent指当前控件所在的窗口。 lParentWindow:ParentWindow代表运行时菜单所在的窗口,该代词只能在菜单的事件处理程序中使用。 lSuper:在编写控件或者对象的子对象的程序的时候,可以调用祖先的程序,用户可以直接使用祖先对象的名称调用它们,也可以使用Super来引用直接双亲。例如要调用父类的Clicked脚本可以这样写:CALL Super::Clicked

  8. 2.2.1 标准数据类型 标准数据类型包括数值型、字符型、日期型、布尔型等一些最基本的数据类型。 标准数据类型名称、含义 : • blob:二进制大对象,用于处理图像、大文本等 ; • boolean :布尔型,只有两个可能的值:true或false ; • character或char :单个ASCII字符 ; • String :字符串类型,用于存储任意的ASCII字符; • date :日期,包括年(1000-3000)、月(01-12)、日(01-31); • time :时间,包括小时(00~23)、分(00~59)、秒(00~59)以及秒的小数位(最多六位),范围从00:00:00到23:59:59:999999; • datetime :日期及时间; • decimal或dec:带符号十进制数,最大18位精度; • Double:带符号浮点数,15位有效数字,范围从2.2E-308到1.7E+308 ;

  9. 2.2.1 标准数据类型 • integer或int :16位带符号整数,范围从-32768到+32767 ; • long :32位带符号整数,范围从-2,147,483,648到+2,147,483,64; • Real:带符号浮点数,精度6位,范围从1.17E-38到3.4E+383.5E+5; • UnsignedInteger或UnsignedInt或Uint:16位无符号整数,范围从0 到65535; • UnsignedLong或Ulong:32位无符号整数,范围从0到4,294,976,295 ;

  10. 2.2.2 枚举类型 枚举类型是PowerBuilder定义的特殊常量,常用于对象或控件的属性、系统函数的参数等。但在PowerScript中我们不能定义自己的枚举类型,而只能按系统要求使用它。枚举类型实际上是一组值,每个值都以英文单词开始,以感叹号(!)结束,例如:yesno! ,OkCancel!。

  11. 2.2.3 系统对象数据类型 窗口、菜单、各种控件都是系统对象,每一种系统对象实际上都是定义在内部的一种数据类型。通常不必把这些对象当作数据类型来考虑,只需通过工具栏或菜单定义它们即可,因为它们都是可视化的对象。但有时候需要动态地处理窗口、菜单、控件等系统对象,就需要定义系统对象数据类型。

  12. 2.3.1 变量声明 所有变量在使用之前,都要首先予以说明。系统预定义的五个全局变量除外(SQLCA、SQLDA、SQLSA、Error、Message)。 格式:数据类型 变量名{=初值} 变量被声明后,若未指定初值,则系统将赋以默认值。对数值型变量而言,其默认值为零。对字符型变量而言,其默认值为空字符’’或空串“”。 在定义变量的同时,我们可以同时指定变量的初值。 例如:Integer score=100 //定义整型变量score,并赋予初值100 String city="南京", Country //定义变量city并赋初值“南京”, //定义变量Country,其初值为空串(“”)

  13. 2.3.2 变量作用域 • 有四种不同范围的变量:Local、Instance、Global、Shared。 • 在事件和函数中定义的变量都是Local变量,它的作用范围仅在所在的事件和函数内起作用,在别的事件和函数中不起作用。 • Instance是一种特殊的变量,它的作用范围在所在对象的全部事件及函数,包括该对象上的所有控件的事件及函数。是一种局部的“全局变量”。可以分别给Application、窗口等定义Instance变量。图2-1表示的是在Window下定义Instance变量的步骤,给Application等其它对象定义Instance变量的步骤与此类似。在Window下定义的Instance变量,作用范围是所在的窗口及窗口内的各种控件的所有事件、函数等,查看并粘贴Instance变量如图2-2所示。 • 定义Global变量与定义Instance变量的方法相似。不过Global变量的作用域是整个应用程序。一般说,使用Global变量不是一个好的习惯,它会降低程序的可靠性。

  14. 2.4.1 算术运算符 • 算术运算符有五个,用于加、减、乘、除、乘方。其中加号、减号还用于表示正数、负数。 • 在表达式中,乘方高于乘除,乘除高于加减。同级运算遵循自左至右的原则。

  15. 2.4.2 关系运算符 • 关系运算符用来对相同类型的量进行大小比较运算,常用于条件语句和循环语句。 表2-4关系运算符 • 关系运算符的结果是true或false。关系运算符可以应用于字符串的比较。

  16. 2.4.3 逻辑运算符 • 逻辑运算符用来对布尔型的量进行运算, 表2-5逻辑运算符 结果是true或false。有三个逻辑运算 符,其表示和功能见表2-5。 • 表2-6为逻辑运算的“真值表”。 用它表示当a和b的值为不同组 合时,各种逻辑运算所得到的 值。

  17. 2.4.4 连接运算符 连接运算符只有一个,就是符号“+”,用于把两个String型或Blob型变量的内容连接在一起,形成新的字符串或Blob型数据 例如: s1="computer "+"book" 则s1="computer book" s2="book"+"computer" 则s2="bookcomputer"

  18. 2.4.5 运算符的优先级 在表达式中,运算符按照优先级进行运算,共分九级,括号最高,同级运算自左至右。 1 () 括号 2 +,- ,++,-- 正号、负号、自增、自减 3 ^ 幂运算 4 *,/ 乘、除 5 +,- 加、减及连接运算 6 =,>,<,>=,<=,<> 关系运算符 7 NOT 逻辑反 8 AND 逻辑与 9 OR 逻辑或

  19. 2.5.1赋值语句 赋值语句用于给变量、对象属性赋值。 格式:variable_name= expression 其中variable_name表示变量名,expression代表表达式,它的作用是把表达式的值赋给等号左边的变量,例如:area=3.14*r*r。

  20. 2.5.2条件语句 条件语句分单行和多行两种格式。 格式1:IF condition THEN... ELSE... 格式2:IF condition THEN ..... ELSE ..... ENDIF 在条件语句中,ELSE子句是可选的 。 条件语句的执行过程是先计算condition (条件表达式)的值,如果为 true,则执行then后面的语句,否则执行else后面的语句(如果有 else的话)。

  21. FOR...NEXT语句按照预先规定的次数重复执行一段代码。FOR...NEXT语句按照预先规定的次数重复执行一段代码。 格式:FOR v=s TO e {STEP i} ...... NEXT FOR ...NEXT语句的执行过程见 图。图中“超过”的含义是: 当步长大于零时,表示“大于”; 当步长小于零时,表示“小于”。 若不指定步长,则为STEP 1。 步长是零时为死循环。 2.5.3 FOR循环语句

  22. 2.5.4 DO....LOOP循环 DO...LOOP循环是重复执行一段代码,直到条件表达式为true或false。它有四种格式: 格式1: DO UNTIL condition ...... LOOP 当条件为false时,执行 循环体;为true时退出 循环。

  23. 2.5.4 DO....LOOP循环 • 格式2: DO WHILE condition ...... LOOP 当条件为true时,执行 循环体;为false时退出 循环。

  24. 2.5.4 DO....LOOP循环 格式3: DO ...... LOOP UNTIL condition 先执行循环体,然后判断条件。 当条件为false时,执行循环体; 为true时退出循环。和格式一 的区别是这里的循环体至少执 行一次。

  25. 2.5.4 DO....LOOP循环 • 格式4: DO ...... LOOP WHILE condition 先执行循环体,然后判断条件。 当条件为true时,执行循环体; 为false时退出循环。和格式 二的区别是这里的循环体至少 执行一次。例题

  26. 格式: CHOOSE CASE test_expression CASE expression_list1 statements1 CASE expression_list2 statements2 . . . CASE expression_listn statementsn { CASE ELSE statements n+1} END CHOOSE 其中expression_list形式为: l单个值 l由逗号隔开的若干个值 l某一区间:例如: 1 to 8, 'b' to 'h‘ is表达式:例如: is>30 //is是保 留字,代表 test_expression的值 l混合:例如: 2,4,7 to 15,is>20 2.5.5 CHOOSE语句CHOOSE...CASE语句能够根据所测试的表达式的值的不同来执行不同的语句 ,而不象条件语句那样只有两种选择。

  27. 2.5.5 CHOOSE语句 执行CHOOSE CASE语句时,逐条查找CASE,如果找到与测试值相匹配的判断表达式,就执行该CASE后的语句块,再执行END CHOOSE后的第一条语句。如果CHOOSE CASE语句中包含CASE ELSE子句,则未找到任何匹配的CASE条件时,执行它中的语句块。

  28. 2.5.6 CONTINUE语句 格式:CONTINUE 只能用于DO...LOOP和FOR...NEXT语句中,遇到CONTINUE语句, 将不执行CONTINUE语句后面的语句,回到循环条件处继续执行。

  29. 2.5.7 EXIT语句 格式:EXIT 只能用于DO...LOOP和FOR...NEXT语句中,遇到EXIT语句,将结束循环,跳到LOOP或NEXT后面的语句去执行。

  30. 2.5.8 RETURN语句 格式:RETURN [表达式] 从当前事件或函数中返回。

  31. 2.5.9 HALT语句 格式:HALT [CLOSE] HALT结束当前的PowerBuilder应用程序。 HALT CLOSE先触发当前PowerBuilder应用程序的application对象的close事件,然后再结束当前的应用程序。

  32. 2.5.10 GOTO语句 格式:GOTO 语句标号 转到语句标号处继续执行。程序中应避免使用goto语句。 例如:i=1 BeginLoop: //语句标号 sum+=arr[i] //等价于语句sum=sum+arr[i], i+=1 IF i<=50 THEN GOTO BeginLoop //转到BeginLoop标识的位 置继续执行 . ....

  33. 2.6.1 MessageBox函数 MessageBox函数常常用于显示出错、警告、提示等, 在程序开发阶段被程序员用来显示程序运行状态及中间结果。它将在屏幕上显示一个窗口,用户在响应该窗口后,程序才能继续运行下去。 格式:MessageBox( title, text [,icon [,button [,default]]] ) 其中title和text参数是必须的,其它花括号中的参数是可选的。各参数的含义: • title:string类型,指定消息对话框的标题。 • text:指定对话框中显示的消息,可以是数值数据类型、字符串或boolean值。 • icon:枚举类型,可选项,指定要在该对话框左侧显示的图标。值为: Information!(默认值),StopSign!,Exclamation!,Question!,None!。 • button:枚举类型,可选项,指定显示在该对话框底部的按钮.值为: OK! (默认值),OKCancel!,YesNo!,YesNoCancel!,RetryCancel!,AbortRetryIgnore!。 • default:数值型,可选项,指定作为缺省按钮的按钮编号,按钮编号自左向右依次计数,缺省值为1,如果该参数指定的编号超过了显示的按钮个数,MessageBox()函数将使用缺省值返回。缺省按钮是指获得焦点的按钮。函数执行成功时返回用户选择的按钮编号(例如1、2、3等),发生错误时返回-1。如果任何参数的值为NULL,MessageBox()函数返回NULL。

  34. 2.6.2 Open函数 Open函数用来打开一个窗口。 格式:Open(window_name) 打开窗口并触发窗口的open事件。

  35. 2.6.3 Close函数 Close函数用来关闭一个窗口。 格式:Close(window_name) 先触发窗口的CloseQuery事件,若CloseQuery事件的返回值不等于1,则再触发close事件、关闭窗口并释放窗口以及窗口上的控件所占据的内存。若CloseQuery事件的返回值等于1,则不会关闭窗口。

  36. 2.6.4 Run函数 Run函数被用于在PowerBuilder中运行其它的Windows应用程序。 格式:Run(appl) 或 Run(appl, state) 其中,参数appl是个字符串,指明要运行的应用程序名,若不含路径名,则默认为当前路径。参数state是个枚举类型,用以指明开始运行时的窗口状态,有三个值可选:Maximized!:最大化窗口;Minimized!:最小化窗口;Normal!:正常大小窗口(原始窗口),此为默认值。

  37. 2.7 编辑代码 • 编辑代码首先选定要编辑代码的对象,然后选定事件,再在Script窗口中编辑代码。见图2-10。 • 或者用右键点击要编辑代码的窗口或控件,将出现一个弹出 式菜单,选择Script, 系统将打开Script窗口,并在窗 口显示最后一次编辑的事件的 代码。若事件都没有代码,则 选择最常用的事件,供用户输 入代码。用户可以选择所要的 事件。

  38. 2.8 应用程序编程实例 计算器的外观如图。首先在硬盘上创建一个目录\Calculator 用于存放计算器应用。创建计算器的具体步骤为: 1.创建计算器应用 (1)创建新的工作空间。单击New“Workspace”页,单击“OK”,保存文件到建的目录\Calculator,输入文件名为“Calculator.pbw”。 (2)创建新的应用。单击New图标按 钮,打开New对话框;选择“Target”页中的应用“Application”,单击“OK”,弹出保存文件对话框,选择到新建的目录\Calculator,输入文件名为“Calculator”,单击“Finish”,系统自动用上面输入的应用名称加上扩展名“.pbl”和“.pbt”组成库名Calculator.pbl以及目标文件名Calculator.pbt。

  39. 2.8 应用程序编程实例 2.创建计算器窗口和设置窗口属性 具体方法为: (1)单击New“PB Object”页双击 “Window”图标,创建一个新窗口对象并进入窗口画板。 (2)在窗口的属性(Properties)卡的General页中,在Title栏中输入窗 口标题“计算器”,将MaxBox和Resizable复选框不选中,其余使用缺省值;保存窗口对象,取名为w_calculator。 3.声明几个变量 在“Script”脚本区左上边的下拉列表框中选择“(Declare)”,然后在下面的脚本区中编写代码如下: decimal add1 char s1 int flag 其中,add1保存中间结果;s1保存按下的运算符;flag 是一个标志位,flag=1表示按下的数字是前面数字的一部分,flag=0表示按下的数字是一个新的数字的开始。

  40. 2.8 应用程序编程实例 4.在窗口中布置显示数值的单行编辑框控件 单击菜单“Insert | Control | SingleLineEdit”,在窗口上点击,出现一个单行编辑框,删除“Text”栏中的“none”,选中“DisplayOnly”属性,在单行编辑框的边沿拖动,调整其尺寸。 5.在窗口中布置十个数字按钮和小数点按钮 制作数字“1”按钮,单击菜单“Insert | Control | CommandButton”,在窗口上点击,在“Text”栏中输入“1”,点击“Other”页下部的“Pointer”下拉列表框,选择 “HyperLink!” 图标,单击数字“1”按钮,按右键,单击“Script”,光标自动跳到脚本编辑区,可以看到缺省的按钮事件为“licked” 输入如下代码: if flag=0 then sle_1.text="" flag=1 end if sle_1.text=sle_1.text+this.text 用外观复制的办法制作10个数字按钮以及小数点按钮,外观复制的办法是单击一个数字按钮,同时按Ctrl+T键。将新按钮Text栏中的内容改为要制作的按钮符号。

  41. 2.8 应用程序编程实例 6.+-*/运算符按钮的制作 用外观复制的办法制作“+”按钮,编辑新按钮的“Clicked”事件脚本如下: choose case s1 case '*‘ sle_1.text=string(dec(sle_1.text)*add1) case '/‘ sle_1.text=string(add1/dec(sle_1.text)) case '+‘ sle_1.text=string(dec(sle_1.text)+add1) case '-‘ sle_1.text=string(add1 - dec(sle_1.text)) end choose add1=dec(sle_1.text) s1=this.text flag=0 四个运算符按钮的“Clicked”事件的脚本操作过程与数字按钮类似。 7.“清除”按钮的制作 用外观复制的方法复制出一个按钮,将其Text栏中的内容改为“清除”,在其“Clicked”事件中输入以下脚本: sle_1.text="" add1=0 s1='' flag=0 保存已作的工作。

  42. 2.8 应用程序编程实例 8.“=”按钮的制作 用外观复制的方法复制出一个按钮,将Text栏中的内容改为“=”,将按钮的“Default”属性选中,这样按下回车键时,自动执行“=”按钮的“Clicked”事件的代码。 “=”键完整的脚本为: choose case s1 case '*‘ sle_1.text=string(dec(sle_1.text)*add1) case '/‘ sle_1.text=string(add1/dec(sle_1.text)) case '+‘ sle_1.text=string(dec(sle_1.text)+add1) case '-‘ sle_1.text=string(add1 - dec(sle_1.text)) end choose flag=0 s1=' ' 保存添加了控件的窗口对象,关闭窗口。 9.编写“应用”的脚本 在树型窗口中,双击“应用”Calculator,弹出应用画板。在事件下拉列表框中对应的是“Open”事件。 在下面空白的脚本编辑区中编写“Open”事件的脚本: Open(w_calculator) 保存并关闭应用画板。单击“Run”图标按钮,就可以运行计算器程序了。

  43. 这一排图标用于Script窗口,以方便代码的编辑 1. 选定要编辑代码的对象 2.选定事件 3. 这里是Script窗口,就在这里编辑代码。 图2-10 编辑代码

  44. (1) 用For-Next循环的程序段 integer s,i s=0 FOR i=1 TO 99 STEP 2 s=s+i NEXT st_1.text=”s=”+string(s) //将运算结果显示在静态文本 框st_1中,因为s是整数, //所以要用string()函数将 它转换为字符型。 (2)用Do Until-Loop循环的程 序段 integer s,i s=0 i=1 DO UNTIL i>99 s=s+i i=i+2 LOOP st_1.text=”s=”+string(s) 例题例如:分别用For-Next和Do-Loop求s=1+3+5+7+...99。注意其中的差别,特别是循环条件。

  45. (3) 用Do While-Loop循环的程 序段 integer s,i s=0 i=1 DO WHILE i<=99 //注意这里是小于等于99 s=s+i i=i+2 LOOP st_1.text=”s=”+string(s) (4) 用Do-Loop Until循环的程序段 Integer s,i s=0 i=1 DO s=s+i i=i+2 LOOP UNTIL i>99 st_1.text=”s=”+string(s) (5) 用Do -Loop While循环的程序段 integer s,i s=0 i=1 DO s=s+i i=i+2 LOOP WHILE i<=99 //注意 这里是小于等于99 st_1.text=”s=”+string(s) 例题

  46. 图2-1定义Instance变量 图2-1 定义 Instance 变量

  47. 图2-2查看并粘贴Instance变量

More Related