版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第14章 用戶自定義對(duì)象,用戶對(duì)象具有下述優(yōu)勢(shì): (1) 避免了在應(yīng)用程序的不同地方編寫(xiě)功能相同或相近代碼的麻煩,提高了應(yīng)用程序的可維護(hù)性。 (2) 用戶對(duì)象可以把一組總在一起使用的可視控件組合在一起,構(gòu)成一個(gè)完成特定功能的控件,應(yīng)用程序可以隨時(shí)使用它。 (3) 用戶對(duì)象提供了構(gòu)造具有一致外觀的可視部件的方法。 (4) 用戶對(duì)象能夠把相關(guān)功能封裝在一起。 (5) 用戶對(duì)象允許開(kāi)發(fā)人員擴(kuò)展某些對(duì)象的功能。 用戶對(duì)象的命名一般以“u_”為前綴,用戶對(duì)象控件或?qū)嵗拿话阋浴皍o_”為前綴,第14章 用戶自定義對(duì)象,14.1 可視用戶對(duì)象 14.2 類用戶對(duì)象 14.3 用戶對(duì)象使用編程實(shí)例,14
2、.1.1 創(chuàng)建標(biāo)準(zhǔn)可視用戶對(duì)象,標(biāo)準(zhǔn)可視用戶對(duì)象在現(xiàn)有控件基本功能的基礎(chǔ)上增加應(yīng)用程序需要的功能。繼承了原始控件的各種特征,包括屬性、事件和函數(shù)。 例如,命令按鈕只能用鼠標(biāo)點(diǎn)擊,而不響應(yīng)回車鍵,可以利用標(biāo)準(zhǔn)可視用戶對(duì)象,來(lái)定制一個(gè)用戶對(duì)象,既能用鼠標(biāo)點(diǎn)擊,又可以按回車鍵操作。 點(diǎn)擊主窗口的工具欄圖標(biāo)按鈕New或選擇主菜單File的New子菜單,將打開(kāi)標(biāo)題為“New”的窗口,選擇Object頁(yè),圖14-1 創(chuàng)建用戶對(duì)象,14.1.1 創(chuàng)建標(biāo)準(zhǔn)可視用戶對(duì)象,打開(kāi)標(biāo)題為“Select Standard Visual Type”的窗口,選擇所要的對(duì)象類型,點(diǎn)擊Ok按鈕。這里我們選擇commandbut
3、ton來(lái)定制一個(gè)命令按鈕用戶對(duì)象,圖14-2 選擇對(duì)象類型,14.1.1 創(chuàng)建標(biāo)準(zhǔn)可視用戶對(duì)象,選好標(biāo)準(zhǔn)對(duì)象類型后,將打開(kāi)用戶對(duì)象畫(huà)板。該界面和創(chuàng)建窗口的界面相似。在這里可以設(shè)置CommandButton的屬性如Text、字體、控件大小等作為該用戶對(duì)象的默認(rèn)值,還可以定義用戶函數(shù)和用戶事件,并給某些事件編寫(xiě)代碼,圖14-3 定義可視用戶對(duì)象,14.1.1 創(chuàng)建標(biāo)準(zhǔn)可視用戶對(duì)象,給該用戶對(duì)象定義一個(gè)用戶事件以響應(yīng)用戶的回車鍵操作。用戶事件名為“ue_enter”,事件號(hào)選“pbm_keydown,14-4 在用戶對(duì)象中定義用戶事件,14.1.1 創(chuàng)建標(biāo)準(zhǔn)可視用戶對(duì)象,在該事件中輸入代碼: if
4、KeyDown(KeyEnter!) then /如果是回車鍵,則觸發(fā)鼠標(biāo)單擊事件 this.TriggerEvent(Clicked!) end if 保存該用戶對(duì)象,名為u_commandbutton。 定義了一個(gè)可視用戶對(duì)象u_commandbutton,該對(duì)象除具備標(biāo)準(zhǔn)的CommandButton命令按鈕的屬性、事件、函數(shù)外,還有用戶自定義事件ue_keyenter,當(dāng)焦點(diǎn)落在該控件上時(shí),用戶按回車鍵將觸發(fā)該事件,14.1.2 使用可視用戶對(duì)象,可視用戶對(duì)象定義好后,就可以象標(biāo)準(zhǔn)控件那樣使用。在窗口打開(kāi)后,點(diǎn)擊工具欄上的控件工具箱中的用戶對(duì)象User Object圖標(biāo)按鈕,14.1.2
5、 使用可視用戶對(duì)象,將出現(xiàn)標(biāo)題為“Select Object”的窗口,在其中列出了當(dāng)前pbl文件中所有的用戶對(duì)象,選擇一個(gè)用戶對(duì)象,點(diǎn)擊OK按鈕或直接雙擊所選的用戶對(duì)象。這里選u_commandbutton。 調(diào)整用戶對(duì)象在窗口中的位置、大小,并設(shè)置必要的屬性。這樣,當(dāng)焦點(diǎn)落在該控件上時(shí),按回車鍵將觸發(fā)Click事件,圖14-6 選擇用戶對(duì)象,14.1.3 修改用戶對(duì)象,修改用戶對(duì)象。選擇工具欄的Open圖標(biāo),打開(kāi)標(biāo)題為“Open”的窗口。 在Application Libraries中選擇要修改的用戶對(duì)象所在的pbl庫(kù)文件,在對(duì)象類型Object Type中選擇User Objects,選擇
6、要修改的用戶對(duì)象,點(diǎn)擊OK按鈕或直接雙擊所選的用戶對(duì)象,將打開(kāi)用戶對(duì)象定義畫(huà)板,如前圖14-3所示,14.1.4 創(chuàng)建定制可視用戶對(duì)象,定制可視用戶對(duì)象是將多個(gè)控件以及可視用戶對(duì)象組合成一個(gè)整體,完成一定的功能和操作。選擇主窗口工具欄上的圖標(biāo)按鈕New 或選擇主菜單File的New子菜單,將打開(kāi)標(biāo)題為“New”的窗口,選擇Object頁(yè),圖14-8 選擇定制可視用戶對(duì)象,14.1.4 創(chuàng)建定制可視用戶對(duì)象,定制可視用戶對(duì)象畫(huà)板。在左上角的窗口上放置所需的控件和已定義的可視用戶對(duì)象。還可以定義用戶函數(shù)和用戶事件,并給某些事件編寫(xiě)代碼,14.1.4 創(chuàng)建定制可視用戶對(duì)象,注意: 該可視用戶對(duì)象中的
7、控件的大小、位置等屬性不能在窗口上改變,而只能在如圖14-9所示的定制可視用戶對(duì)象畫(huà)板中修改。 創(chuàng)建的定制可視用戶對(duì)象作為一個(gè)整體來(lái)使用,與其它用戶對(duì)象的一個(gè)明顯差別是:定制可視用戶對(duì)象中包括了多個(gè)控件。窗口中的代碼控制定制可視用戶對(duì)象中的控件時(shí),需要用“用戶對(duì)象名+控件名+屬性或函數(shù)”這樣的格式。 例如: uo_1.cb_ok.text=”確定”/cb_ok是用戶對(duì)象中的一個(gè)控件 st_1.text=uo_1.sle_1.text /sle_1是用戶對(duì)象中的一個(gè)控件,st_1 是窗口上的一個(gè)控件 uo_1.lb_1.additem(sle_2.text) /lb_1是用戶對(duì)象中的控件,sle
8、_2是窗 口上的控件,14.1.5 創(chuàng)建外部可視用戶對(duì)象,使用外部控件的目的通常是為了完成PB本身難以完成或不支持的功能。 選擇主窗口工具欄上的圖標(biāo)按鈕New 或選擇主菜單File的New子菜單,選擇Object頁(yè),圖14-10 創(chuàng)建外部可視用戶對(duì)象,14.1.5 創(chuàng)建外部可視用戶對(duì)象,在圖14-10 Object頁(yè)中選擇External Visual項(xiàng),點(diǎn)擊OK按鈕或直接雙擊External Visual項(xiàng),將打開(kāi)外部可視用戶對(duì)象畫(huà)板,圖14-11 外部可視用戶對(duì)象畫(huà)板,14.1.5 創(chuàng)建外部可視用戶對(duì)象,圖14-11中,在LibraryName中輸入外部用戶對(duì)象所在的DLL文件名,或者單擊
9、Browse按鈕選擇DLL文件;在Class Name編輯框中鍵入DLL中的注冊(cè)類名(該類名通常由生產(chǎn)DLL的廠商提供);在“Text”編輯框中輸入顯示在控件上的文本(并非都需要此項(xiàng));根據(jù)需要設(shè)置其它屬性;說(shuō)明用戶對(duì)象所需的函數(shù)、事件、變量、結(jié)構(gòu);編寫(xiě)用戶對(duì)象的各種事件處理程序;最后保存用戶對(duì)象。定義了外部可視用戶對(duì)象后,就可以在窗口、定制可視用戶對(duì)象等多個(gè)地方運(yùn)用該對(duì)象了。 注意:要?jiǎng)?chuàng)建外部可視用戶對(duì)象,必須知道外部用戶對(duì)象所在的DLL文件名和注冊(cè)類名,14.2.1 創(chuàng)建標(biāo)準(zhǔn)類用戶對(duì)象,選擇主窗口工具欄上的圖標(biāo)按鈕New 或選擇主菜單File的New子菜單,將打開(kāi)標(biāo)題為“New”的窗口,選
10、擇Object頁(yè),圖14-12 定義標(biāo)準(zhǔn)類用戶對(duì)象,14.2.1 創(chuàng)建標(biāo)準(zhǔn)類用戶對(duì)象,在圖14-12的 Object頁(yè)中選擇Standard Class項(xiàng),點(diǎn)擊OK或直接雙擊Standard Class項(xiàng),打開(kāi)標(biāo)題為“Select Standard Class Type”的窗口來(lái)選擇創(chuàng)建的用戶對(duì)象所繼承的內(nèi)部系統(tǒng)對(duì)象,圖14-13 選擇標(biāo)準(zhǔn)對(duì)象類,14.2.1 創(chuàng)建標(biāo)準(zhǔn)類用戶對(duì)象,選擇所要的對(duì)象類,點(diǎn)Ok,打開(kāi)標(biāo)準(zhǔn)類用戶對(duì)象定義畫(huà)板。 類用戶對(duì)象是不可見(jiàn)的,不能在它上面布置任何的可視控件。為這個(gè)對(duì)象封裝屬性、函數(shù)和事件以及變量等,編寫(xiě)用戶對(duì)象所需的各種事件處理程序。最后保存用戶對(duì)象,圖14-1
11、4 標(biāo)準(zhǔn)用戶類畫(huà)板,14.2.2 使用類用戶對(duì)象,使用類用戶對(duì)象時(shí),需要在代碼中創(chuàng)建它的一個(gè)實(shí)例 。 步驟為: (1) 說(shuō)明類用戶對(duì)象類型的變量,用CREATE語(yǔ)句創(chuàng)建該對(duì)象的一個(gè)實(shí)例; (2)在變量的整個(gè)作用域中,代碼都能訪問(wèn)該對(duì)象的屬性、事件、函數(shù),就像使用系統(tǒng)預(yù)定義對(duì)象那樣(比如事務(wù)處理對(duì)象SQLCA); (3) 不再使用該用戶對(duì)象時(shí),使用DESTROY語(yǔ)句刪除該對(duì)象,以釋放它所占的內(nèi)存,14.2.2 使用類用戶對(duì)象,例如: 我們已經(jīng)創(chuàng)建了一個(gè)標(biāo)準(zhǔn)類用戶對(duì)象u_datastore,它從數(shù)據(jù)存儲(chǔ)對(duì)象Datastore繼承得到,那么代碼中可以這樣使用: u_datastore myds /聲
12、明u_datastore類型的變量myds myds = CREATE u_datastore /創(chuàng)建用戶對(duì)象實(shí)例myds myds.DataObject = d_user_search /將數(shù)據(jù)窗口對(duì)象與類用 戶對(duì)象聯(lián)系起來(lái) myds.SetTransObject(SQLCA) /設(shè)置類用戶對(duì)象使用的事務(wù)對(duì)象 ret = myds.Retrieve(math) /檢索數(shù)據(jù)據(jù) ./應(yīng)用程序所需的其它處理 DESTROY myds /使用后刪除用戶對(duì)象,14.2.3 創(chuàng)建定制類用戶對(duì)象,定制類用戶對(duì)象是用戶自己設(shè)計(jì)的對(duì)象,用于封裝不需要可視特性的處理過(guò)程。這些對(duì)象并不繼承某個(gè)對(duì)象或控件,完全由用
13、戶通過(guò)定義實(shí)例變量、函數(shù)、事件來(lái)實(shí)現(xiàn)。 定制類用戶對(duì)象只有兩個(gè)系統(tǒng)預(yù)定義事件:Constructor和Destructor。其創(chuàng)建過(guò)程和使用方法完全類似于標(biāo)準(zhǔn)類用戶對(duì)象。 要將用戶對(duì)象刪除,只有在Library工作區(qū)才能實(shí)現(xiàn)。方法是打開(kāi)Library工作區(qū),右擊要?jiǎng)h除的對(duì)象,出現(xiàn)彈出式菜單,選擇Delete,打開(kāi)一個(gè)提示框,選擇Yes,刪除所選的對(duì)象。參見(jiàn)PBL庫(kù)管理器,14.3 用戶對(duì)象使用編程實(shí)例,在用戶自定義事件的編程實(shí)例中,要求當(dāng)焦點(diǎn)落在命令按鈕上時(shí),按回車鍵能代替鼠標(biāo)。在數(shù)據(jù)窗口中,按回車鍵可以跳到下一個(gè)輸入項(xiàng),而不是下一行。在最后一行的最后一列按回車鍵時(shí),將增加一個(gè)空行。在最后一行
14、按向下的箭頭鍵時(shí),也增加一個(gè)空行,圖14-15 用戶對(duì)象使用實(shí)例,14.3 用戶對(duì)象使用編程實(shí)例,應(yīng)該設(shè)計(jì)一個(gè)統(tǒng)一的按鈕,無(wú)須在每個(gè)用到的地方分別編程。使用用戶對(duì)象可以方便的解決問(wèn)題。 實(shí)例創(chuàng)建步驟如下: (1) 創(chuàng)建一個(gè)ustudent.pbl,其ApplicationObject為ustu,再建一個(gè)窗口w_uobject。 (2) 創(chuàng)建標(biāo)準(zhǔn)可視用戶對(duì)象,它是從標(biāo)準(zhǔn)控件commandbutton命令按鈕繼承來(lái)的。給該用戶對(duì)象增加自定義事件ue_keyenter,事件號(hào)為pbm_keydown。該用戶對(duì)象能夠響應(yīng)鼠標(biāo)和回車鍵操作。 在該用戶對(duì)象的事件ue_keyenter中輸入以下代碼: if
15、 KeyDown(KeyEnter!) then /如果是回車鍵,則觸發(fā)鼠標(biāo)單擊事件 this.TriggerEvent(Clicked!) end if 保存該用戶對(duì)象,名為u_commandbutton,14.3 用戶對(duì)象使用編程實(shí)例,3) 再創(chuàng)建標(biāo)準(zhǔn)可視用戶對(duì)象,也是從標(biāo)準(zhǔn)控件commandbutton命令按鈕繼承來(lái)的。給該用戶對(duì)象增加自定義事件ue_keyenter,事件號(hào)為pbm_keydown。該用戶對(duì)象能夠響應(yīng)鼠標(biāo)和回車鍵操作,并關(guān)閉控件所在的窗口。 l在該用戶對(duì)象的自定義事件ue_keyenter中輸入以下代碼: if KeyDown(KeyEnter!) then /如果是回
16、車鍵,則觸發(fā)鼠標(biāo)單擊事件 this.TriggerEvent(Clicked!) end if l在該用戶對(duì)象的事件click中輸入以下代碼: close(parent) /關(guān)閉控件所在的窗口 保存該用戶對(duì)象,名為u_cb_return。 (4) 創(chuàng)建標(biāo)準(zhǔn)可視用戶對(duì)象,它是從標(biāo)準(zhǔn)控件datawindow數(shù)據(jù)窗口繼承來(lái)的。給該用戶對(duì)象增加兩個(gè)自定義事件和一個(gè)自定義函數(shù),14.3 用戶對(duì)象使用編程實(shí)例,l一個(gè)事件是ue_keyenter,事件號(hào)為pbm_dwnprocessenter。該事件的主要功能是按回車鍵可以跳到下一個(gè)輸入項(xiàng),不是下一行。當(dāng)在最后一行的最后一列按回車鍵時(shí),將增加一個(gè)空行。 l
17、 一個(gè)事件是ue_keyarrow,事件號(hào)為pbm_dwntabdownout.。該事件的主要功能是在最后一行按向下的箭頭鍵時(shí),增加一個(gè)空行。 l自定義函數(shù)是uf_getcolnumber(),無(wú)入口參數(shù),返回值表示數(shù)據(jù)窗口中的列數(shù)。該函數(shù)的功能就是求當(dāng)前數(shù)據(jù)窗口中的列的數(shù)目。 l在該用戶對(duì)象的自定義函數(shù)uf_getcolnumber()中輸入以下代碼: /返回當(dāng)前數(shù)據(jù)窗口的列數(shù) long row int col,oldcol,ret row=this.getrow() oldcol=this.getcolumn()/oldcol為當(dāng)前列 if row1 then return 0/數(shù)據(jù)窗口為
18、空則返回,14.3 用戶對(duì)象使用編程實(shí)例,下面循環(huán)的意思是從第一列開(kāi)始設(shè)置為當(dāng)前列, /若設(shè)置成功,則將下一列設(shè)置為當(dāng)前列,. /直到設(shè)置失敗(setcolumn函數(shù)返回-1), /這時(shí)列數(shù)就是col-1 /假設(shè)數(shù)據(jù)窗口的列數(shù)不超過(guò)10000列. for col=1 to 10000 ret=this.setcolumn(col) if ret= - 1 then this.setcolumn(oldcol)/將原來(lái)的列恢復(fù)為當(dāng)前列 return col 1 /返回?cái)?shù)據(jù)窗口中的列數(shù) end if next return 0 l 在該用戶對(duì)象的自定義事件ue_keyenter中輸入以下代碼: i
19、nt col,colnum long row colnum=uf_getcolnumber()/求數(shù)據(jù)窗口的列數(shù),14.3 用戶對(duì)象使用編程實(shí)例,if colnum1 then return 1 /如果列數(shù)小于1,則返回 col=getcolumn() row=getrow() if colcolnum then/當(dāng)前列不是最后一列 setcolumn(col+1)/將下一列變?yōu)楫?dāng)前列 else if rowrowcount() then /當(dāng)前列是最后一列但當(dāng)前行不是最后一行 setrow(row+1)/將下一行的第一列變?yōu)楫?dāng)前列 scrolltorow(row+1) setcolumn(1
20、) else /當(dāng)前列是最后一列且當(dāng)前行是最后一行 row=insertrow(0)/增加一行 setrow(row)/將新行的第一列變?yōu)楫?dāng)前列 scrolltorow(row) setcolumn(1) end if end if return 1 /放棄原來(lái)的操作,14.3 用戶對(duì)象使用編程實(shí)例,l在該用戶對(duì)象的自定義事件ue_keyarrow中輸入以下代碼: long row row=insertrow(0)/增加一行 setrow(row)/將新行變?yōu)楫?dāng)前行 scrolltorow(row) (5) 在窗口w_uobject上創(chuàng)建用戶對(duì)象控件: dw_1:從u_datawindow繼承
21、而來(lái) cb_append:從u_commandbutton繼承而來(lái) cb_insert:從u_commandbutton繼承而來(lái) cb_delete:從u_commandbutton繼承而來(lái) cb_retrieve:從u_commandbutton繼承而來(lái) cb_update:從u_commandbutton繼承而來(lái) cb_return:從u_commandbutton繼承而來(lái) 分別給cb_append、cb_insert、cb_delete、cb_retrieve、cb_update控件的text屬性賦值;給dw_1的dataobject屬性賦值,即將控件與某個(gè)數(shù)據(jù)窗口對(duì)象相關(guān)聯(lián),14.3 用戶對(duì)象使用編程實(shí)例,l給應(yīng)用對(duì)象ustu的open事件編寫(xiě)代碼: SQLCA.AutoCommit = True sqlca.DBMS = odbc sqlca.database = student sqlca.dbpass=dba sqlca.userid=s
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 印刷公司會(huì)計(jì)聘用合同條款
- 攝影器材租賃定金合同
- 文化藝術(shù)合同管理
- 退款協(xié)議書(shū)示例
- 私人圖書(shū)館管家聘用合同
- 市政道路化糞池安裝合同
- 舞蹈室清潔施工合同范本
- 員工健康守護(hù)職業(yè)病預(yù)防指南
- 滑雪場(chǎng)混凝土路面鋪設(shè)協(xié)議
- 旅游服務(wù)技術(shù)合同指南
- 小學(xué)英語(yǔ)-Unit4 There is an old building in my school教學(xué)設(shè)計(jì)學(xué)情分析教材分析課后反思
- 《汽車電氣設(shè)備檢測(cè)與維修》 課件 任務(wù)14、15 轉(zhuǎn)向燈故障診斷與維修(一、二)
- 高職院校師資建設(shè)五年規(guī)劃
- 項(xiàng)目5 S7-1200 PLC控制步進(jìn)電機(jī)與伺服電機(jī)
- 調(diào)研走訪記錄表
- 第14課 漂亮的房間(導(dǎo)學(xué)案)蘇少版美術(shù)四年級(jí)上冊(cè)
- 物業(yè)公司章程模板
- 中國(guó)平安初級(jí)考試2必過(guò)版
- 火龍罐技術(shù)課件
- 危重患者早期識(shí)別與評(píng)估
- 新能源汽車畢業(yè)設(shè)計(jì)選題
評(píng)論
0/150
提交評(píng)論