第2章PowerScript語言介紹._第1頁
第2章PowerScript語言介紹._第2頁
第2章PowerScript語言介紹._第3頁
第2章PowerScript語言介紹._第4頁
第2章PowerScript語言介紹._第5頁
已閱讀5頁,還剩24頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、第2章PowerScript語言介紹第2章 PowerScript語言介紹PowerScript語言是PowerBuilder的專用編程語言,是一種結(jié)構(gòu)化的、面向?qū)ο蟮母呒?jí)編 程語言。該語言不僅功能強(qiáng)大,而且簡(jiǎn)單易學(xué),是學(xué)習(xí)和使用PowerBuilder必須掌握的一種語言。本章主要介紹PowerScript語言的基本語句、語法規(guī)則、數(shù)據(jù)類型、變量、表達(dá)式、函數(shù)的使用。熟練地掌握PowerScript語言是靈活高效地開發(fā)高質(zhì)量PowerBuilder應(yīng)用程序的基本要求。2.1 PowerScript編程語言基礎(chǔ)PowerScript是一種自由格式的語言,它很寬容,比如:語句行中的空格、縮進(jìn)等格式

2、編 排信息完全被編譯器忽略,為了閱讀方便,可以隨意安排語句行的位置。但是它也有自己的 一組基本語法規(guī)則,本節(jié)簡(jiǎn)單介紹PowerScript語言的斷行、續(xù)行、注釋、標(biāo)識(shí)符、代詞、保留字等成分的格式和用法。2.1.1 注釋注釋是添加在程序中的一些說明性的文字,雖然不是必須的,也是不可缺少的,但它能 夠增強(qiáng)程序的可讀性,并且程序運(yùn)行時(shí)不執(zhí)行而是簡(jiǎn)單的跳過。PowerScript中加注釋的方式與C語言完全相似,有行注釋和塊注釋兩種:行注釋:從雙斜線“ /”開始,而后書寫注釋內(nèi)容,到行尾結(jié)束。例如:Ope n( w_ma in)/ 打開主窗口塊注釋:以符號(hào)“ /* ”開始,到符號(hào)“ */”結(jié)束,不管其中

