製作元件時,如何知道要用什麼MESSAGE |
答題得分者是:Justmade
|
skurama
中階會員 發表:88 回覆:127 積分:73 註冊:2002-07-22 發送簡訊給我 |
之前有人說,再做VCL元件時,
不要直接取代原本元件的事件
如:
procedure ?.NewOnClick(Sender : TComponent);
begin
//.......
end; Button1.onclick := NewOnClick 可是我要怎麼知道onClick是哪一個Win Message呢?
之前看過Delphi Club的DOS MOVE元件中有宣告過
procedure CMMouseEnter(var Message: TMessage); message CM_MOUSEENTER;
procedure CMMouseLeave(var Message: TMessage); message CM_MOUSELEAVE;
這兩個Message,大概知道是當滑鼠指到元件與離開時。
自利用這兩個程式去產生新的OnIn 和 OnOUt事件,
可是要如何知道宣告的訊息為何
是否如下
procedure 自訂(var Message: TMessage); message 要的訊息;
^^^^^^^^^^^^^^^^^^^ 固定如此寫 因為現在我想直按寫一個只能打特定字母的TEdit元件,
可是不想直接把 TEdit.onKeyDown 的事件給取代 所以想問,有沒有訊息的參考文件或列表!! ----------------
初出芧房程設師,
左鍵右鼠寫程式,
日扣夜寫眼框溼,
望能早成系分師。
----------------
------
---------------- 初出芧房程設師, 左鍵右鼠寫程式, 日扣夜寫眼框溼, 望能早成系分師。 ---------------- |
Justmade
版主 發表:94 回覆:1934 積分:2030 註冊:2003-03-12 發送簡訊給我 |
建議你在 Delphi 源程式遊歷一下,這樣對你做自定元件幫肋很大的。 1. 開一個新專案,放進一個 TEdit
2. 按F12進到編程畫面,在 Edit1: TEdit;一行,按下Ctrl並安下 TEdit 跳到 TEdit 的宣告
3. 大約看過 TEdit 的宣告後,Ctrl-TCustomEdit 跳到TCustomEdit 的宣告
4. 在 TCustomEdit 找不到有關 KeyDown 的 Message 宣告,便跳到 TWinControl
5. 看到
procedure WMKeyDown(var Message: TWMKeyDown); message WM_KEYDOWN;
看看是甚樣 implement 的
6. 原來是呼叫 DoKeyDown ,再看看 DoKeyDown
7. DoKeyDown 處理了一些項目如 FormPreview 後是呼叫 KeyDown 的
8. 在 KeyDown 會看看使用者有沒有設定 onKeyDown,若有的話便執行。 若你不想使用 onKeyDown 事件來處理你的需要,你可以承繼TEdit元件然後自定 KeyDown 程序,那樣便不需要自行去處理其他的項目如 FormPreview 了。 當然,你亦可直接攔截 Message 但這樣做所有有關該 Message 的處理你都要另行安排否則便與一般作法不符了。如你自行攔截 WM_KEYDOWN 但卻沒處理 FormPreview 的話, FormPreview 在你的元件便會失效了。
|
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |