用戶自定義事件_第1頁(yè)
用戶自定義事件_第2頁(yè)
用戶自定義事件_第3頁(yè)
用戶自定義事件_第4頁(yè)
用戶自定義事件_第5頁(yè)
已閱讀5頁(yè),還剩6頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、第9章 用戶自定義事件用戶自定義事件實(shí)質(zhì)上就是除了PowerBuilder已給出事件外任何用戶自己定義的事件,它包括兩層含義,一是Windows本身是產(chǎn)生這個(gè)事件的,只是PowerBuilder沒(méi)有具體列出來(lái),可以自己根據(jù)需求來(lái)選用設(shè)置。比如說(shuō)對(duì)Picture控件來(lái)說(shuō),它是存在鼠標(biāo)移動(dòng)事件的,但在事件列表中沒(méi)有mousemove事件,得用戶自己設(shè)定一下該事件的ID號(hào)。二是編程人員為了避免寫(xiě)重復(fù)代碼而將這段代碼加入到用戶自定義事件中,在其他事件中可直接調(diào)用該自定義事件即可。9.1 定義用戶事件事件是從屬于某個(gè)對(duì)象的,因此定義用戶事件,首先雙擊對(duì)象進(jìn)入腳本窗口,如圖9-1所示選擇(New Even

2、t),進(jìn)入用戶自定義事件窗口,如圖9-2所示。選擇對(duì)象選擇New Event圖9-1 定義用戶事件圖9-2 用戶自定義事件窗口圖9-2中,Event Name(用戶事件名)和Event ID(用戶事件號(hào))是必須要輸入的,其它則由用戶決定。為了和系統(tǒng)預(yù)定義的事件區(qū)分,用戶事件名通常以u(píng)e_開(kāi)頭。Event ID是以pbm_為前綴的事件標(biāo)識(shí),分為兩種。一種是Windows所提供的事件編號(hào),但PowerBuilder沒(méi)有直接給出該事件,需要針對(duì)該Event ID作自定義事件的,在應(yīng)用程序中該事件發(fā)生時(shí)會(huì)自動(dòng)執(zhí)行該用戶自定義事件的腳本。另一種是用戶自己定義的Event ID,PowerBuilder給

3、出從pbm_custom01到pbm_custom75共75個(gè)Event ID供使用。選擇一個(gè)Event ID后,參數(shù)名、類(lèi)型、個(gè)數(shù)會(huì)自動(dòng)顯示,用戶不能修改。若想定義帶參數(shù)的用戶事件,則Event ID必須選None。9.2 用戶事件號(hào)為某一對(duì)象定義用戶事件時(shí),選擇的Event ID應(yīng)與所在的對(duì)象相吻合,否則該用戶事件不起作用。表9-1列出常見(jiàn)的Event ID含義。表9-1 常見(jiàn)的Event ID含義事件號(hào)含義單選或多選按鈕消息(前綴:pbm_bm)pbm_bmgetcheck單選按鈕或多選按鈕是否被選pbm_bmgetstate按鈕是否加亮pbm_bmsetcheck無(wú)線按鈕或確認(rèn)將框的選

4、中狀態(tài)改為未選中狀態(tài),反之亦然pbm_bmsetstate加亮或不加亮按鈕pbm_bmchange改變按鈕的風(fēng)格,例如,改為單選按鈕或組合框單選或多選按鈕通知消息(前綴:pbm_bn)pbm_bnclicked按鈕控件被點(diǎn)中pbm_bndisable使按鈕控件無(wú)效pbm_bndoubleclicked按鈕控件被雙點(diǎn)pbm_bndragdrop一個(gè)對(duì)象被放到按鈕控件pbm_bndragenter一個(gè)對(duì)象被拖到按鈕控件pbm_bndragleave一個(gè)對(duì)象被拖離按鈕控件pbm_bndragover一個(gè)對(duì)象被拖經(jīng)按鈕控件pbm_bnhilite按鈕控件被加亮pbm_bnpaint按鈕控件被繪制pbm

5、_bnsetfocus按鈕控件獲得聚焦pbm_bnunhilite按鈕控件不被加亮通用對(duì)話框消息(前綴:pbm_cb)pbm_cbaddstring將字符串加到通用對(duì)話框pbm_cbdeletestring從通用對(duì)話框刪除一個(gè)字符串pbm_cbdir加一個(gè)目錄列表到通用對(duì)話框pbm_cbfindstring搜索以一組字符開(kāi)頭的字符串pbm_cbfindstringexact搜索與所提供的字符完全匹配的字符串pbm_cbgetcount列表框中的項(xiàng)數(shù)pbm_cbgetcursel當(dāng)前被選項(xiàng)的數(shù)目pbm_cbgetdroppedcontrolset列表框在屏幕上的坐標(biāo)位置pbm_cbgetedit

6、sel編輯器控件中被選字符的范圍pbm_cbgetextendedui缺省或擴(kuò)展的用戶界面pbm_cbgetitemdata重畫(huà)的列表框中的4字節(jié)(32位)項(xiàng)pbm_cbgetitemheight列表框中某一項(xiàng)的高度pbm_cbgetlbtext列表框中的文本pbm_cbgetlbtextlen列表框中文本的長(zhǎng)度pbm_cbinsertstring向列表框中增加新的字符串或4字節(jié)項(xiàng)pbm_cblimittext限制能被輸入到列表框中的字符數(shù)pbm_cbresetcontent刪除列表框中所有元素pbm_cbselectstring搜索匹配的字符串并顯示pbm_cbsetcursel在列表框中選

7、擇并顯示一項(xiàng)pbm_cbseteditsel在列表框的編輯區(qū)域中選擇一塊文本pbm_cbsetextendedui設(shè)置缺省或擴(kuò)展的用戶界面pbm_cbsetitemdata在列表框中設(shè)定4字節(jié)(32位)項(xiàng)pbm_cbsetitemheight設(shè)置列表框中項(xiàng)的高度pbm_cbshowdropdown轉(zhuǎn)換(顯示或隱藏)列表框中拖放區(qū)域通用對(duì)話框通知消息(前綴:pbm_cbn)pbm_cbndblclk用戶在列表中某一項(xiàng)上雙點(diǎn)pbm_cbndragdrop一個(gè)對(duì)象被放到通用對(duì)話框控件上pbm_cbndragenter一個(gè)對(duì)象被拖到通用對(duì)話框控件上pbm_cbndragleave一個(gè)對(duì)象被拖離通用對(duì)話

8、框控件pbm_cbndragover一個(gè)對(duì)象被拖經(jīng)通用對(duì)話框控件pbm_cbndropdown列表框的下放區(qū)域即將被顯示pbm_cbneditchange編輯器控件中的文本發(fā)生變化pbm_cbneditupdate列表框編輯器控件中的文本即將被改變pbm_cbnerrspace列表框滿,不能再向其中加入項(xiàng)pbm_cbnkillfocus通用列表框失去聚焦pbm_cbnselchange列表框中被選文本被改變pbm_cbnselendcancel用戶按下了"取消"按鈕pbm_cbnselendok用戶按下了"確認(rèn)"按鈕pbm_cbnsetfocus通用對(duì)話

9、控件擁有聚焦數(shù)據(jù)窗口消息(前綴:pbm_dw)pbm_dwclosedropdown關(guān)閉下拉式數(shù)據(jù)窗口pbm_dwscrollend在數(shù)據(jù)窗口中卷滾到最后一行pbm_dwscrollhome在數(shù)據(jù)窗口中卷滾到第一行pbm_dwscrolllineend卷滾到當(dāng)前行的行尾(水平方向)pbm_dwscrolllinehome卷滾到當(dāng)前行的行首(水平方向)數(shù)據(jù)窗口通知消息(前綴:pbm_dwn)pbm_dwnbacktabout即將通過(guò)Shift+Tab組合鍵離開(kāi)該控件pbm_dwnchanging控件即將被改變pbm_dwndropdown下拉式列表框的下拉部分即將可見(jiàn)pbm_dwngraphcr

10、eate即將創(chuàng)建圖形pbm_dwnitemchangefocus數(shù)據(jù)窗口控件中當(dāng)前項(xiàng)的聚焦改變pbm_dwnitemvalidationerror對(duì)當(dāng)前項(xiàng)的修改引起了一個(gè)合法性檢查錯(cuò)誤pbm_dwnkey有鍵被按下。使用KeyDown()處理鍵盤(pán)值pbm_dwnlbuttondown鼠標(biāo)左鍵被按下pbm_dwnlbuttonup鼠標(biāo)左鍵被松開(kāi)pbm_dwnmbuttonclk鼠標(biāo)中鍵點(diǎn)擊pbm_dwnmbuttondbclk鼠標(biāo)中鍵雙擊pbm_dwnmousemove鼠標(biāo)移動(dòng)pbm_dwnprintmarginchange打印邊界被改變pbm_dwnprocessenter回車(chē)鍵被按下pbm_

11、dwnrowchange數(shù)據(jù)窗口中聚焦從一行轉(zhuǎn)向另一行pbm_dwntabdownout用戶在數(shù)據(jù)窗口最后一行按了下箭頭鍵pbm_dwntabout用戶在數(shù)據(jù)窗口的最后一行/列中按了tab鍵pbm_dwntabupout用戶在數(shù)據(jù)窗口第一行中按了上箭頭鍵動(dòng)態(tài)數(shù)據(jù)交換(DDE)消息(前綴:pbm_dde)pbm_ddeddeack收到一個(gè)DDE消息pbm_ddeddeinitiate開(kāi)始一個(gè)DDE會(huì)話pbm_ddeddeterminate終止一個(gè)DDE會(huì)話編輯器控件消息(前綴:pbm_em)pbm_emcanundo編輯器控件是否能撤消上一次修改pbm_ememptyundobuffer清空由W

12、indows管理的取消操作的緩沖區(qū)pbm_emfmtlines在多行編輯器控件的行尾增加或刪除回車(chē)換行pbm_emgetfirstvisibleline返回編輯器控件中可見(jiàn)的第一行的行號(hào)pbm_emgethandle獲得編輯器控件使用的內(nèi)存句柄pbm_emgetline從編輯器控件中復(fù)制一行到內(nèi)存中的一個(gè)緩沖區(qū)pbm_emgetlinecount返回多行編輯器控件的行數(shù)pbm_emgetmodify文本是否被用戶修改pbm_emgetrect返回控件的長(zhǎng)方形域pbm_emgetsel返回被選文本的起始位置pbm_emlimittext限制用戶鍵入的文本長(zhǎng)度pbm_emlinefromchar返

13、回被選文本的行號(hào)pbm_emlineindex返回編輯器控件中被選行第一個(gè)字符在編輯串中的位置pbm_emlinelength返回編輯器控件中被選行中的字符數(shù)pbm_emlinescroll水平或垂直卷滾編輯器控件pbm_emreplacesel從剪貼板或從鍵盤(pán)上用新文本替換被選文本pbm_emsethandle設(shè)置編輯器控件的句柄指向內(nèi)存中的一個(gè)緩沖區(qū)pbm_emsetmodify設(shè)置編輯器控件的modified標(biāo)志pbm_emsetpasswordchar設(shè)置用戶輸入任何文本時(shí)顯示的字符,在輸入密碼時(shí)的顯示pbm_emsetrect設(shè)置/重置編輯器控件所在的長(zhǎng)方形區(qū)域,編輯器控件中的文本被

