首頁 考試吧論壇 Exam8視線 考試商城 網絡課程 模擬考試 考友錄 實用文檔 求職招聘 論文下載 | ||
![]() |
2011中考 | 2011高考 | 2012考研 | 考研培訓 | 在職研 | 自學考試 | 成人高考 | 法律碩士 | MBA考試 MPA考試 | 中科院 |
|
![]() |
四六級 | 職稱英語 | 商務英語 | 公共英語 | 托福 | 雅思 | 專四專八 | 口譯筆譯 | 博思 | GRE GMAT 新概念英語 | 成人英語三級 | 申碩英語 | 攻碩英語 | 職稱日語 | 日語學習 | 法語 | 德語 | 韓語 |
|
![]() |
計算機等級考試 | 軟件水平考試 | 職稱計算機 | 微軟認證 | 思科認證 | Oracle認證 | Linux認證 華為認證 | Java認證 |
|
![]() |
公務員 | 報關員 | 銀行從業資格 | 證券從業資格 | 期貨從業資格 | 司法考試 | 法律顧問 | 導游資格 報檢員 | 教師資格 | 社會工作者 | 外銷員 | 國際商務師 | 跟單員 | 單證員 | 物流師 | 價格鑒證師 人力資源 | 管理咨詢師考試 | 秘書資格 | 心理咨詢師考試 | 出版專業資格 | 廣告師職業水平 駕駛員 | 網絡編輯 |
|
![]() |
衛生資格 | 執業醫師 | 執業藥師 | 執業護士 | |
![]() |
會計從業資格考試(會計證) | 經濟師 | 會計職稱 | 注冊會計師 | 審計師 | 注冊稅務師 注冊資產評估師 | 高級會計師 | ACCA | 統計師 | 精算師 | 理財規劃師 | 國際內審師 |
|
![]() |
一級建造師 | 二級建造師 | 造價工程師 | 造價員 | 咨詢工程師 | 監理工程師 | 安全工程師 質量工程師 | 物業管理師 | 招標師 | 結構工程師 | 建筑師 | 房地產估價師 | 土地估價師 | 巖土師 設備監理師 | 房地產經紀人 | 投資項目管理師 | 土地登記代理人 | 環境影響評價師 | 環保工程師 城市規劃師 | 公路監理師 | 公路造價師 | 安全評價師 | 電氣工程師 | 注冊測繪師 | 注冊計量師 |
|
![]() |
繽紛校園 | 實用文檔 | 英語學習 | 作文大全 | 求職招聘 | 論文下載 | 訪談 | 游戲 |
2. 怎樣實現標準事件
Delphi帶的所有控制繼承了大多數Windows事件,這些就是標準事件。盡管所有這些事件都嵌在標準控制中,但它們缺省是protected,這意味著用戶無法訪問它們,當創建控制時,則可選擇這些事件使用戶可用。將這些標準事件嵌入自定義控制需要考慮如下:
● 什么是標準事件
● 怎樣使事件可見
● 怎樣修改標準事件處理過程
、 什么是標準事件
有兩種標準事件:用于所有控制和只用于標準Windows控制。
最基本的事件都定義在對象TControl中。窗口控制、圖形控制和自定義控制都繼承了這些事件,下面列出用于所有控制的事件:
OnClick OnDragDrop OnEndDrag OnMouseMove
OnDblClick OnDragOver OnMouseDown OnMouseUp
所有標準事件在TControl中都定義了相應的protected動態方法,只是沒有加“On”例如OnClick事件調用名為Click的方法。
標準控制(從TWinControl繼承)具有下列事件:
OnEnter OnKeyDown OnkeyPress OnKeyUp OnExit
正如TControl中的標準事件,窗口控制也有相應protected動態方法。
⑵ 怎樣使事件可見
標準事件的聲明是protected,如果想使用戶在運行時或設計時能訪問它們,就需要將它們重聲明為public和 published。重聲明屬性而不描述它的實現將繼承相同的實現方法,只是改變了訪問級別。例如,創建一個部件并使它的OnClick事件出現在運行時,你可增加下面的部件聲明:
type
TMyControl=class(TCustomControl)
published
property OnClick; { 使OnClick在objectinspector中可見 }
end;
⑶ 怎樣修改標準事件處理過程
如果想修改自定義部件響應某種事件的方法,可以重寫代碼并將其賦給事件。將聯接每個標準事件的方法聲明的protected是出于慎密的考慮。通過,覆蓋實現方法,能修改內部事件處理過程,通過調用繼承的方法,能保持標準事件處理過程。
調用繼承的方法的順序是很重要的。一般首先調用繼承的方法,允許用戶的事件處理過程代碼在你的定制代碼前執行。然而也有在調用繼承的方法之前執行自己的代碼情況出現。
下面是一個覆蓋Click事件的例子:
procedure TMyControl.Click;
begin
inherited Click; { 執行標準處理,包括調用事件處理過程你自己的定制代碼 }
end;
3. 定義自己的事件
定義全新的事件的情況是很少見的。只有當部件的行為完全不同于任何其它事件才需要定義新事件。定義新事件一般包含三個步驟:
● 觸發事件
● 定義處理過程類型
● 聲明事件
● 調用事件
、 觸發事件
定義自己的事件要遇到的第一個關鍵是:當使用標準事件時你不需要考慮由什么觸發事件。對某些事件,問題是顯然的。例如:一個MouseDown事件是在用戶按下鼠標的左鍵時發生,Windows給應用發送WM_LBUTTONDOWN消息。接到消息后,一個部件調用它的MouseDown方法,它依次調用用戶的OnMouseDown事件處理過程代碼。但是有些事件卻不是那么可以描述清楚的。例如:滾行杠有一個OnChange事件,可被各種情況觸發,包括按鍵、鼠標點按或其它按制中的改變。當定義事件時,你必須使各種情況的發生調用正確的事件。
這里有TControl處理WM_LBUTTONDOWN消息的方法,DoMouseDown是私有的實現方法,它提供了一般的處理左、右和中按鈕的方法,并將Windows消息的參數轉換為MouseDown方法的值。
type
TControl = class(TComponent)
private
FOnMouseDown: TMouseEvent;
procedure DoMouseDown(var Message: TWMMouse; Button: TMouseButton;
Shift: TShiftState);
procedure WMLButtonDown(var Message: TWMLButtonDown);
message M_LBUTTONDOWN;
protected
procedure MouseDown(Button: TMouseButton; Shift: TShiftState;
X, Y: Integer); dynamic;
end;
procedure TControl.MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
if Assigned(FOnMouseDown) then
FOnMouseDown(Self, Button, Shift, X, Y); { 調用事件處理過程 }
end;
procedure TControl.DoMouseDown(var Message: TWMMouse; Button: TMouseButton;
Shift: ShiftState);
begin
with Message do
MouseDown(Button, KeysToShiftState(Keys) + Shift, XPos, YPos); { 調用動態方法 }
end;
procedure TControl.WMLButtonDown(var Message: TWMLButtonDown);
begin
inherited; { perform default handling }
if csCaptureMouse in ControlStyle then
MouseCapture := True;
if csClickEvents in ControlStyle then
Include(FControlState, csClicked);
DoMouseDown(Message, mbLeft, []); { 調用常規的mouse-down 方法 }
end;
當兩種事情-狀態變化和用戶交互—發生時,處理機制是相同的,但過程稍微不同。用戶交互事件將總是由Windows消息觸發。狀態改變事件也與Windows消息有關,但它們也可由屬性變化或其它代碼產生。你擁有對自定義事件觸發的完全控制。
相關推薦:2010年9月計算機等級考試試題及答案解析專題北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內蒙古 |