PB11第11章自定義函數(shù)和結(jié)構(gòu).ppt_第1頁
PB11第11章自定義函數(shù)和結(jié)構(gòu).ppt_第2頁
PB11第11章自定義函數(shù)和結(jié)構(gòu).ppt_第3頁
PB11第11章自定義函數(shù)和結(jié)構(gòu).ppt_第4頁
PB11第11章自定義函數(shù)和結(jié)構(gòu).ppt_第5頁
已閱讀5頁,還剩21頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第11章 自定義函數(shù)和結(jié)構(gòu),11.1 創(chuàng)建自定義全局函數(shù) 11.2 創(chuàng)建自定義對象函數(shù) 11.3 外部函數(shù) 11.4 結(jié)構(gòu),11.1.1創(chuàng)建自定義全局函數(shù),在開發(fā)環(huán)境的主窗口中,選擇工具欄的New圖標或選擇主菜單File的子菜單New,將出現(xiàn)標題為“New”的窗口。,圖11-1 定義全局函數(shù),11.1.1創(chuàng)建自定義全局函數(shù),Object頁的Function,雙擊Function項或點擊OK按鈕,進入全局函數(shù)的定義。 在圖中,F(xiàn)unction Name項中輸入函數(shù)名、Return Type下拉框中選擇函數(shù)返回值的類型、Argument Name中輸入函數(shù)參數(shù)名、Argument Type下拉框中選擇函數(shù)參數(shù)類型、PassBy下拉框中選擇參數(shù)傳遞方式。,11.1.1創(chuàng)建自定義全局函數(shù),參數(shù)傳遞方式有三種: Value:值傳遞-將實際參數(shù)的值傳遞給函數(shù)參數(shù) Reference:地址傳遞-把實際參數(shù)的地址傳遞給函數(shù),此時,如果函數(shù)修改了形式參數(shù)的值,那么實際參數(shù)的值也就被修改了。 Readonly:地址傳遞-把實際參數(shù)的地址傳遞給函數(shù),不過不允許修改參數(shù)的值。 要增加或刪除參數(shù),可在圖11-2中右擊,出現(xiàn)彈出式菜單。Add Parameter增加參數(shù),Insert Parameter插入?yún)?shù),Delete Parameter刪除參數(shù),圖11-3 增加、插入、刪除參數(shù),11.1.1創(chuàng)建自定義全局函數(shù),函數(shù)名及參數(shù)定義好后,在定義函數(shù)的下面窗口內(nèi)編輯代碼?;蜻x擇主窗口View菜單的Script子菜單,打開函數(shù)代碼編輯窗口。函數(shù)返回值的類型、參數(shù)名、個數(shù)及類型可以隨時更改。若函數(shù)有返回值,必須立即輸入代碼,即必須寫一條return語句,否則產(chǎn)生錯誤。 定義好的全局函數(shù)和標準函數(shù)一樣使用。,11.1.2修改自定義全局函數(shù),在開發(fā)環(huán)境的主窗口中,選擇工具欄的Open圖標或選擇主菜單File的子菜單Open,將出現(xiàn)標題為“Open”的窗口,在ObjectType下拉框中選擇Functions,在Object中選擇要打開的函數(shù), 雙擊或點擊OK按鈕,進入全局函數(shù)的定義,如前圖11-4所示??梢愿暮瘮?shù)返回值的類型、參數(shù)名、個數(shù)及類型和函數(shù)代碼。,11.1.3刪除自定義全局函數(shù),打開Library庫管理器,打開要刪除的自定義全局函數(shù)所在的PBL,選擇要刪除的自定義全局函數(shù),右擊,出現(xiàn)彈出式菜單,選擇Delete將刪除所選的自定義全局函數(shù)。,圖11-6 刪除自定義全局函數(shù),11.2.1 創(chuàng)建自定義對象函數(shù),可以為Application Object對象、窗口對象、用戶對象創(chuàng)建自定義函數(shù),這種函數(shù)稱為對象函數(shù)。 先打開要定義函數(shù)的對象,再打開Script代碼編輯窗口,先選擇Functions,再選擇New Function,將出現(xiàn)函數(shù)定義窗口。,11.2.1 創(chuàng)建自定義對象函數(shù),Access缺省值為“public” 。 訪問屬性Access有三個選擇: l public:在整個程序中都可訪問。 l private:只能在當(dāng)前對象的程序中使用,不能在該對象的后代的程序中使用。 l protected:只能在當(dāng)前對象的程序以及該對象的后代的程序中使用。 對象函數(shù)的命名規(guī)則一般與對象有關(guān),如應(yīng)用對象Application Object的函數(shù)一般以“af_”作前綴,窗口對象Window的函數(shù)一般以“wf_”作前綴,菜單對象menu的函數(shù)一般以“mf_”作前綴,用戶自定義對象的函數(shù)一般以“uf_”作前綴。這些規(guī)則清楚地表明了函數(shù)所在對象的類型,便于程序的維護。,11.2.1 創(chuàng)建自定義對象函數(shù),在定義函數(shù)的下面窗口內(nèi)編輯代碼。若函數(shù)有返回值,立即輸入代碼,即必須寫一條return語句,否則產(chǎn)生錯誤。 對象函數(shù)的返回值的類型、參數(shù)名、個數(shù)及類型能隨時更改,系統(tǒng)會給出一個提示信息,以確認是否更改。 在其它對象的程序中調(diào)用時,應(yīng)在函數(shù)名前加上函數(shù)所在的對象名如w_pipe.wf_error(num),當(dāng)然w_pipe必須已被打開。,11.2.2 修改自定義對象函數(shù),打開自定義函數(shù)所在的對象,打開Script代碼編輯窗口,選擇Functions,再選擇要修改的函數(shù)。對象函數(shù)的返回值的類型、參數(shù)名、個數(shù)及類型都能隨時更改。系統(tǒng)會給出一個提示信息,以確認是否更改??梢暂斎牖蚋暮瘮?shù)代碼。,11.2.3 刪除自定義對象函數(shù),要刪除自定義對象函數(shù),首先打開自定義函數(shù)所在的對象,然后選擇主菜單View的子菜單Function List。,圖11-11 列出全部函數(shù),11.2.3 刪除自定義對象函數(shù),選擇Function List后將列出該對象的全部函數(shù),如圖11-12,右擊要刪除的函數(shù),出現(xiàn)一個彈出式菜單,圖11-13,選擇Delete將刪除所選的對象函數(shù)。 注意:一旦選擇Delete將立刻刪除所選的對象函數(shù),系統(tǒng)對刪除操作不作提醒。 在圖11-13中,選擇彈出式菜單中的Script,或雙擊所選的函數(shù),將打開Script代碼編輯窗口,以便查看與修改所選的對象函數(shù),包括函數(shù)返回值的類型、參數(shù)名、參數(shù)個數(shù)、參數(shù)類型及函數(shù)代碼等。,11.3.1外部函數(shù)的定義,使用外部函數(shù)之前,必須先對其進行說明。根據(jù)作用范圍分為兩種類型:全局外部函數(shù)Global External Functions和局部外部函數(shù)Local External Functions。全局外部函數(shù)可在應(yīng)用程序的任何地方使用;局部外部函數(shù)只能在所定義的對象中使用。 打開要定義外部函數(shù)的對象,再打開Script代碼編輯窗口,選擇Declare,再選擇Global External Functions或Local External Functions,最后輸入函數(shù)定義。,11.3.1外部函數(shù)的定義,定義外部函數(shù)時使用兩種關(guān)鍵詞:有返回值用Function,無返回值用Subroutine。 用Function的格式: 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:訪問級別。是可選項,只用于局部外部函數(shù)Local External Functions, l return_type:返回值類型。必須是一個合法的PowerBuilder數(shù)據(jù)類型。 l function_name和sub_name:外部程序的函數(shù)名或子程序名儲存在DLL庫中。 l REF:參數(shù)通過地址傳遞。 l typei:參數(shù)的數(shù)據(jù)類型。 l argi:參數(shù)名 l lib_name:包含外部函數(shù)或子程序的DLL/EXE文件名。,11.3.2外部函數(shù)的調(diào)用,全局外部函數(shù)的使用類似于全局函數(shù),局部外部函數(shù)的使用類似于對象函數(shù)。在其它對象的代碼中使用局部外部函數(shù)時需加上函數(shù)定義所在的對象名。 但在實際應(yīng)用中會發(fā)現(xiàn),調(diào)用外部函數(shù)經(jīng)常不成功,原因可能是以下幾種情況: (1) 32位環(huán)境調(diào)用16位DLL (2) 數(shù)據(jù)類型不一致。外部函數(shù)一般是用C/C+寫的,有許多PowerBuilder所沒有的數(shù)據(jù)類型。 (3) 指針。PowerBuilder沒有指針數(shù)據(jù)類型。 (4) 函數(shù)名大小寫錯誤。在PowerBuilder中不區(qū)分大小,但使用外部函數(shù)時卻要區(qū)分大小寫。 (5) 外部函數(shù)所在的庫文件DLL或EXE文件找不到。可能不在當(dāng)前路徑下。,11.3.3外部函數(shù)使用實例,在Windows的控制面板中的有一個口令管理程序,用來設(shè)置和修改Windows和其它系統(tǒng)口令,如圖11-15。如何調(diào)用這個口令管理程序呢? 步驟如下: (1) 創(chuàng)建一個setpassword.pbl,其應(yīng)用對象名為password,再創(chuàng)建一個窗口w_pw,窗口上放一個“設(shè)置口令”的命令按鈕cb_setpw,如圖11-16所示。,圖11-15 Windows口令管理窗口,圖11-16 調(diào)用外部函數(shù)示例,11.3.3外部函數(shù)使用實例,(2) 編寫代碼 l 在應(yīng)用對象password的open事件中編寫代碼: open(w_pw) l 在窗口w_pw中定義外部函數(shù)。先打開w_pw的Script代碼編輯窗口,再選擇Declare,然后選擇Local External Functions。,圖11-17 定義外部函數(shù),11.3.3外部函數(shù)使用實例,輸入下面的代碼: / 定義外部函數(shù),即聲明外部函數(shù)的語法格式與來源 Function Long ShellExecuteA(Long hwindow, String lpOperation, String lpFile, String lpParameters, String lpDirectory, Long nShowCmd) Library shell32.dll Function Long GetDesktopWindow() Library user32.dll l 在“設(shè)置口令”的命令按鈕cb_setpw的clicked事件中輸入以下代碼: /在PowerBuilder中調(diào)用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) /調(diào)用外部函數(shù),11.4.1 定義全局結(jié)構(gòu),在開發(fā)環(huán)境的主窗口中,選擇工具欄的New圖標或選擇主菜單File的子菜單New,將出現(xiàn)標題為“New”的窗口。,圖11-18 定義全局結(jié)構(gòu),11.4.1 定義全局結(jié)構(gòu),選擇Object頁的Structure項,雙擊Structure項或點擊OK,進入全局結(jié)構(gòu)的定義,如圖11-19。 在圖11-19全局結(jié)構(gòu)定義畫板中,輸入元素名,并選擇元素的數(shù)據(jù)類型。右擊將出現(xiàn)彈出式菜單,如圖11-20,選擇Insert Row將插入元素,選擇Delete Row將刪除元素。,圖11-19 全局結(jié)構(gòu)定義畫板,圖11-20 增加、刪除結(jié)構(gòu)元素,11.4.1 定義全局結(jié)構(gòu),定義好結(jié)構(gòu)的元素后,選擇保存,輸入結(jié)構(gòu)名。結(jié)構(gòu)名一般以“s_”作前綴。,圖11-21 保存結(jié)構(gòu),11.4.2 定義對象層結(jié)構(gòu),為Application Object對象、窗口對象、菜單對象、用戶對象等創(chuàng)建結(jié)構(gòu)稱為對象層結(jié)構(gòu)。對象層結(jié)構(gòu)一般只能在該對象內(nèi)使用,當(dāng)該對象正在打開時,其它對象的程序可以使用該結(jié)構(gòu)。 打開要定義結(jié)構(gòu)的對象,選擇主菜單Insert的子菜單Structure,如圖11-22,出現(xiàn)結(jié)構(gòu)定義窗口,如圖11-23。輸入結(jié)構(gòu)名、元素名及類型。按右鍵出現(xiàn)彈出式菜單,選擇Insert Row將插入元素,選擇Delete Row將刪除元素。對象層的結(jié)構(gòu)與所在的對象一起保存,不能單獨保存。,圖11-22 定義對象層結(jié)構(gòu),圖11-23 結(jié)構(gòu)定義畫板,11.4.3 使用結(jié)構(gòu),要使用某結(jié)構(gòu),應(yīng)該先聲明一個該結(jié)構(gòu)類型的實例變量,然后再引用該結(jié)構(gòu)的變量。 例如,設(shè)s_student是定義的一個全局結(jié)構(gòu),則在程序中使用該結(jié)構(gòu)類型的代碼例子為: s_student s1,s2 /定義兩個s_student型的實例變量s1和s2 s1.no=“320108800123204” /給結(jié)構(gòu)s1的元素no賦值 =sle.text /給結(jié)構(gòu)s1的元素name賦值 s1.math=96 /給結(jié)構(gòu)s1的元素math賦值 s2=s1 /將結(jié)構(gòu)s1各元素的值賦給結(jié)構(gòu)s2的對應(yīng)元素, /只有同一類型的結(jié)構(gòu)才能這樣整體賦值。 對象層的結(jié)構(gòu)其引用方法與全局結(jié)構(gòu)基本一樣,但在其它對象的代碼中引用時,需指明結(jié)構(gòu)所在的對象(象引用對象函數(shù)那樣)。 例如,s_stru是在窗口w_main中定義的結(jié)構(gòu),在窗口中定義一個實例變量s3: s_stru s3 /在窗口的Declare中定義Instance Variable 要在另一窗口w_sub中引用s3,格式為: sle_1.text=w_main.s3.id sle_2.text=w_,11.4.4

溫馨提示

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

評論

0/150

提交評論