14、重畫(huà)pbm_emsetrectnp除了不重畫(huà)文本,大致與setrect相同pbm_emsetsel選擇字符pbm_emsettabstops在多行編輯器控件中設(shè)置tabstopspbm_emsetwordbreak設(shè)置新的詞拆分函數(shù)pbm_emsetwordbreakproc設(shè)置新的詞拆分過(guò)程pbm_emundo撤消最近的編輯操作編輯控件通知消息(前綴:pbm_en)pbm_enchange編輯器控件中的文本發(fā)生改變pbm_enerrspace編輯器控件內(nèi)存緩沖區(qū)溢出pbm_enhscroll用戶點(diǎn)中上水平卷滾條pbm_enmaxtext用戶試圖輸入比允許更多的文本pbm_enupdate編輯

15、器控件即將顯示用戶的修改pbm_envscroll用戶點(diǎn)中了垂直卷滾條列表框消息(前綴:pbm_lb)pbm_lbaddstring向列表框控件中增加一項(xiàng)或一個(gè)字符串pbm_lbdeletestring從列表框中刪除一項(xiàng)或一個(gè)字符串pbm_lbdir用目錄列表填充列表框pbm_lbfindstring在列表框中搜索與所給字符串部分匹配的第一項(xiàng)pbm_lbfindstringexact在列表框中搜索與所給字符串精確匹配的第一項(xiàng)pbm_lbgetcaretindex在列表框中搜索擁有聚焦的項(xiàng)pbm_lbgetcount確定列表框中的項(xiàng)數(shù)pbm_lbgetcursel確定所選項(xiàng)是第幾項(xiàng)pbm_lbg

16、ethorizontalextent獲得列表框的寬度、計(jì)算水平卷滾pbm_lbgetitemheight確定列表框控件中項(xiàng)的高度pbm_lbgetitemrect確定列表框的尺寸pbm_lbgetsel獲得列表框中當(dāng)前所選的項(xiàng)pbm_lbgetselcount在多選列表框中獲得所選項(xiàng)的數(shù)目pbm_lbgetselitems用列表框中表框各自的項(xiàng)號(hào)填充一個(gè)給定的整數(shù)數(shù)組pbm_lbgettext獲得列表框中當(dāng)前所選項(xiàng)的文本pbm_lbgettextlen獲得列表框中當(dāng)前所選項(xiàng)的文本中的字符數(shù)pbm_lbgettopindex確定列表框中可見(jiàn)的最上面一項(xiàng)的項(xiàng)號(hào)pbm_lbinsertstring向

17、列表框中加入一個(gè)新字符串pbm_lbresetcontent重置(消除)列表框中的內(nèi)容pbm_lbselectstring搜索并加亮與所給字符匹配的字符串pbm_lbselitemrange選擇/取消列表框中某一范圍中的項(xiàng)pbm_lbsetcaretindex設(shè)置列表框中的某一項(xiàng)擁有聚焦pbm_lbsetcolumnwidth設(shè)置列表框中列的寬度pbm_lbsetcursel在列表框中選擇并加亮一項(xiàng);如果需要,卷滾到列表框pbm_lbsethorizontaltext設(shè)置列表框中被水平卷滾的單元數(shù)pbm_lbsetitemdata設(shè)置與列表框相關(guān)的32位/4字節(jié)值pbm_lbsetitemhe

18、ight設(shè)置列表框中項(xiàng)的高度pbm_lbsetsel在列表框中選擇一個(gè)字符串pbm_lbsettabstops設(shè)置列表框控件中tabstops的位置pbm_lbsettopindex卷滾列表框使特定的項(xiàng)成為可見(jiàn)的最上面一項(xiàng)列表框通知消息(前綴:pbm_en)pbm_endblclk用戶在列表框控件中的某一項(xiàng)上雙擊pbm_enerrspace用戶試圖超越可在列表框中輸入字符的最大限制pbm_enselcancel當(dāng)前選取文本被取消pbm_enselchange用戶在列表框中選擇或取消了一項(xiàng)窗口消息(前綴:pbm_)pbm_activateapp被激活的窗口屬于另外一個(gè)應(yīng)用pbm_askcbfor