3、夾了多少東西,它們都是注 釋,例如:/*函數(shù)返回值為: 0正常 1出錯(cuò)*/注意:在默認(rèn)情況下,PowerBuilder中的所有注釋內(nèi)容均以藍(lán)色顯示的。2.1.2 標(biāo)識(shí)符標(biāo)識(shí)符是指在程序中使用的變量、標(biāo)號(hào)、函數(shù)、窗口、控件、菜單及對(duì)象等的名稱。在PowerBuilder 8.0中,標(biāo)識(shí)符的命名遵從下述規(guī)則:必須以英文字母開頭。其余字符可以是字母、數(shù)字及一些特殊符號(hào):下劃線(_)、短橫線(-)、美元符號(hào)($)、號(hào)碼符號(hào)(#)、百分號(hào)(%)°最長(zhǎng)40個(gè)字符,且中間不能插入空格。 保留字不能用做標(biāo)識(shí)符,因?yàn)樗鼈円延刑厥獾暮x。大小寫不敏感,即不區(qū)分大小寫,女口name與NAME是一樣的。例如

4、,下面是一組正確的標(biāo)識(shí)符:rs 返回值r_code/ 代碼Large_Butt on #1/ 第一個(gè)大按鈕Child - ID/允許使用短橫線時(shí)是個(gè)正確標(biāo)識(shí)符下面的標(biāo)識(shí)符寫法是錯(cuò)誤的:aBc code標(biāo)識(shí)符中間不能有空格abc?def/標(biāo)識(shí)符中間有非法字符Ope n誤用保留字2_this/以數(shù)字開頭注意:由于短橫線與減號(hào)是同一個(gè)字符,因此,表達(dá)式中使用減法運(yùn)算符時(shí),必須在減 號(hào)的兩邊加空格,否則可能產(chǎn)生語法甚至語義錯(cuò)誤。2.1.3語句行的書寫約定通常情況下,PowerScript的一條語句書寫在一行上,每條語句的末尾不需要語句結(jié)束符,書寫完畢后按Enter鍵轉(zhuǎn)到下一行,開始一條新的語句。Pow

5、erScript語言有時(shí)候在一行中寫多條語句,在語句之間用分號(hào)";”進(jìn)行分隔。例如:a=a+1;g=g+1;c nt=a+g+c nt但最好不要在一行中寫多條語句,每條語句占據(jù)一行既直觀又清晰,而一行中寫了多條 語句會(huì)增加閱讀的難度、降低可讀性。如果一條語句太長(zhǎng),那么允許把一條語句書寫在幾行上,這時(shí)就需要使用續(xù)行符“& ”。它放在一行的末尾指示下一行是當(dāng)前行的繼續(xù)。例如,可以把下面的語句書寫在兩行上:MessageBox("SQL 語句出錯(cuò)","出錯(cuò)編號(hào)="+String(SQLCA.SQLCode) MessageBox("

6、SQL語句出錯(cuò)","出錯(cuò)編號(hào)="+&Stri ng(SQLCA.SQLCode)注意:使用續(xù)行符時(shí)要注意它的位置,不能在標(biāo)識(shí)符或保留字的中間插入續(xù)行符。例如,對(duì)上面的例子,下面的續(xù)行是錯(cuò)誤的,原因在于將標(biāo)識(shí)符分成了兩行:MessageBox("SQL 語句出錯(cuò)","出錯(cuò)編號(hào)="+String(SQL& CA.SQLCode)2.1.4 標(biāo)號(hào)雖然在結(jié)構(gòu)化程序設(shè)計(jì)中不提倡使用GOTO語句,但是在 PowerScript中仍然支持這種形式,用標(biāo)號(hào)來指明轉(zhuǎn)移地址, 標(biāo)號(hào)的寫法就是在標(biāo)識(shí)符的后面加冒號(hào)“:”標(biāo)號(hào)可以在一

7、條語句的前面;也可以單獨(dú)占一行。例如:求50以內(nèi)的偶數(shù)和的程序。in teger i,li_sumi=1li_sum=0begi n:i=i+1if i>50 the ngoto finishend ifif mod(i,2)=0 thenli_sum=li_sum+iend ifgoto begi nfini sh:MessageBox("50 以內(nèi)的偶數(shù)和為:",string(li_sum)2.1.5 特殊ASCII碼字符)作為引用特在字符串中可以包括特殊的ASCII碼字符,特別是控制字符,波浪號(hào)(殊ASCII字符或控制字符的前綴。常用的特殊字符如表2-1所示。特

8、殊字符表示方法新行(Newline)n制表符(Tab)t垂直制表(Vertical Tab)V回車(Carrige return)r換行(Formfeed)f退格(Backspace)b雙引號(hào)(”)"單引號(hào)(?)?波浪號(hào)()十進(jìn)制形式的ASCII碼000 到 255十六進(jìn)制形式的ASCII碼h00到hFF八進(jìn)制形式的ASCII碼000 到 255表2-1特殊ASCII字符列表例如下面語句:messagebox(信息','你好!PowerBuilder8!')執(zhí)行后顯示結(jié)果如圖2-1所示。而加上特殊符號(hào)回車換行符(rn)之后: messagebox(,信息?,?

9、爾好!rnPowerBuilde?) 顯示結(jié)果如圖2-2所示,可以看到信息分成兩行顯示。圖2-1顯示結(jié)果圖2-2 顯示結(jié)果(加回車換行符)2.1.6 空值(Null )空值是PowerBuilder與數(shù)據(jù)庫交換數(shù)據(jù)時(shí)使用的一種特殊值,代表數(shù)據(jù)未定義、不確定,它與空字符串、數(shù)值零以及日期00-00-00的意義完全不同。PowerBuilder的所有數(shù)據(jù)類型都 支持空值,但PowerBuilder并不將空值作為變量的默認(rèn)初值。例如,當(dāng)變量被說明未初始化 時(shí),PowerBuilder把0賦給數(shù)值型變量,把 False賦給布爾型變量,把空串("")賦給字符串 變量。變量被賦予空值的

10、途徑有兩條:(1 )從數(shù)據(jù)庫中讀到空值;(2) 使用SetNull()函數(shù)賦值。例如:String name此時(shí) name=""SetNull(name)/ name 值為 NULL測(cè)試變量或表達(dá)式是否為空值時(shí),使用函數(shù)lsNull(),而不是直接使用關(guān)系表達(dá)式,例如,a是個(gè)變量,要測(cè)試它是否為空值,可以這樣寫:IF IsNull(a) THEN ”下面的寫法是錯(cuò)誤的:IF a=NULL THEN ”原因在于空值不等于任何值,也不等于另一個(gè)空值。注意:任意參數(shù)值為空值的函數(shù)返回值為空值,任何變量值為空值的表達(dá)式的結(jié)果為空 值。2.1.7 保留字保留字是指PowerBuild

11、er內(nèi)部使用的一些命令或符號(hào),它們不能作為標(biāo)識(shí)符來使用,否 則在編譯時(shí)會(huì)出現(xiàn)警告信息。它們有:aliaseventnotstaticand*executeofstepauto in sta ntiateexitonsubrouti necallexter nalope n*supercasefalseorsystemcatchfetchpare ntsystemreadchoosefin allypost*systemwriteclose*firstpreparethe ncommitforpriorthisconnectforwardprivatethrowcon sta ntfrompri

12、vatereadthrowscon ti nuefunctionprivatewritetocreate*globalproceduretriggercursorgotoprotectedtruedeclarehaltprotectedreadtrydeleteifprotectedwritetypedescribe*immediateprototypesun tildescriptorin directpublicupdate*destroyin sertreado nlyupdateblobdisc onnectin torefusi ngdoin tri nsicreturnvariab

13、lesdyn amicisrollbackwhileelselastrpcfu ncwithelseiflibraryselectwithinendloopselectblob_debugenu meratedn extshared注意:在上面列舉的保留字中,左上角帶有*的保留字也是函數(shù)名;在 PowerBuilder 8.0中,所有保留字的顏色都會(huì)變成綠色,這是在編寫程序的時(shí)候區(qū)分保留字的最好方法。2.1.8 代詞PowerBuilder提供了幾個(gè)代詞用來引用對(duì)象或控件而不用指定它們的名稱。程序中使用代詞的好處是避免硬代碼,編出來的程序會(huì)具有較好的可移植性。PowerBuilder提供了 4

14、個(gè)代詞,分別為:This、Pare nt、Pare ntWin dow和Super,其中前3個(gè)代詞應(yīng)用廣泛,下面簡(jiǎn)單 介紹一下這些代詞的意義和用法。ThisThis :代表窗口、用戶對(duì)象、菜單、應(yīng)用對(duì)象或控件本身,即代表正在為之編寫事件處理程序的對(duì)象。例如,窗口中有一個(gè)名稱為cb_ok的按鈕,在該按鈕的Clicked事件處理程序中可以寫上代碼:This.text=你好"這里的This就代表cb_ok按鈕(因?yàn)槭窃谠摪粹o的 Clicked事件編寫處理程序),它與下 面的代碼是等價(jià)的:Cb_ok.text=你好好Pare ntPare nt:指當(dāng)前控件所在的窗口。例如,窗口w_ma in

15、中有個(gè)按鈕cb_close,其功能是單擊后關(guān)閉窗口 w_main,可以在按鈕Clicked事件處理程序中寫上代碼:Close(pare nt)它與下面的代碼是等價(jià)的:close(w_ma in)但是用Pare nt則使代碼具備更強(qiáng)的通用性和可移植性,并且也更容易理解。pare ntwi ndowParentWindow :代表運(yùn)行時(shí)菜單所在的窗口,該代詞只能在菜單的事件處理程序中使用。例如,一菜單中有一 關(guān)閉窗口 ”的子菜單項(xiàng),并且菜單關(guān)聯(lián)到w_main窗口。在“關(guān)閉窗口”菜單項(xiàng)的Clicked事件編寫腳本:Close(Pare ntWin dow)單擊該菜單項(xiàng)時(shí)就會(huì)關(guān)閉與之關(guān)聯(lián)的窗口,而不管

16、窗口的具體名稱。它與下面的代碼是 等價(jià)的:Close(w_mai n)SuperSuper :在編寫控件或?qū)ο蟮淖訉?duì)象時(shí),子對(duì)象中可以調(diào)用父對(duì)象的事件處理程序,程序中既可直接利用父對(duì)象的名稱調(diào)用它們,也可以使用Super代詞來調(diào)用。例如,想調(diào)用父對(duì)象的Click事件處理程序時(shí),子對(duì)象中可以這樣寫:CALL Super:Clicked當(dāng)調(diào)用在子類中被重載的父對(duì)象的函數(shù)時(shí),也可以使用Super來指代父對(duì)象,例如,子對(duì)象重載了父對(duì)象的函數(shù) f_func(),在子對(duì)象中調(diào)用父對(duì)象的 f_func()函數(shù)的語句可以這樣編 寫:Super:f_fu nc()2.1.9對(duì)象的屬性、函數(shù)和事件的引用方法Pow

