自定義函數和結構_第1頁
自定義函數和結構_第2頁
自定義函數和結構_第3頁
自定義函數和結構_第4頁
自定義函數和結構_第5頁
已閱讀5頁,還剩21頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、第第11章章 自定義函數和結構自定義函數和結構11.1 創建自定義全局函數創建自定義全局函數 11.2 創建自定義對象函數創建自定義對象函數 11.3 外部函數外部函數 11.4 結構結構 11.1.1創建自定義全局函數創建自定義全局函數 在開發環境的主窗口中,選擇工具欄的New圖標或選擇主菜單File的子菜單New,將出現標題為“New”的窗口。圖圖11-1 定義全局函數定義全局函數11.1.1創建自定義全局函數創建自定義全局函數 Object頁的Function,雙擊Function項或點擊OK按鈕,進入全局函數的定義。 在圖中,Function Name項中輸入函數名、Return Ty

2、pe下拉框中選擇函數返回值的類型、Argument Name中輸入函數參數名、Argument Type下拉框中選擇函數參數類型、PassBy下拉框中選擇參數傳遞方式。 圖圖11-2定義全局函數的屬性定義全局函數的屬性點擊該圖標,點擊該圖標,將顯示將顯示/隱含隱含函數屬性定義函數屬性定義11.1.1創建自定義全局函數創建自定義全局函數參數傳遞方式有三種:參數傳遞方式有三種:Value:值傳遞-將實際參數的值傳遞給函數參數Reference:地址傳遞-把實際參數的地址傳遞給函數,此時,如果函數修改了形式參數的值,那么實際參數的值也就被修改了。Readonly:地址傳遞-把實際參數的地址傳遞給函數

3、,不過不允許修改參數的值。 要增加或刪除參數,可在圖11-2中右擊,出現彈出式菜單。Add Parameter增加參數,Insert Parameter插入參數,Delete Parameter刪除參數 圖圖11-3 增加、插入、刪除參數增加、插入、刪除參數11.1.1創建自定義全局函數創建自定義全局函數 函數名及參數定義好后,在定義函數的下面窗口內編輯代碼。或選擇主窗口View菜單的Script子菜單,打開函數代碼編輯窗口。函數返回值的類型、參數名、個數及類型可以隨時更改。若函數有返回值,必須立即輸入代碼,即必須寫一條return語句,否則產生錯誤。定義好的全局函數和標準函數一樣使用。圖圖1

4、1-4 編輯函數代碼編輯函數代碼點擊該圖標,將顯示點擊該圖標,將顯示/隱含函數屬性定義隱含函數屬性定義圖圖11-5 打開自定義全局函數打開自定義全局函數3 . 在在 O b j e c t Ty p e 中 選 擇中 選 擇Functions或或All Objects4.選擇要打選擇要打開的函數開的函數2.選擇選擇pbl源文件源文件1.選擇目標選擇目標11.1.2修改自定義全局函數修改自定義全局函數 在開發環境的主窗口中,選擇工具欄的Open圖標或選擇主菜單File的子菜單Open,將出現標題為“Open”的窗口,在ObjectType下拉框中選擇Functions,在Object中選擇要打開

5、的函數, 雙擊或點擊OK按鈕,進入全局函數的定義,如前圖11-4所示。可以更改函數返回值的類型、參數名、個數及類型和函數代碼。11.1.3刪除自定義全局函數刪除自定義全局函數 打開Library庫管理器,打開要刪除的自定義全局函數所在的PBL,選擇要刪除的自定義全局函數,右擊,出現彈出式菜單,選擇Delete將刪除所選的自定義全局函數。圖圖11-6 刪除自定義全局函數刪除自定義全局函數11.2.1 創建自定義對象函數創建自定義對象函數 可以為Application Object對象、窗口對象、用戶對象創建自定義函數,這種函數稱為對象函數。 先打開要定義函數的對象,再打開Script代碼編輯窗口

6、,先選擇Functions,再選擇New Function,將出現函數定義窗口。1.選擇選擇Functions2選擇選擇New Function圖圖11-7 定義對象函數定義對象函數11.2.1 創建自定義對象函數創建自定義對象函數 Access缺省值為“public” 。 訪問屬性Access有三個選擇: l public:在整個程序中都可訪問。 l private:只能在當前對象的程序中使用,不能在該對象的后代的程序中使用。 l protected:只能在當前對象的程序以及該對象的后代的程序中使用。對象函數的命名規則一般與對象有關,如應用對象Application Object的函數一般以