19、matname要求剪貼板中的內(nèi)容被復(fù)制到一個(gè)使用自定義格式的文本緩沖區(qū)中pbm_char傳送鍵盤(pán)上按下的鍵pbm_chartoitem通過(guò)轉(zhuǎn)換鍵盤(pán)來(lái)的字符,幫助列表框定位其中的項(xiàng)pbm_childactivate一個(gè)子窗口被移動(dòng)或激活pbm_clear用戶要?jiǎng)h除當(dāng)前編輯器控件中的內(nèi)容pbm_command用戶選擇了一個(gè)菜單項(xiàng)、控件,或使用了加速鍵pbm_compacting系統(tǒng)內(nèi)存資源不足;當(dāng)Windows占用了多于1/8的CPU時(shí)間緊縮內(nèi)存時(shí),產(chǎn)生這條消息pbm_compareitem當(dāng)新的一項(xiàng)被加入列表框或組合框時(shí)產(chǎn)生此消息,Window用這條消息進(jìn)行項(xiàng)之間的比較pbm_ctlcolor一

20、個(gè)控件即將被畫(huà)出,可在此時(shí)改變控件的顏色pbm_deadchar用戶選擇了一種非英語(yǔ)字符集或其它特殊字符集,這將改變下面將要輸入的字符pbm_deleteitem從列表框或通用對(duì)話框中移去一項(xiàng)pbm_destroyclipboard剪貼板內(nèi)容被清除pbm_devmodechangedpbm_drawclipboard剪貼板內(nèi)容發(fā)生改變pbm_drawitem列表框或通用對(duì)話框的一項(xiàng)內(nèi)容被改變pbm_dropfiles當(dāng)鼠標(biāo)左鍵在一個(gè)注冊(cè)為拖放文件接受器的應(yīng)用上釋放時(shí),發(fā)出該消息pbm_erasebkgnd窗口的客戶區(qū)需要重畫(huà)pbm_fontchange應(yīng)用可用的字體數(shù)改變pbm_getdlgc

21、ode通知消息,說(shuō)明當(dāng)前使用哪種類(lèi)型的鍵盤(pán)pbm_getfont獲取當(dāng)前激活的字體pbm_getminmaxintoWindows正在檢查最小化或最大化窗口的尺寸pbm_gettext從一個(gè)控件(如按鈕或編輯器控件)中復(fù)制文本到一個(gè)內(nèi)存緩沖區(qū)pbm_gettextlength用來(lái)確定一個(gè)控件中的字符數(shù)pbm_hscrollclipboard剪貼板的水平卷滾條被使用pbm_iconerasebkgnd一個(gè)最小化窗口需要重化背景pbm_initdialog一個(gè)對(duì)話框即將被顯示pbm_initmenu一個(gè)菜單即將被顯示pbm_initmenupopup一個(gè)彈出式窗口即將被顯示pbm_keydown鍵

22、盤(pán)上的一個(gè)鍵被按下pbm_keyup鍵盤(pán)上的一個(gè)鍵被釋放pbm_mdiactive一個(gè)MDI子窗口(表單)被激活pbm_mdicascade以重疊的形式重排所有的表單pbm_menuchar用戶使用了一個(gè)快捷鍵,但系統(tǒng)不支持該快捷鍵pbm_menuselect用戶選擇了一個(gè)菜單項(xiàng)pbm_mouseactivate用戶在一個(gè)非活動(dòng)窗口中點(diǎn)擊了鼠標(biāo)pbm_mousemove用戶移動(dòng)了鼠標(biāo)pbm_ncactivate窗口的非客戶區(qū)即將被激活pbm_nccalcsize窗口的尺寸需要重新計(jì)算pbm_nccreate窗口即將創(chuàng)建它的非客戶區(qū)pbm_ncdestroy窗口的非共享區(qū)被析構(gòu)pbm_nchit

23、test每次非客戶區(qū)被移動(dòng)時(shí)都發(fā)送該消息pbm_nclbuttondblclk用戶在非客戶區(qū)雙點(diǎn)了鼠標(biāo)左鍵pbm_ncpaint非客戶需要畫(huà)出pbm_nextdlgctl在對(duì)話框中將聚焦轉(zhuǎn)給另一個(gè)控件pbm_paint窗口的客戶區(qū)需要被畫(huà)出pbm_paintclipboard剪貼板應(yīng)用有剪貼操作,剪貼板查看器需重畫(huà)pbm_palettechanged系統(tǒng)調(diào)色板被改變pbm_paletteischanging系統(tǒng)調(diào)色板即將被改變pbm_parentnotify通知父窗口一個(gè)子窗口即將被創(chuàng)建pbm_querydragicon用戶要拖一個(gè)最小化窗口pbm_queryendsession通知消息,說(shuō)明

24、窗口即將被關(guān)閉pbm_querynewpalette應(yīng)用即將收到輸入聚焦,應(yīng)該執(zhí)行必要的顏色調(diào)整pbm_queryopen一個(gè)最小化窗口即將被恢復(fù)pbm_quit應(yīng)用處理的最后一個(gè)消息pbm_renderallformats通知一個(gè)剪貼板格式的擁有者,應(yīng)用將失去所有的格式pbm_renderformats通知消息,說(shuō)明放在剪貼板中的數(shù)據(jù)應(yīng)該用一種特殊格式傳送pbm_setcursor通知消息,說(shuō)明鼠標(biāo)指針在一個(gè)窗口中移動(dòng)pbm_setfont用來(lái)在對(duì)話框中改變字體pbm_setredraw在加一個(gè)新項(xiàng)之前發(fā)送給列表框或通用對(duì)話框pbm_settext用來(lái)改變窗口的標(biāo)題或文本pbm_sizecl

25、ipboard剪貼板查看器應(yīng)用改變尺寸pbm_spoolerstatus一個(gè)打印管理器任務(wù)被添加或刪除pbm_syschar<ALT>鍵和其它某鍵同時(shí)被按下pbm_syscolorchange一種或多種系統(tǒng)顏色被改變pbm_syscommand用戶選擇了一個(gè)系統(tǒng)菜單命令pbm_sysdeadchar通知消息,說(shuō)明一種非英語(yǔ)字符集被選定bm_syskeydownp用戶按下某鍵的同時(shí)按下了<ALT>鍵pbm_vscroll用戶點(diǎn)擊了垂直卷滾條9.3 刪除用戶事件自定義的用戶事件號(hào)及事件名稱(chēng)不能更改,如果出現(xiàn)自定義事件與需求的不符,只能刪除。刪除的方法是:在該事件的腳本代碼窗

26、口中右擊,在彈出式菜單中選擇Delete Event即可。但需注意的是PowerBuilder不會(huì)作任何有關(guān)刪除的提示。9.4 觸發(fā)用戶事件定義了用戶事件后,就需要設(shè)計(jì)事件處理程序,就像其他系統(tǒng)常用事件一樣,沒(méi)有事件處理程序,即使發(fā)生了該事件,應(yīng)用程序也不做任何處理。如果選用的事件號(hào)對(duì)應(yīng)于某個(gè)Windows消息(如表9.1),則事件何時(shí)發(fā)生,將由系統(tǒng)決定,就像其他系統(tǒng)常用事件一樣被自動(dòng)觸發(fā)。如果選用的事件號(hào)為pbm_custom01到pbm_custom75,則必須使用TriggerEvent()函數(shù)或PostEvent()函數(shù)觸發(fā)該事件。這兩個(gè)函數(shù)的語(yǔ)法格式為:object_name. Tr

27、iggerEvent(event_name)object_name. PostEvent(event_name)其中:object_name為對(duì)象名,event_name為事件名,對(duì)系統(tǒng)事件而言,是枚舉類(lèi)型,如Clicked!等,對(duì)用戶自定義事件而言,是一個(gè)字符串。例如:cb_2. triggerevent(Clicked!) /觸發(fā)命令按鈕cb_2的鼠標(biāo)單擊事件cb_2. triggerevent("ue_color") /觸發(fā)命令按鈕cb_2的用戶自定義事件ue_color TriggerEvent和PostEvent的區(qū)別在于:TriggerEvent立即觸發(fā)用戶指定

28、的事件,再繼續(xù)調(diào)用下面的事件,屬于同步調(diào)用;而PostEvent則把事件排在事件隊(duì)列的末尾,屬于異步調(diào)用。如果定義用戶事件時(shí)定義了事件參數(shù),需用下面的格式觸發(fā)用戶事件:object_name. Trigger|PostStatic|DynamicEVENT event_name(para_list)其中:方括號(hào)表示可選部分。Object_name是事件所屬對(duì)象的對(duì)象名。Trigger和Post選項(xiàng)只能選擇一個(gè),缺省時(shí)為T(mén)rigger。Trigger表示立即執(zhí)行指定事件的事件處理程序,然后再執(zhí)行該語(yǔ)句后面的代碼;Post表示將該事件放置到對(duì)象的事件隊(duì)列中,然后繼續(xù)執(zhí)行該語(yǔ)句后面的代碼,至于發(fā)出去

29、的事件處理程序何時(shí)執(zhí)行,由操作系統(tǒng)決定。Static和Dynamic選項(xiàng)只能選一個(gè),缺省時(shí)為Static。Static表示編譯時(shí)指定事件必須存在,系統(tǒng)要進(jìn)行返回值類(lèi)型檢查;Dynamic表示編譯時(shí)指定事件可以不存在,系統(tǒng)把返回值類(lèi)型檢查推遲到應(yīng)用程序運(yùn)行時(shí)進(jìn)行。EVENT是關(guān)鍵字,表示后面的event_name是個(gè)事件名而不是函數(shù)。para_list是事件參數(shù)列表,多個(gè)參數(shù)時(shí)參數(shù)之間用逗號(hào)分隔?!緦?shí)例9-1】觸發(fā)用戶事件要求:鼠標(biāo)在命令按鈕cb_1上移動(dòng),觸發(fā)cb_1的鼠標(biāo)移動(dòng)事件ue_mousemove(自定義),改變靜態(tài)文本st_1中文本的顏色。單擊命令按鈕cb_2,觸發(fā)該按鈕改變st_1

30、文本顏色的事件ue_color(自定義)。輸入半徑值后,單擊命令按鈕cb_3,觸發(fā)該按鈕的計(jì)算圓的面積事件ue_area(自定義)。技術(shù)要點(diǎn):定義用戶事件、觸發(fā)用戶事件。操作步驟:(1)新建工作區(qū)e:studentuserevent.pbw。(2)新建應(yīng)用userevent。(3)創(chuàng)建窗口對(duì)象w_event,按圖9-3所示添加控件、設(shè)置屬性。Title值為:觸發(fā)用戶事件。St_1的BorderStyle的屬性值為StyleLowered!,Text值為圖9-3所示。st_1cb_1cb_3sle_1cb_2圖9-3 w_event窗口的運(yùn)行界面(4)定義窗口對(duì)象w_event的實(shí)例變量:int