17、erBuilder是一種面向?qū)ο蟮拈_發(fā)工具,它的應(yīng)用程序的開發(fā)過程實(shí)際上就是各種對(duì) 象的定義和使用過程。所有對(duì)象都通過名稱相互區(qū)分。在PowerScript中,訪問對(duì)象的屬性、函數(shù)、事件的方法很簡(jiǎn)單,就是使用圓點(diǎn)作為標(biāo)記符,具體來說,訪問對(duì)象屬性的格式為:對(duì)象名對(duì)象屬性程序中訪問對(duì)象的函數(shù)與事件的格式為:object name. type calltype whe n functionn ame( argume ntlist )其中,方括號(hào)所括成分根據(jù)情況可以省略,各成分的意義為:(1)object name 是對(duì)象名。(2)type取值為FUNCTION 或EVENT,用于指明是訪問函數(shù)還是

18、事件,默認(rèn)值為FUNCTION。(3)calltype用于指明PowerBuilder查找函數(shù)的時(shí)機(jī),有效取值為:STATIC (默認(rèn)值):編譯時(shí)查找函數(shù),若不存在,產(chǎn)生編譯錯(cuò)誤;DYNAMIC :程序運(yùn)行時(shí)查找函數(shù),若不存在,產(chǎn)生運(yùn)行錯(cuò)誤。(4)when用于指明函數(shù)或事件是立即執(zhí)行還是當(dāng)前程序段執(zhí)行完畢后執(zhí)行,取值為:TRIGGER (默認(rèn)值):立即執(zhí)行;POST:當(dāng)前程序段執(zhí)行完畢后執(zhí)行。(5)functionname指明調(diào)用的函數(shù)或事件名稱。(6) argumentlist給出函數(shù)或事件的參數(shù)。例如,想把輸入焦點(diǎn)移動(dòng)到單行編輯框sle_1 上,程序中寫上語句:sle_1.SetFocus

19、()想立即執(zhí)行按鈕cb_1的單擊事件處理程序,那么寫上語句:cb_1 .EVENT TRIGGER Click ()【實(shí)例2-1】窗口對(duì)象的屬性、函數(shù)、事件的使用要求:創(chuàng)建窗口對(duì)象 w_test,窗口的標(biāo)題為"窗口測(cè)試”,背景色為紅色。運(yùn)行窗口后, 單擊該窗口,背景色變?yōu)榫G色;雙擊該窗口,窗口的高度不變,寬度是原來的2倍,并且背景色變?yōu)樗{(lán)色。技術(shù)要點(diǎn):窗口對(duì)象的屬性、函數(shù)、事件的使用。操作步驟:(1 )在e:student下建立工作區(qū)test.pbw (具體操作方法參考第1章【實(shí)例1-1】)。(2)創(chuàng)建應(yīng)用對(duì)象test。(3 )創(chuàng)建窗口 w_test。選擇F ile菜單中的N ew命

20、令,選中Pb Object選項(xiàng)卡中的 Window圖標(biāo),單擊OK按鈕,出現(xiàn)新建窗口。在屬性子窗口的Ge neral選項(xiàng)卡中,將窗口的Title屬性設(shè)為“窗口測(cè)試”,即在Title下的編輯框中輸入“窗口測(cè)試”,保存窗口命名為w_test。(4 )給窗口的Open事件添加如下腳本:this.backcolor=rgb(255,0,0)/ 背景色設(shè)置為紅色(5)給窗口的Clicked事件添加如下腳本:this.backcolor=rgb(0,255,0)/ 背景色設(shè)置為綠色(6)給窗口的doubleclicked事件添加如下腳本:this.resize(2*this.width,this.heigh

21、t)/改變窗口 的寬度原來的2 倍this.backcolor=rgb(0,0 ,255)/ 背景色設(shè)置為藍(lán)色(7)運(yùn)行程序。單擊PowerBuilder 8.0工具欄中的 公Run login按鈕或按<Ctrl>+<R>快捷鍵,運(yùn)行程序, 單擊窗口,背景色變?yōu)榘咨浑p擊窗口,改變窗口大小。說明:(1) 窗口的標(biāo)題、背景色都是窗口對(duì)象w_test的屬性。設(shè)置屬性值有兩種方法:一種是在屬性窗口中設(shè)置,一種是在運(yùn)行程序時(shí)在腳本中設(shè)置。窗口的Open事件的腳本可以直接在屬性窗口中設(shè)置。(2)resize()是窗口對(duì)象的函數(shù),語法:對(duì)象名 .resize(width, heig

22、ht),將對(duì)象的大小修改 為指定的 width(寬度)和 height(高度)。腳本 this.resize(2*this.width,this.height)中的 this 代表窗 口對(duì)象 w_test。(3)clicked (單擊)、doubleclicked (雙擊)是窗口對(duì)象提供的兩個(gè)常用事件,如果用戶想接收某個(gè)特殊消息, 以滿足特殊的需要,還可以自己定義事件, 這種自定義的事件叫做 “用 戶事件”。2.2數(shù)據(jù)類型PowerScript語言與其他編程語言相似,也提供數(shù)據(jù)類型來指明變量所存儲(chǔ)的數(shù)據(jù)的類 型,且數(shù)據(jù)類型十分豐富,包括標(biāo)準(zhǔn)數(shù)據(jù)類型、Any類型、系統(tǒng)對(duì)象數(shù)據(jù)類型和枚舉類型四大類