7、“af_”作前綴,窗口對象Window的函數一般以“wf_”作前綴,菜單對象menu的函數一般以“mf_”作前綴,用戶自定義對象的函數一般以“uf_”作前綴。這些規則清楚地表明了函數所在對象的類型,便于程序的維護。圖圖11-8定義對象函數的屬性定義對象函數的屬性點擊該圖標,將顯示點擊該圖標,將顯示/隱隱含函數屬性定義含函數屬性定義11.2.1 創建自定義對象函數創建自定義對象函數 在定義函數的下面窗口內編輯代碼。若函數有返回值,立即輸入代碼,即必須寫一條return語句,否則產生錯誤。 對象函數的返回值的類型、參數名、個數及類型能隨時更改,系統會給出一個提示信息,以確認是否更改。 在其它對象的

8、程序中調用時,應在函數名前加上函數所在的對象名如w_pipe.wf_error(num),當然w_pipe必須已被打開。圖圖11-9編輯函數代碼編輯函數代碼點擊該圖標,將顯點擊該圖標,將顯示示/隱含函數屬性定隱含函數屬性定義義11.2.2 修改自定義對象函數修改自定義對象函數 打開自定義函數所在的對象,打開Script代碼編輯窗口,選擇Functions,再選擇要修改的函數。對象函數的返回值的類型、參數名、個數及類型都能隨時更改。系統會給出一個提示信息,以確認是否更改。可以輸入或更改函數代碼。圖圖11-10 修改對象函數修改對象函數1.選擇選擇Functions2.選擇要修改的選擇要修改的函數

9、函數點擊該圖標,將顯點擊該圖標,將顯示示/隱含函數屬性定隱含函數屬性定義,可以更改返回義,可以更改返回值類型及參數等值類型及參數等3.輸入或修輸入或修改代碼改代碼11.2.3 刪除自定義對象函數刪除自定義對象函數 要刪除自定義對象函數,首先打開自定義函數所在的對象,然后選擇主菜單View的子菜單Function List。圖圖11-11 列出全部函數列出全部函數11.2.3 刪除自定義對象函數刪除自定義對象函數選擇Function List后將列出該對象的全部函數,如圖11-12,右擊要刪除的函數,出現一個彈出式菜單,圖11-13,選擇Delete將刪除所選的對象函數。 注意:注意:一旦選擇D

10、elete將立刻刪除所選的對象函數,系統對刪除操作不作提醒。 在圖11-13中,選擇彈出式菜單中的Script,或雙擊所選的函數,將打開Script代碼編輯窗口,以便查看與修改所選的對象函數,包括函數返回值的類型、參數名、參數個數、參數類型及函數代碼等。 圖圖11-12 列出所有對象函數列出所有對象函數圖圖11-13刪除對象函數刪除對象函數11.3.1外部函數的定義外部函數的定義 使用外部函數之前,必須先對其進行說明。根據作用范圍分為兩種類型:全局外部函數Global External Functions和局部外部函數Local External Functions。全局外部函數可在應用程序的

11、任何地方使用;局部外部函數只能在所定義的對象中使用。 打開要定義外部函數的對象,再打開Script代碼編輯窗口,選擇Declare,再選擇Global External Functions或Local External Functions,最后輸入函數定義。 圖圖11-14定義外部函數定義外部函數1.選擇選擇Declare2.選擇選擇Global External Functions或或Local External Functions3.輸入函數定義輸入函數定義11.3.1外部函數的定義外部函數的定義定義外部函數時使用兩種關鍵詞:有返回值用Function,無返回值用Subroutine。用F

12、unction的格式: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:訪問級別。是可選項,只用于局部外部函數Local External Functions,l return_type:返回值類型。必須是一個合法的PowerBuilder數據類型。l function_n

13、ame和和sub_name:外部程序的函數名或子程序名儲存在DLL庫中。l REF:參數通過地址傳遞。l typei:參數的數據類型。l argi:參數名l lib_name:包含外部函數或子程序的DLL/EXE文件名。11.3.2外部函數的調用外部函數的調用 全局外部函數的使用類似于全局函數,局部外部函數的使用類似于對象函數。在其它對象的代碼中使用局部外部函數時需加上函數定義所在的對象名。 但在實際應用中會發現,調用外部函數經常不成功,原因可能是以下幾種情況:(1) 32位環境調用16位DLL(2) 數據類型不一致。外部函數一般是用C/C+寫的,有許多PowerBuilder所沒有的數據類型

