Delphi可以截獲這個消息如下定義消息函數
procedure WMLButtonDown(var Message: TWMLButtonDown);
message WM_LBUTTONDOWN;
在這個消息處理函數中調DOMouseDownDoMouseDown又調 用了MouseDown
在這個函數裡面才到了最重要的部分
該函數是這樣的
procedure TControlMouseDown(Button: TMouseButton;Shift: TShiftState; X Y: Integer);
begin
if Assigned(FOnMouseDown) then FOnMouseDown(Self Button Shift X Y);
end;
而我們先來看看用戶外部是怎麼操作的
他自己定義一個SomeobjMouseDown; 是一個事件處理函數必須和TMouseEvent的形式一樣
Procedure SomeobjMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X Y: Integer);
然後他這樣賦值
someobj
onMouseDown:=SomeobjMouseDown;
當賦值以後類內部其實是通過onMouseDown屬性將SomeobjMouseDown;與FonMouseDwon關聯在一起也就是說MouseDown方法中調用了FOnMouseDown(Self Button Shift X Y);其實就等於調用了Procedure SomeobjMouseDown(Sender: TObject; Button: TMouseButton;Shift: TShiftState; X Y: Integer);
所以用戶就可以在這個自定義的事件方法中寫自己的代碼當事件發生時該類的調度機制就會自動調用這個事件方法啦
也許有人會問為什麼從消息處理函數要調用DoMouseDownDoMouseDown又調用MouseDown然後再調用事件方法呢為什麼不直接在消息處理函數WMLButtonDown中調用呢其實它這樣的做的目的是要進行一些保護判斷以及一些消息附加值的轉換使這些值看起來更加直觀
好了事件就講了這裡不知道你們明白了沒有可能是我的表達能力不行但沒有關系到真正做的時候大家應該能明白了
四組件制作步驟
有了上面的基本概念其實制作簡單組件已經不是什麼問題了而要做真正的組件還需要有一個正確過程我們以後學做組件也會順著這個過程來做主要如下
確定一個祖先類怎麼確定可以根據上面組件的簡要層次結構來確定如果你想做非可視化組件可以從繼承TComponent開始如果想做可視要可視化組件可以從TControl的子類開始
創建組件的單元這個在制作組件時再說不過是在IDE裡面做幾個操作而已
給組件寫屬性方法事件成員等這些在上面己有詳細說明是寫組件的核心部分事實上也是後面實踐的主要內容
測試安裝組件和寫幫助這個內容比較次要後面的例子會講怎麼樣安裝包括單個單元或用包的形式安裝而寫幫助己超出范圍這裡就不說了
關於組件基本概念就到這裡講完了接下來就是實踐了有了上面的知識實踐起來也不是很難很多東西都在上面了而一些高級的特性會在以後慢慢說的
[] [] []
From:http://tw.wingwit.com/Article/program/Delphi/201311/24872.html