23、,程序中通過數(shù)據(jù)類型限定變量的取值范圍。2.2.1標(biāo)準(zhǔn)數(shù)據(jù)類型PowerBuilder的標(biāo)準(zhǔn)數(shù)據(jù)類型共有14種,如表2-2所示。表2-2標(biāo)準(zhǔn)數(shù)據(jù)類型列表與示例數(shù)據(jù)類型意義示例Blob二進(jìn)制大對(duì)象,用于存儲(chǔ)大量數(shù)據(jù),例如圖像、大文本等如保存位圖Boolean布爾型,布爾型變量只有 2個(gè)可能的值:TRUE或FALSEFALSECharacter 或 Char單個(gè)ASCII字符ADate日期,包括年(1000-3000)、月(01-12)、日(01-31 )1999-08-21DateTime日期及時(shí)間,僅用于訪問數(shù)據(jù)庫的DateTime型數(shù)據(jù)1992-05-413:32Decimal 或 Dec帶

24、符號(hào)十進(jìn)制數(shù),最大18位精度8754625.8635Double帶符號(hào)浮點(diǎn)數(shù),15位有效數(shù)字,范圍從2.2E-3081.7E+3086.324E+5Integer或Int16位帶符號(hào)整數(shù),范圍從 -32768+327677688Long32 位帶符號(hào)整數(shù),范圍從 -2,147,483,648 +2,147,483,6474688243Real帶符號(hào)浮點(diǎn)數(shù),精度 6位,范圍從1.17E-383.4E+383.5E+5String字符串類型,用于存儲(chǔ)任意的 ASCII字符,長(zhǎng)度為060,000 (16位環(huán)境中),32位環(huán)境中長(zhǎng)度只受系統(tǒng)能力的限制。程序中直接寫字符串時(shí),用單引號(hào)()或雙引號(hào)(”)將

25、字符 串括起來"計(jì)算機(jī)”"abc"Time24小時(shí)制時(shí)間,包括小時(shí)(0023)、分(0059)、秒(0059) 以及秒的小數(shù)位(最多六位),范圍從00:00:00 23:59:59:99999913:32:18:123456UnsignedInteger 或 UnsignedInt 或 Uint16位無符號(hào)整數(shù),范圍從 0655355234UnsignedLong或Ulong32位無符號(hào)整數(shù),范圍從04,294,976,29554234850222 Any數(shù)據(jù)類型除了上面講到的標(biāo)準(zhǔn)數(shù)據(jù)類型外,PowerBuilder還提供了一種任意數(shù)據(jù)類型,即Any數(shù)據(jù)類型。它是

26、一種可變的數(shù)據(jù)類型,Any數(shù)據(jù)的類型由初值類型決定,程序中給它賦什么類型的值它將變成什么類型,它可以接受標(biāo)準(zhǔn)數(shù)據(jù)類型、對(duì)象、結(jié)構(gòu)以及數(shù)組等各種類型的值。 所以,一般情況下,當(dāng)不能確定變量聲明為何種類型時(shí),可以聲明為Any類型。要想知道Any類型變量中保存的是哪種數(shù)據(jù)類型,可以使用函數(shù)ClassName(),例如:any la_stude ntdatain teger li_in teger=123la_stude ntdata=li_i ntegermessagebox("any 變量類型",classname(la_studentdata)雖然Any類型的數(shù)據(jù)使用靈活,但

27、也存在一些潛在的不安全因素。它是在運(yùn)行時(shí)而不是 在編譯時(shí)時(shí)確定變量的實(shí)際類型,所以編譯器不會(huì)在編譯時(shí)對(duì)Any類型進(jìn)行正確性檢查,運(yùn)行時(shí)可能會(huì)出現(xiàn)錯(cuò)誤。使用Any類型要注意,使用Any變量前必須首先賦值;Any類型變量參加運(yùn)算時(shí),必須保證其值的數(shù)據(jù)類型正確且符合操作符的要求。2.2.3系統(tǒng)對(duì)象數(shù)據(jù)類型在PowerBuilder中所有的系統(tǒng)元素如窗口、菜單、各種控件都是系統(tǒng)對(duì)象,每一種系統(tǒng) 對(duì)象實(shí)際上都是定義在PowerBuilder 8.0內(nèi)部的一種數(shù)據(jù)類型。通常情況下,不必把這些對(duì)象當(dāng)作數(shù)據(jù)類型來考慮,只是在需要時(shí)通過畫板直接創(chuàng)建,然后就可以使用它們。比如,當(dāng) 創(chuàng)建一個(gè) w_main的窗口時(shí),

28、實(shí)際上就是聲明一個(gè)Window 類型的變量,當(dāng)程序執(zhí)行Open(w_main)時(shí),此變量就被初始化了。但有時(shí)需要?jiǎng)討B(tài)處理窗口、菜單、控件等系統(tǒng)對(duì)象時(shí),這就需要定義系統(tǒng)對(duì)象數(shù)據(jù)類型 的變量。例如:wi ndow mywin/說明窗口變量menu myme nu /說明菜單對(duì)象變量要知道PowerBuilder 8.0中有多少個(gè)系統(tǒng)對(duì)象,可以單擊工具欄上的左按鈕,打開"對(duì)象瀏覽器”,選擇“ System”選項(xiàng)頁,此時(shí)窗口左邊列出了所有的系統(tǒng)對(duì)象,如圖2-3所示。|; Br owserIBMApplicationDataWirdoiA1 |Window | Menu Uta Objod D

29、ata Type|OLEFunctionProxySystemEnumeratedStructurermailsession rridiclient menu£PropertiesEvents ffiol Functionsnnenucascaderndbineeditn onvisualobiect lecontrol27第2章PowerScript語言介紹#第2章PowerScript語言介紹Icon Legend - describes selected Rfcipmrty” Function,圖2-3對(duì)象瀏覽器的“ System”選項(xiàng)頁224 枚舉類型枚舉類型是PowerBu

30、ilder定義的用符號(hào)代替的數(shù)值的特殊常量,不過與其他編程語言(比如PASCAL或C)不同,在PowerBuilder 8.0中所有枚舉類型的值都是系統(tǒng)預(yù)先定義的,開 發(fā)人員不能定義自己的枚舉類型,而只能按系統(tǒng)要求使用它。枚舉類型實(shí)際是一組值,每個(gè) 值都以英文單詞開始,以感嘆號(hào)“!”結(jié)束。枚舉類型一般用于以下兩種情況:作為函數(shù)的參數(shù)。作為對(duì)象和控件的屬性。用得較多的是第二種情形,例如,定義文本框?qū)R方式的枚舉類型為Alignment,其取值只能為:Left!、Justify !、Center!、Right !,并且直接使用,不需加引號(hào)。例如:mle_1.Alignment=center! /

31、多行編輯框控件名為 mle_1工具欄的圖標(biāo)要查看PowerBuilder中的枚舉類型數(shù)據(jù),可以選擇Tools菜單中的Browser命令(單擊,并在彈出的 Browser對(duì)話框選擇 Enumerated標(biāo)簽頁。在左邊列表框中選擇要查看的枚舉值類別,然后雙擊右邊樹型列表中的Properties,該類別的枚舉值即被顯示出來,如圖2-4所示。;Browser I可刃T arget:prinUE:王鹿DataWindow | Window | Menu | User Object |Data TvpeOLEUsesFunction Prox> SystemEnumeraledStructureal

32、ignmentargcallingconv_ arrangetypes band- JIcon Legend - describes selected Property, Function圖2-4系統(tǒng)的枚舉類型2.3變量和常量PowerScript的基本功能之一是對(duì)數(shù)據(jù)進(jìn)行處理,數(shù)據(jù)處理的基本對(duì)象是變量和常量。無 論是常量還是變量都是程序中不可缺少的元素,它們?cè)谑褂们岸紤?yīng)先聲明,但聲明的格式不 同,作用域也不同。2.3.1 變量變量是指在程序運(yùn)行過程中其值可以改變的量,變量在程序運(yùn)行中可被賦值,在執(zhí)行各 種運(yùn)算和控制時(shí)其值可以改變,可用來存放常數(shù)、中間結(jié)果和最終結(jié)果,還可以作為控制變 量來控制

33、程序的運(yùn)行。變量必須先聲明后使用。變量聲明的一般語法格式為:數(shù)據(jù)類型 變量名=初值,變量名=初值其中方括弧括起的內(nèi)容為可選項(xiàng)。數(shù)據(jù)類型可以是標(biāo)準(zhǔn)數(shù)據(jù)類型、系統(tǒng)對(duì)象數(shù)據(jù)類型、Any數(shù)據(jù)類型和枚舉類型中的任一種。變量名為前面講到的合法的標(biāo)識(shí)符。例如:in teger li_nu mber=23stri ng ls_n ame="Lucy"在設(shè)計(jì)過程中,通常為了便于認(rèn)別和管理,變量名的命名除符合標(biāo)識(shí)符命名規(guī)則外,其 標(biāo)識(shí)名的前兩個(gè)字母具有標(biāo)識(shí)意義第一個(gè)字符代表變量的作用范圍(這個(gè)在下一小節(jié)中將詳 細(xì)介紹),第二個(gè)代表數(shù)據(jù)類型。例如:integer ii_number=100/實(shí)例

34、的整型變量。第一個(gè)字母I代表(instanee實(shí)例變量),第二個(gè)I代表整型。/實(shí)例的日期型變量共享的時(shí)間變量。s代表(share共享變量),t代表時(shí)間變量。/全局的字符串變量。g代表(global全局變量),s代表字符串變量。datetimeStri ngid_date st timegs_n ameInteger li count,li total/局部的整型變量,一次聲明了兩個(gè)變量Application |變量若在聲明時(shí)不賦初值,系統(tǒng)將按數(shù)據(jù)類型的默認(rèn)值自動(dòng)賦初值,數(shù)值類型的默認(rèn)初 值為0,字符類型的默認(rèn)初值是空字符串,Boolean型的初值為False, Date型初值為1900-01-

35、01。一行聲明多個(gè)相同類型的變量,變量之間用逗號(hào)“,”分隔。例如:in teger li_n 1=18,li_ n2=20,li_ n3=22注意:變量初始化是在編譯時(shí)進(jìn)行,而不是在運(yùn)行時(shí)進(jìn)行。2.3.2變量的作用域變量的作用域即變量的使用范圍,也可以認(rèn)為在什么條件、什么范圍內(nèi)該變量有效。在 PowerBuilder中按變量的作用范圍可分為全局變量、實(shí)例變量、共享變量和局部變量四種類 型,每種變量的說明位置也不一樣1. 全局變量(Global Variables )在PowerBuilder的幾種變量中,全局變量的作用域是最大的,是整個(gè)應(yīng)用程序,在整個(gè) 應(yīng)用程序中都可以被訪問。全局變量可以在應(yīng)

36、用對(duì)象、窗口、用戶對(duì)象、函數(shù)或菜單對(duì)象的 畫板的腳本視圖中聲明,選擇Declare標(biāo)簽頁,并在列表框中選擇 Global Variables項(xiàng),如圖2-5所示。圖2-5 聲明全局變量由于全局變量增加了應(yīng)用程序各個(gè)部分的耦合和聯(lián)系,當(dāng)在任何一個(gè)地方修改其值時(shí), 所有的變量的值都將發(fā)生變化,就在可能導(dǎo)致程序運(yùn)行不正常,所以必須限制全局變量的使 用和修改,只把那些在整個(gè)應(yīng)用程序中要使用的變量定義為全局變量,沒有必要時(shí)盡量不要 使用全局變量。2. 實(shí)例變量(Instanee Variables)實(shí)例變量屬于某個(gè)特定對(duì)象(應(yīng)用對(duì)象、窗口對(duì)象、用戶對(duì)象或菜單)并與該對(duì)象相關(guān) 聯(lián)。只有在該對(duì)象或其派生的子對(duì)

37、象的事件處理程序或函數(shù)中才能使用對(duì)象的實(shí)例變量,實(shí) 例變量在它所關(guān)聯(lián)的對(duì)象被打開時(shí)創(chuàng)建,被關(guān)閉時(shí)消失。聲明實(shí)例變量的方法與聲明全局變量的方法類似,只不過是選擇In sta nee Variables就可以了,如果在定義范圍之外使用它,則要通過點(diǎn)符號(hào)“?',例如:我們?cè)诖翱?w_1中聲明了一個(gè)整型實(shí)例變量ii_sum,當(dāng)我們?cè)?w_1中給它賦值時(shí),可以這樣寫:ii sum=50可是當(dāng)我們要在窗口w_2中要使用ii_sum,將它賦值給 w_2中的一個(gè)整型變量integer時(shí),就要這樣寫:in teger仁w_1.ii_sumw_1必須是處于打開狀態(tài)。當(dāng)且僅當(dāng)?shù)谝淮未蜷_與實(shí)例變量相關(guān)的對(duì)象時(shí)

38、,實(shí)例變量才被創(chuàng)建,在打開對(duì)象之前, 實(shí)例變量是不存在的。3. 共享變量(Share Variables)共享變量與實(shí)例變量相似,但并不常用,共享變量屬于一個(gè)對(duì)象的定義,在對(duì)象的所有 實(shí)例中共享。共享變量是一個(gè)靜態(tài)變量,將保存其最后的值,即它所在的對(duì)象關(guān)閉后再次打 開時(shí),共享變量還保持著關(guān)閉前的值??墒褂霉蚕碜兞康膶?duì)象有應(yīng)用對(duì)象、窗口對(duì)象、菜單 對(duì)象及用戶對(duì)象。聲明一個(gè)共享變量和聲明一個(gè)實(shí)例變量的方法是一樣的,首先要進(jìn)入該對(duì)象的代碼視圖,選擇 Declare標(biāo)簽頁,如圖 2-5,再選擇 Share Variables項(xiàng)。用一個(gè)例子來說明它們的區(qū)別。假設(shè)窗口w_1中有一個(gè)共享變量 si_data

39、的聲明。當(dāng)窗口 w_1第一次打開時(shí),將創(chuàng)建共享變量si_data并初始化,si_data=500。運(yùn)行一段代碼之后,共享變量si_data被改成了 300。不久 簡(jiǎn)口 w_1關(guān)閉,但是共享變量并不像實(shí)例變量那樣消 失了,而是仍然存在,當(dāng)再次打開窗口w_1時(shí),相同的共享變量si_data仍然存在,無須再次創(chuàng)建和初始化,所以當(dāng)?shù)诙未蜷_窗口w_1時(shí),共享變量的值是300。實(shí)例變量是隨著它的對(duì)象被打開、關(guān)閉和再次打開而被創(chuàng)建、刪除和創(chuàng)建的。共享變量 是與對(duì)象的定義相關(guān)聯(lián)的,而不是它的任何特定的實(shí)例,所以它總是存在的。4. 局部變量(Local Variables)局部變量的作用范圍是四種變量中最嚴(yán)格

40、的。這種變量只在聲明變量的腳本之內(nèi)有效, 退出此腳本就自動(dòng)取消。在不同的函數(shù)內(nèi)使用相同的局部變量名是可以的,不會(huì)引起混淆, 這樣就增加了編程的方便性。5. 優(yōu)先級(jí)順序在一個(gè)腳本的執(zhí)行過程中,若出現(xiàn)不適當(dāng)?shù)恼{(diào)用時(shí),PowerBuilder將按照下面的順序搜索該變量的位置:(1 )局部變量(2 )共享變量(3 )全局變量(4 )實(shí)例變量如果按上述的順序找不到,就會(huì)向上搜索該對(duì)象繼承關(guān)系的父對(duì)象,查看其實(shí)例變量。2.3.3 常量常量是在程序運(yùn)行過程中其值保持不變的量。并且聲明為一個(gè)常量以后只能引用,不能 更改它的值。聲明常量時(shí)需要加關(guān)鍵字CONSTANT,必須賦初值,其語法格式如下:CONSTANT

41、數(shù)據(jù)類型 變量名=值為了區(qū)分常量和變量,通常情況下常量名用大寫字母表示。例如:CONSTANT real LR_PI=3.14注意:不能在一行中聲明多個(gè)常量,否則只有第一個(gè)是常量,其余是變量。234數(shù)組數(shù)組是一系列有序數(shù)據(jù)的集合,數(shù)組中的每一個(gè)元素都具有相同的數(shù)據(jù)類型,并且可以 用一個(gè)共同的名字通過不同的下標(biāo)來訪問數(shù)組中的每一個(gè)元素。下標(biāo)就是數(shù)組的序號(hào),它能 惟一地標(biāo)識(shí)數(shù)組中的每一個(gè)元素。PowerScript語言中數(shù)組的聲明格式如下:數(shù)據(jù)類型 數(shù)組名di,dn=初值數(shù)據(jù)類型可以是標(biāo)準(zhǔn)數(shù)據(jù)類型、系統(tǒng)對(duì)象數(shù)據(jù)類型、Any數(shù)據(jù)類型和枚舉數(shù)據(jù)類型中的任一種。數(shù)組名是數(shù)組的標(biāo)識(shí)符,它的命名符合標(biāo)識(shí)符命

42、名規(guī)則。數(shù)組后面的兩的方括號(hào), 外面一對(duì)表示數(shù)組下標(biāo)的符號(hào),里面一對(duì)表示其中的內(nèi)容是可選的,“d1,dn”代表各維下標(biāo),后面的大括號(hào)用來給數(shù)組中元素賦初值,用逗號(hào)分隔。數(shù)組中最常用的是一維數(shù)組,如果大小確定,用下列方法定義:integer lib_number6默認(rèn)下界,下標(biāo)從 1到6共6個(gè)元素string lsb_name2 to 7/自定義下界,下標(biāo)從 2到7共6個(gè)元素?cái)?shù)組中如果省略下標(biāo),表示大小不確定是動(dòng)態(tài)數(shù)組,動(dòng)態(tài)數(shù)組的下標(biāo)從1開始,元素的個(gè)數(shù)在程序運(yùn)行時(shí)決定。例如:stri ng ls_n ame大小不確定的一維數(shù)組多維數(shù)組定義時(shí),用逗號(hào)分隔。例如:Long llc_data3,4/