14、。(3) 指針。PowerBuilder沒有指針數據類型。(4) 函數名大小寫錯誤。在PowerBuilder中不區分大小,但使用外部函數時卻要區分大小寫。(5) 外部函數所在的庫文件DLL或EXE文件找不到。可能不在當前路徑下。11.3.3外部函數使用實例外部函數使用實例 在Windows的控制面板中的有一個口令管理程序,用來設置和修改Windows和其它系統口令,如圖11-15。如何調用這個口令管理程序呢? 步驟如下:步驟如下:(1) 創建一個setpassword.pbl,其應用對象名為password,再創建一個窗口w_pw,窗口上放一個“設置口令”的命令按鈕cb_setpw,如圖11

15、-16所示。 圖圖11-15Windows口令管理窗口令管理窗口口 圖圖11-16 調用外部函數示例調用外部函數示例11.3.3外部函數使用實例外部函數使用實例(2) 編寫代碼 l 在應用對象password的open事件中編寫代碼:open(w_pw) l 在窗口w_pw中定義外部函數。先打開w_pw的Script代碼編輯窗口,再選擇Declare,然后選擇Local External Functions。圖圖11-17定義外部函數定義外部函數11.3.3外部函數使用實例外部函數使用實例輸入下面的代碼: / 定義外部函數,即聲明外部函數的語法格式與來源 Function Long Shell

16、ExecuteA(Long hwindow, String lpOperation, String lpFile, String lpParameters, String lpDirectory, Long nShowCmd) Library shell32.dll Function Long GetDesktopWindow() Library user32.dll l 在“設置口令”的命令按鈕cb_setpw的clicked事件中輸入以下代碼: /在PowerBuilder中調用Windows控制面板中的口令管理程序 String cpl_name String ls_null SetNu

17、ll(ls_null) cpl_name = Password.cpl ShellExecuteA(GetDesktopWindow(), ls_null, rundll32.exe, shell32.dll,Control_RunDLL + cpl_name + , ls_null, 0) /調用外部函數11.4.1 定義全局結構定義全局結構 在開發環境的主窗口中,選擇工具欄的New圖標或選擇主菜單File的子菜單New,將出現標題為“New”的窗口。圖圖11-18 定義全局結構定義全局結構11.4.1 定義全局結構定義全局結構 選擇Object頁的Structure項,雙擊Structur

18、e項或點擊OK,進入全局結構的定義,如圖11-19。 在圖11-19全局結構定義畫板中,輸入元素名,并選擇元素的數據類型。右擊將出現彈出式菜單,如圖11-20,選擇Insert Row將插入元素,選擇Delete Row將刪除元素。 圖圖11-19 全局結構定義畫板全局結構定義畫板圖圖11-20 增加、刪除結構元素增加、刪除結構元素11.4.1 定義全局結構定義全局結構 定義好結構的元素后,選擇保存,輸入結構名。結構名一般以“s_”作前綴。 圖圖11-21 保存結構保存結構11.4.2 定義對象層結構定義對象層結構 為Application Object對象、窗口對象、菜單對象、用戶對象等創建

19、結構稱為對象層結構。對象層結構一般只能在該對象內使用,當該對象正在打開時,其它對象的程序可以使用該結構。 打開要定義結構的對象,選擇主菜單Insert的子菜單Structure,如圖11-22,出現結構定義窗口,如圖11-23。輸入結構名、元素名及類型。按右鍵出現彈出式菜單,選擇Insert Row將插入元素,選擇Delete Row將刪除元素。對象層的結構與所在的對象一起保存,不能單獨保存。圖圖11-22 定義對象層結構定義對象層結構圖圖11-23 結構定義畫板結構定義畫板11.4.3 使用結構使用結構 要使用某結構,應該先聲明一個該結構類型的實例變量,然后再引用該結構的變量。 例如,例如,設s_student是定義的一個全局結構,則在程序中使用該結構類型的代碼例子為:s_student s1,s2 /定義兩個s_student型的實例變量s1和s2s1.no=“320108800123204” /給結構

溫馨提示

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

評論

0/150

提交評論