31、 i=0 。(5)雙擊cb_1按鈕,出現(xiàn)cb_1按鈕的事件,選擇New Event,出現(xiàn)如圖9-2所示的自定義事件窗口,Event Name為ue_mousemove,Event ID為pbm_mousemove,輸入代碼為:i=i+1if i>200 then i=0end ifif mod(i,22)=0 then st_1.textcolor=rgb(255,0,0) /如i能被22整除,st_1的文字變成紅色end ifif mod(i,48)=0 then st_1.textcolor=rgb(0,255,0) /如i能被48整除,st_1的文字變成綠色end if /代碼中的

32、22和48用戶可自己改,為了讓紅、綠兩種顏色變化的間隔加長(zhǎng)(6)雙擊cb_2按鈕,出現(xiàn)cb_2按鈕的事件,選擇New Event,出現(xiàn)如圖9-2所示的自定義事件窗口,Event Name為ue_color,Event ID為pbm_ custom17,輸入代碼為:i=i+1if i>200 theni=0end ifif mod(i,2)=0 then st_1.textcolor=rgb(255,0,0)/如果I為偶數(shù),st_1的文字變成紅色else st_1.textcolor=rgb(0,255,0)/ 如果I為奇數(shù),st_1的文字變成綠色end if(7)在cb_2的clicke

33、d事件中輸入如下代碼:cb_2.triggerevent("ue_color")/觸發(fā)命令按鈕cb_2的用戶自定義事件ue_color/此行代碼中cb_1可省略。因?yàn)楫?dāng)前對(duì)象是cb_2(8)雙擊cb_3按鈕,出現(xiàn)cb_3按鈕的事件,選擇New Event,出現(xiàn)如圖9-2所示的自定義事件窗口,Event Name為ue_area,返回值為decimal,輸入?yún)?shù)名r,參數(shù)返回值為decimal,Event ID為None。輸入代碼為:return (3.14159*r*r)(9)在cb_3的clicked事件中輸入如下代碼:dec 2 r1,sr1=dec(sle_1.tex

34、t)s=cb_3.event ue_area(r1)/觸發(fā)帶參數(shù)的自定義事件ue_areamessagebox("圓的面積為:",s)(10)在應(yīng)用對(duì)象userevent的Open事件中鍵入腳本:open(w_ event)(11)存盤(pán)后單擊按鈕執(zhí)行應(yīng)用程序。運(yùn)行的效果如圖9-3所示。在cb_1上移動(dòng)鼠標(biāo),觀察st_1中文本顏色的變化。單擊cb_2,觀察st_1中文本顏色的變化。輸入半徑后,單擊cb_3后觀察圓的面積。說(shuō)明:(1)本例中命令按鈕cb_1的自定義事件ue_mousemove,Event ID為pbm_mousemove,是Windows所提供的事件編號(hào),窗口運(yùn)

35、行,鼠標(biāo)移動(dòng)到cb_1上就會(huì)自動(dòng)觸發(fā)自定義事件ue_mousemove,st_1中的文本顏色發(fā)生變化。(2)本例中命令按鈕cb_2的自定義事件ue_color,Event ID為pbm_custom17是用戶使用的事件編號(hào),則必須使用代碼觸發(fā)該事件:cb_2.triggerevent("ue_color") ??蓪riggerevent函數(shù)改為PostEvent函數(shù)。(3)本例中命令按鈕cb_3的自定義事件ue_area,定義了參數(shù)r,不能使用triggerevent函數(shù)或PostEvent函數(shù)來(lái)觸發(fā),只能使用s=cb_3.event ue_area(r1)來(lái)觸發(fā)。9.5 小結(jié)本章講述了用戶自定義事件的設(shè)計(jì)過(guò)程。盡管PowerBuilder提供了大量的預(yù)定義事件,可以解決常見(jiàn)的問(wèn)題,但為了滿足實(shí)際的需要,用戶在設(shè)計(jì)時(shí)經(jīng)常要自定義事件。選擇不同的事件號(hào)觸發(fā)事件的方法不同,表9.1列出部分常用事件的說(shuō)明,對(duì)其

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論