43、二維數(shù)組 3X 4Real lrc_data3,3,3/三維數(shù)組 3X 3 x 3在聲明數(shù)組的過程中,可以同時(shí)給數(shù)組中的元素賦初值,沒有賦初值的元素自動(dòng)初始為 零。例如:in teger li_abc3=1,3初始化結(jié)果如下:li_abc1=1li_abc2=3li_abc3=0注意:數(shù)組在使用時(shí)不能越界,否則會(huì)出現(xiàn)編譯錯(cuò)誤。2.4運(yùn)算符和表達(dá)式運(yùn)算符的作用是進(jìn)行操作數(shù)之間的運(yùn)算操作,來滿足數(shù)據(jù)處理的需要。PowerScript的運(yùn)算符有4類:算術(shù)運(yùn)算符、關(guān)系運(yùn)算符、邏輯運(yùn)算符和連接運(yùn)算符。利用運(yùn)算符構(gòu)成表達(dá)式 來完成一定的運(yùn)算。2.4.1算術(shù)運(yùn)算符算術(shù)操作符用于完成數(shù)學(xué)運(yùn)算,表2-3列出了

44、PowerScript算術(shù)操作符及其示例。表2-3算術(shù)操作符操作符意義示例示例解釋+加c = a + ba加b-減c = a - ba減b-取負(fù)c = - a負(fù)a*乘c = a * ba乘b/除c = a / ba除以bA乘方c = a a ba的b次方+ +增1a +a加1賦給a-減1a -a減1賦給a+ =加等a += ba加b賦給a-=減等a -= ba減b賦給a* =乘等a *= ba乘b賦給a/=除等a /= ba除以b賦給aA =冪等a a= ba的b次方賦給a242關(guān)系運(yùn)算符關(guān)系操作符是比較運(yùn)算符,用于比較兩個(gè)相同類型數(shù)據(jù)間進(jìn)行比較運(yùn)算,比較的結(jié)果是否符合給定的條件,符合條件則其

45、值為 TRUE,否則為FALSE。表2-4列出了 PowerScript 關(guān)系操作符及其示例。表2-4關(guān)系操作符操作符意義示例解釋=等于If a = b Then “>大于If a > b Then “<小于If a < b Then “<>不等于If a <> b Then “>=大于等于If a >= b Then “<=小于等于If a <= b Then “關(guān)系運(yùn)算符可以用于數(shù)值型、日期型、時(shí)間型、字符型比較。字符串比較時(shí),從左至右 逐個(gè)字符按字符的 ASCII值比較,所以進(jìn)行字符串比較時(shí)是區(qū)分大小寫的,空格也參與

46、比較。對(duì)于日期型的數(shù)據(jù)比較,日期在前的小,比如 2006-12-12比2006-12-24小。對(duì)于時(shí)間型的數(shù)據(jù)比較,時(shí)間在前的小,比如 18:20:10比18:10:20大。2.4.3 邏輯運(yùn)算符邏輯操作符可以對(duì)布爾型數(shù)據(jù)進(jìn)行運(yùn)算,其運(yùn)算結(jié)果仍是布爾型。能構(gòu)成其結(jié)果為TRUE或FALSE的邏輯表達(dá)式。表 2-5列出了 PowerScript邏輯操作符及其示例。表2-5邏輯操作符操作符意義示例解釋NOT邏輯反this.Checked = NOT this.CheckedAND邏輯與If a > 100 AND a < 200 Then “OR邏輯或If a = 100 OR a =

47、200 Then “2.4.4連接運(yùn)算符連接操作符只有一個(gè),就是符號(hào)“ + ”用于把兩個(gè)String型或Blob型變量的內(nèi)容連接在一起,形成新的字符串或Blob型數(shù)據(jù)。例如:string TestTest ="北京"+ "海淀"/ Test等于"北京海淀"245表達(dá)式及運(yùn)算符優(yōu)先級(jí)表達(dá)式由各種運(yùn)算符、各種類型的數(shù)據(jù)及括號(hào)組成。在表達(dá)式中數(shù)據(jù)的類型應(yīng)與運(yùn)算符 相匹配,若在計(jì)算表達(dá)式時(shí)同時(shí)出現(xiàn)多種運(yùn)算符,應(yīng)根據(jù)運(yùn)算符的優(yōu)先級(jí)來進(jìn)行求值,操作 符的優(yōu)先級(jí)定義表達(dá)式的運(yùn)算次序。表 2-6列出了運(yùn)算符的優(yōu)先級(jí)。表2-6運(yùn)算符的優(yōu)先級(jí)優(yōu)先級(jí)運(yùn)算符

48、意義1 (最高)()括號(hào)2+、 、 +、-正號(hào)、負(fù)號(hào)、自增、自減3A幕運(yùn)算4*, /乘、除5+,-力口、減、及連接運(yùn)算6=,>,V, >=, <=, <>關(guān)系運(yùn)算符7NOT邏輯反8AND邏輯與9 (最低)OR邏輯或2.5 PowerScript 基本語句PowerBuilder中的基本程序語句,可分為下列幾種類型:賦值語句條件判斷語句循環(huán)語句 調(diào)用語句 流程控制語句2.5.1 賦值語句賦值語句是用等號(hào)“=”來將數(shù)據(jù)值或表達(dá)式的值賦給一個(gè)變量。賦值語句是應(yīng)用程序 中使用最頻繁的語句,其格式如下:varn ame=expressi on其中,varname是要賦值的變

49、量名。Expression是表達(dá)式、字符串、數(shù)字等。它將表達(dá)式 的值賦給左邊的變量。例如:ls_n ame="John"li_A= 10A=BA2+40A=B=C A是一個(gè)Boolean型的變量。表達(dá) B=C的值決定了變量 A的值為TRUE或 FALSE,如果B和C的值相等,貝U A的值為TRUE ;如果B不等于C,則A的值為FALSE, 第一個(gè)等號(hào)作為賦值號(hào),第二個(gè)等號(hào)作為關(guān)系運(yùn)算符。2.5.2 條件語句PowerBuilder的條件語句共有兩類:IF語句和 CHOOSE CASE語句。IF語句計(jì)算一個(gè)邏 輯表達(dá)式,然后根據(jù)表達(dá)式的值是真(TRUE )是假(FALSE )

50、決定下一步執(zhí)行的語句塊;CHOOSE CASE語句可同時(shí)處理多種情況。下面介紹條件語句的結(jié)構(gòu)和用法。1. IF語句IF語句有兩種形式,單行IF . THEN語句和多行IF . THEN語句。單行IF . THEN語句的格式為:IF cond THEN action1 ELSE action2其中cond是個(gè)表示條件的邏輯表達(dá)式,action1、action2是一條語句,方括號(hào)表示該成分可根據(jù)需要選擇。單行IF . THEN語句書寫時(shí)整條語句寫在一行上,當(dāng)cond的結(jié)果為True時(shí)執(zhí)行語句action1,否則執(zhí)行語句 action2 (如果有該子句的話)。多行IF . THEN語句的語法格式為:

51、IF condition1 THENaction1ELSEIF condition2 THENaction2.ELSEaction3 END IF其中 condition1、condition2 是邏輯表達(dá)式,action1、action2、action3 是一條或多條語句, 方括號(hào)表示該子句可根據(jù)需要選擇。本語句的執(zhí)行過程為:計(jì)算邏輯表達(dá)式con diti on1,如果其結(jié)果為True,則執(zhí)行action1,然后離開整個(gè)IF語句;否則計(jì)算condition2,如果其結(jié)果 為True,則執(zhí)行action2 ,然后離開整個(gè)IF語句;如果邏輯表達(dá)式的結(jié)果都是False,且存在ELSE子句,則執(zhí)行

52、action3。2. CHOOSE CASE 語句CHOOSE CASE語句根據(jù)測(cè)試表達(dá)式的值選擇不同的操作,其語法格式為:CHOOSE CASE testexpressionCASE expressionlistStatementblockCASE expressionliststatementblockCASE expressionliststatementblockCASE ELSEstatementblockEND CHOOSE其中,testexpression是測(cè)試表達(dá)式,expressionlist是判斷表達(dá)式,Statementblock是滿足條件時(shí)執(zhí)行的語句塊,方括號(hào)表示該成分

53、可以省略。判斷表達(dá)式可以使用如下的形式:用逗號(hào)分隔的一組數(shù)據(jù),例如:2,4,7 ;用TO表示一個(gè)區(qū)間范圍,例如: 2 TO 15 ;用IS代表測(cè)試值,后跟關(guān)系操作符和比較值,例如:IS> 30 ;組合運(yùn)用上述3種方法,并用逗號(hào)進(jìn)行分隔,例如:5,6,8 TO 12,IS > 20。執(zhí)行CHOOSE CASE語句時(shí),PowerBuilder將逐條查找 CASE,如果找到與測(cè)試值相匹 配的判斷表達(dá)式,就執(zhí)行該CASE后的語句塊,然后執(zhí)行END CHOOSE后的第一條語句。如果CHOOSE CASE語句中包含 CASE ELSE子句,則未找到任何匹配的CASE條件時(shí),執(zhí)行CASE ELS

54、E子句中的語句塊。2.5.3循環(huán)語句1. DOLOOP循環(huán)DO , LOOP結(jié)構(gòu)提供了一種基于某個(gè)條件的靈活的循環(huán)方法,其中DO表示循環(huán)的開始,LOOP表示循環(huán)的結(jié)束,condition表示循環(huán)條件,是個(gè)邏輯表達(dá)式,其值為True或Falseo 它有4種形式,分別為:DO UNTIL con diti on , LOOPDO UNTIL condition , LOOP 的語法格式為:DO UNTIL conditionStatementsLOOP其執(zhí)行過程為:先計(jì)算條件condition ,其結(jié)果為False時(shí),執(zhí)行語句塊 Statements,接著再檢查條件,直到 condition的結(jié)果為True時(shí)退出循環(huán)。DO WHILE con diti on , LOOPDO WHILE condition , LOOP 的語法格式為:DO WHILE conditionStatementsLOOP其執(zhí)行過程為:先計(jì)算條件condition,其結(jié)果為True時(shí),執(zhí)行語句塊 Statements,接著再檢查條件,直到 condition的結(jié)果為False時(shí)退出循環(huán)。DO , LOOP UNTIL conditionDO ,LOOP UNTIL condition 的語法格式為:DOStatementsLOOP UNTIL c

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論