�、� 定義處理過程類型
一旦你決定產(chǎn)生事件,就要定義事件如何被處理,這就是要決定事件處理過程的類型。在大多數(shù)情況下,定義的事件處理過程的類型是簡單的通知類型(TNotifyEvent)和已定義的事件類型。
通知事件只是告訴你特定的事件發(fā)生了,而沒有描述什么時候和什么地方。通知事件使用時只帶一個TObject類型的參數(shù),該參數(shù)是Sender。然而所有通知事件的處理過程都知道是什么樣的事件發(fā)生和發(fā)生在那個部件。例如:Click事件是通知類型。當(dāng)編寫Click事件的處理過程時,你知道的是Click事件發(fā)生和哪個部件被點按了。通知事件是單向過程。沒有提供反饋機制。
在某些情況下,只知道什么事件發(fā)生和發(fā)生在那個部件是不夠的。如果按鍵事件發(fā)生,事件處理過程往往要知道用戶按了哪個鍵。在這種情況下,需要事件處理過程包含有關(guān)事件的必要信息的參數(shù)。如果事件產(chǎn)生是為了響應(yīng)消息,那么傳遞給事件的參數(shù)最好是直接來自消息參數(shù)。
因為所有事件處理過程都是過程,所以從事件處理過程中返回信息的唯一方法是通過var參數(shù)。自定義部件可以用這些信息決定在用戶事件處理過程執(zhí)行后是否和怎樣處理事件。
例如,所有的擊鍵事件(OnKeyDown、OnKeyUp和OnKeyPressed)通過名為key的var參數(shù)傳遞鍵值。為了使應(yīng)用程序看見包含在事件中的不同的鍵,事件處理過程可以改變key變量值。
⑶ 聲明事件
一旦你決定了事件處理過程的類型,你就要準備聲明事件的方法指針和屬性。為了讓用戶易于理解事件的功能,應(yīng)當(dāng)給事件一個有意義的名字,而且還要與部件中相似的屬性的名稱保持一致。
Delphi中所有標準事件的名稱都以“On”開頭。這只是出于方便,編譯器并不強制它。Object Inspector是看屬性類型來決定屬性是否是事件,所有的方法指針屬性都被看作事件,并出現(xiàn)在事件頁中。
�、� 調(diào)用事件
一般說來,最好將調(diào)用集中在事件上。就是說在部件中創(chuàng)建一個虛方法來調(diào)用用戶的事件處理過程和提供任何缺省處理。當(dāng)調(diào)用事件時,應(yīng)考慮以下兩點:
● 必須允許空事件
● 用戶能覆蓋缺省處理
不能允許使空事件處理過程產(chǎn)生錯誤的情況出現(xiàn)。就是說,自定義部件的正常功能不能依賴來自用戶事件處理過程的響應(yīng)。實際上,空事件處理過程應(yīng)當(dāng)產(chǎn)生與無事件處理過程一樣的結(jié)果。
部件不應(yīng)當(dāng)要求用戶以特殊方式使用它們。既然一個空事件處理過程應(yīng)當(dāng)與無事件處理過程一樣動作,那么調(diào)用用戶事件處理過程的代碼應(yīng)當(dāng)象這樣:
if Assigned(OnClick) then OnClick(Self);
{ 執(zhí)行缺省處理 }
而不應(yīng)該有這樣的代碼:
if Assigned(OnClick) then
OnClick(Self)
else
…; { 執(zhí)行缺省處理 }
相關(guān)推薦:2010年9月計算機等級考試試題及答案解析專題北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |