| 導購 | 订阅 | 在线投稿
分享
 
 
當前位置: 王朝網路 >> delphi >> DELPHI中的消息處理機制
 

DELPHI中的消息處理機制

2006-12-16 17:27:52  編輯來源:互聯網  简体版  手機版  評論  字體: ||
 
 
  Delphi 是Borland 公 司 提 供 的 一 種 全 新 的WINDOWS 編 程 開 發 工 具. 由 于 它 采 用 了 具 有 彈性 的 和 可 重 用 的 面 向 對 象Pascal(object-oriented pascal) 語 言, 並 有 強 大 的 數 據 庫 引 擎(BDE), 快 速 的 代 碼 編 譯 器, 同 時 又 提 供 了 衆 多 出 色 的 構 件. 受 到 廣 大 編 程 人 員 的 青 睐. 在 衆 多 的 編 程 語 言( 如VB,PowerBuilder,Powerpoint 等) 中 脫 穎 而 出. 其 中 一 個DELPHI 強 于 其 他 編 程 語 言( 如VB4.0) 的 地 方 就 是 在DELPHI 中 可 自 定 義 消 息, 並 可 直 接 處 理 消 息. 這 對 于 那 些 希 望 編 寫 自 己 的 構 件(Component), 或 者 希 望 截 獲. 過 濾 消 息 的 用 戶 來 說 是 必 不 可 少 的. 因 爲 編 寫 構 件 一 般 要 對 相 應 的 消 息 進 行 處 理. 下 面 就 對Delphi 中 消 息 處 理 機 制 進 行 一 下 介 紹。

  一.DELPHI VCL 中 消 息 的 傳 遞

  Delphi 中 每 一 個VCL(Visual Component Library) 構 件( 如Tbutton,Tedit 等) 都 有 一 內 在 的 消 息 處 理 機 制, 其 基 本 點 就 是 構 件 類 接 收 到 某 些 消 息 並 把 它 們 發 送 給 適 當 的 處 理 方 法, 如 果 沒 有 特 定 的 處 理 方 法, 則 調 用 缺 省 的 消 息 處 理 句 柄。

  其 中mainwndproc 是 定 義 在Twincontrol 類 中 的 一 個 靜 態 方 法, 不 能 被 重 載(Override)。 它 不 直 接 處 理 消 息, 而 是 交 由wndproc 方 法 處 理, 並 爲wndproc 方 法 提 供 一 個 異 常 處 理 模 塊。Mainwndproc 方 法 聲 明 如 下:

  procedure MainWndProc(var Message: TMessage);

  Wndproc 是 在Tcontrol 類 中 定 義 的 一 個 虛 擬 方 法, 由 它 調 用dispatch 方 法 來 進 行 消 息 的 分 配, wndproc 方 法 聲 明 如 下:

  procedure WndProc(var Message: TMessage); virtual;

  dispatch 方 法 是 在Tobject 根 類 中 定 義 的, 其 聲 明 如 下:

  procedure Tobject.dispatch(var Message); 傳 遞 給dispatch 的 消 息 參 數 必 須 是 一 個 記 錄 類 型, 且 這 個 記 錄 中 第 一 個 入 點 必 須 是 一 個cardinal 類 型 的 域(field), 它 包 含 了 要 分 配 的 消 息 的 消 息 號 碼. 例 如:

  type

  Tmessage=record

  Msg:cardinal;

  wparam:word;

  lparam:longint; .

  result:longint;

  end;

  而Dispatch 方 法 會 根 據 消 息 號 碼 調 用 構 件 的 最 後 代 類 中 處 理 此 消 息 的 句 柄 方 法. 如 果 此 構 件 和 它 的 祖 先 類 中 都 沒 有 對 應 此 消 息 的 處 理 句 柄,Dispatch 方 法 便 會 調 用Defaulthandler 方 法.Defaulthandler 方 法 是 定

  義 于Tobject 中 的 虛 擬 方 法, 其 聲 明 如 下:

  procedure Defaulthandler(var Message);virtual;

  Tobject 類 中 的Defaulthandler 方 法 只 是 實 現 簡 單 的 返 回 而 不 對 消 息 進 行 任 何 的 處 理. 我 們 可 以 通 過 對 此 虛 擬 方 法 的 重 載, 在 子 類 中 實 現 對 消 息 的 缺 省 處 理. 對 于VCL 中 的 構 件 而 言, 其Defaulthandler 方 法 會 啓動 windows API 函 數Defwindowproc 對 消 息 進 行 處 理.

  二.DELPHI 中 的 消 息 處 理 句 柄

  在DELPHI 中 用 戶 可 以 自 定 義 消 息 及 消 息 處 理 句 柄. 消 息 處 理 句 柄 的 定 義 有 如 下 幾 個 原 則:

  1.消 息 處 理 句 柄 方 法 必 須 是 一 個 過 程, 且 只 能 傳 遞 一 個Tmessage 型 變 量 參 數.

  2.方 法 聲 明 後 要 有 一 個message 命 令, 後 接 一 個 在0 到32767 之 間 的 消 息 標 號( 整 型 常 數).

  3.消 息 處 理 句 柄 方 法 不 需 要 用override 命 令 來 顯 式 指 明 重 載 祖 先 的 一 個 消 息 處 理 句 柄, 另 外 它 一 般 聲 明 在 構 件 的protected 或private 區.

  4.在 消 息 處 理 句 柄 中 一 般 先 是 用 戶 自 己 對 消 息 的 處 理, 最 後 用inherited 命 令 調 用 祖 先 類 中 對 應 此 消 息 的 處 理 句 柄( 有 些 情 況 下 可 能 正 相 反).

  由 于 可 能 對 祖 先 類 中 對 此 消 息 的 處 理 句 柄 的 名 字 和 參 數 類 型 不 清 楚, 而 調 用 命 令inherited 可 以 避 免 此 麻 煩, 同 樣 如 果 祖 先 類 中 沒 有 對 應 此 消 息 的 處 理 句 柄,inherited 就 會 自 動 調 用Defaulthandler 方 法.( 當 然 如 果 要 屏 蔽 掉 此 消 息, 就 不 用inherited 命 令 了)。

  消 息 處 理 句 柄 方 法 聲 明 爲:

  procedure Mymsgmethod(var message:Tmessage); message Msgtype;

  同 樣 用 戶 也 可 以 定 義 自 己 的 消 息, 用 戶 自 定 義 消 息 應 從WM_USER 開 始.

  自 定 義 消 息 及 消 息 處 理 句 柄 舉 例 如 下:

  const my_paint=Wm_user+1;

  type

  Tmypaint=record

  msgid:cardinal;

  msize:word;

  mcolor:longint;

  msgresult:longint;

  end;

  type

  Tmycontrol=class(TCustomControl)

  protected

  procedure change(var message:Tmypaint); message my_paint;

  .....

  end;

  ......

  procedure Tmycontrol.change(var message:Tmypaint);

  begin

  size:=message.msize; { 設 置Tmybutton 尺 寸 屬 性}

  color:=message.mcolor; { 設 置Tmybutton 顔 色 屬 性}

  {do something else}

  inherited; { 交 由Tcustomcontrol 處 理}

  end;
 
 
 
上一篇《爲Delphi程序添加自動滾動的工具欄》
下一篇《第一講 Delphi操作數據庫基礎(上)》
 
 
 
 
 
 
日版寵物情人插曲《Winding Road》歌詞

日版寵物情人2017的插曲,很帶節奏感,日語的,女生唱的。 最後聽見是在第8集的時候女主手割傷了,然後男主用嘴幫她吸了一下,插曲就出來了。 歌手:Def...

兄弟共妻,我成了他們夜裏的美食

老鍾家的兩個兒子很特別,就是跟其他的人不太一樣,魔一般的執著。兄弟倆都到了要結婚的年齡了,不管自家老爹怎麽磨破嘴皮子,兄弟倆說不娶就不娶,老父母爲兄弟兩操碎了心...

如何磨出破洞牛仔褲?牛仔褲怎麽剪破洞?

把牛仔褲磨出有線的破洞 1、具體工具就是磨腳石,下面墊一個硬物,然後用磨腳石一直磨一直磨,到把那塊磨薄了,用手撕開就好了。出來的洞啊很自然的。需要貓須的話調幾...

我就是掃描下圖得到了敬業福和愛國福

先來看下敬業福和愛國福 今年春節,支付寶再次推出了“五福紅包”活動,表示要“把欠大家的敬業福都還給大家”。 今天該活動正式啓動,和去年一樣,需要收集“五福”...

冰箱異味産生的原因和臭味去除的方法

有時候我們打開冰箱就會聞到一股異味,冰箱裏的這種異味是因爲一些物質發出的氣味的混合體,聞起來讓人惡心。 産生這些異味的主要原因有以下幾點。 1、很多人有這種習...

《極品家丁》1-31集大結局分集劇情介紹

簡介 《極品家丁》講述了現代白領林晚榮無意回到古代金陵,並追隨蕭二小姐化名“林三”進入蕭府,不料卻陰差陽錯上演了一出低級家丁拼搏上位的“林三升職記”。...

李溪芮《極品家丁》片尾曲《你就是我最愛的寶寶》歌詞

你就是我最愛的寶寶 - 李溪芮 (電視劇《極品家丁》片尾曲) 作詞:常馨內 作曲:常馨內 你的眉 又鬼馬的挑 你的嘴 又壞壞的笑 上一秒吵鬧 下...

烏梅的功效與作用以及烏梅的食用禁忌有哪些?

烏梅,又稱春梅,中醫認爲,烏梅味酸,性溫,無毒,具有安心、除熱、下氣、祛痰、止渴調中、殺蟲的功效,治肢體痛、肺痨病。烏梅泡水喝能治傷寒煩熱、止吐瀉,與幹姜一起制...

什麽是脂肪粒?如何消除臉部脂肪粒?

什麽是脂肪粒 在我們的臉上總會長一個個像脂肪的小顆粒,弄也弄不掉,而且顔色還是白白的。它既不是粉刺也不是其他的任何痘痘,它就是脂肪粒。 脂肪粒雖然也是由油脂...

網絡安全治理:國家安全保障的主要方向是打擊犯罪,而不是處置和懲罰受害者

來源:中國青年報 新的攻擊方法不斷湧現,黑客幾乎永遠占據網絡攻擊的上風,我們不可能通過技術手段杜絕網絡攻擊。國家安全保障的主要方向是打擊犯罪,而不是處置和懲罰...

河南夫妻在溫嶺網絡直播“造人”內容涉黃被刑事拘留

夫妻網絡直播“造人”爆紅   1月9日,溫嶺城北派出所接到南京警方的協查通告,他們近期打掉了一個涉黃直播APP平台。而根據掌握的線索,其中有一對涉案的夫妻主播...

如何防止牆紙老化?牆紙變舊變黃怎麽辦?

如何防止牆紙老化? (1)選擇透氣性好的牆紙 市場上牆紙的材質分無紡布的、木纖維的、PVC的、玻璃纖維基材的、布面的等,相對而言,PVC材質的牆紙最不透氣...

鮮肌之謎非日本生産VS鮮肌之謎假日貨是謠言

觀點一:破日本銷售量的“鮮肌之謎” 非日本生産 近一段時間,淘寶上架了一款名爲“鮮肌之謎的” 鲑魚卵巢美容液,號稱是最近日本的一款推出的全新護膚品,産品本身所...

中國最美古詩詞精選摘抄

系腰裙(北宋詞人 張先) 惜霜蟾照夜雲天,朦胧影、畫勾闌。人情縱似長情月,算一年年。又能得、幾番圓。 欲寄西江題葉字,流不到、五亭前。東池始有荷新綠,尚小如...

關于女人的經典語句

關于女人的經典語句1、【做一個獨立的女人】 思想獨立:有主見、有自己的人生觀、價值觀。有上進心,永遠不放棄自己的理想,做一份自己喜愛的事業,擁有快樂和成就...

未來我們可以和性愛機器人結婚嗎?

你想體驗機器人性愛嗎?你想和性愛機器人結婚嗎?如果你想,機器人有拒絕你的權利嗎? 近日,第二屆“國際人類-機器人性愛研討會”大會在倫敦金史密斯大學落下帷幕。而...

全球最變態的十個地方

10.土耳其地下洞穴城市 變態指數:★★☆☆☆ 這是土耳其卡帕多西亞的一個著名景點,傳說是當年基督教徒們爲了躲避戰爭而在此修建。裏面曾住著20000人,...

科學家稱,人類死亡後意識將在另外一個宇宙中繼續存活

據英國《每日快報》報道,一位科學家兼理論家Robert Lanza博士宣稱,世界上並不存在人類死亡,死亡的只是身體。他認爲我們的意識借助我們體內的能量生存,而且...

《屏裏狐》片頭曲《我愛狐狸精》歌詞是什麽?

《我愛狐狸精》 - 劉馨棋   (電視劇《屏裏狐》主題曲)   作詞:金十三&李旦   作曲:劉嘉   狐狸精 狐狸仙   千年修...

 
 
 
Delphi 是Borland 公 司 提 供 的 一 種 全 新 的WINDOWS 編 程 開 發 工 具. 由 于 它 采 用 了 具 有 彈性 的 和 可 重 用 的 面 向 對 象Pascal(object-oriented pascal) 語 言, 並 有 強 大 的 數 據 庫 引 擎(BDE), 快 速 的 代 碼 編 譯 器, 同 時 又 提 供 了 衆 多 出 色 的 構 件. 受 到 廣 大 編 程 人 員 的 青 睐. 在 衆 多 的 編 程 語 言( 如VB,PowerBuilder,Powerpoint 等) 中 脫 穎 而 出. 其 中 一 個DELPHI 強 于 其 他 編 程 語 言( 如VB4.0) 的 地 方 就 是 在DELPHI 中 可 自 定 義 消 息, 並 可 直 接 處 理 消 息. 這 對 于 那 些 希 望 編 寫 自 己 的 構 件(Component), 或 者 希 望 截 獲. 過 濾 消 息 的 用 戶 來 說 是 必 不 可 少 的. 因 爲 編 寫 構 件 一 般 要 對 相 應 的 消 息 進 行 處 理. 下 面 就 對Delphi 中 消 息 處 理 機 制 進 行 一 下 介 紹。 一.DELPHI VCL 中 消 息 的 傳 遞   Delphi 中 每 一 個VCL(Visual Component Library) 構 件( 如Tbutton,Tedit 等) 都 有 一 內 在 的 消 息 處 理 機 制, 其 基 本 點 就 是 構 件 類 接 收 到 某 些 消 息 並 把 它 們 發 送 給 適 當 的 處 理 方 法, 如 果 沒 有 特 定 的 處 理 方 法, 則 調 用 缺 省 的 消 息 處 理 句 柄。   其 中mainwndproc 是 定 義 在Twincontrol 類 中 的 一 個 靜 態 方 法, 不 能 被 重 載(Override)。 它 不 直 接 處 理 消 息, 而 是 交 由wndproc 方 法 處 理, 並 爲wndproc 方 法 提 供 一 個 異 常 處 理 模 塊。Mainwndproc 方 法 聲 明 如 下:   procedure MainWndProc(var Message: TMessage); Wndproc 是 在Tcontrol 類 中 定 義 的 一 個 虛 擬 方 法, 由 它 調 用dispatch 方 法 來 進 行 消 息 的 分 配, wndproc 方 法 聲 明 如 下:   procedure WndProc(var Message: TMessage); virtual; dispatch 方 法 是 在Tobject 根 類 中 定 義 的, 其 聲 明 如 下: procedure Tobject.dispatch(var Message); 傳 遞 給dispatch 的 消 息 參 數 必 須 是 一 個 記 錄 類 型, 且 這 個 記 錄 中 第 一 個 入 點 必 須 是 一 個cardinal 類 型 的 域(field), 它 包 含 了 要 分 配 的 消 息 的 消 息 號 碼. 例 如:   type    Tmessage=record    Msg:cardinal;    wparam:word;    lparam:longint; .    result:longint;   end; 而Dispatch 方 法 會 根 據 消 息 號 碼 調 用 構 件 的 最 後 代 類 中 處 理 此 消 息 的 句 柄 方 法. 如 果 此 構 件 和 它 的 祖 先 類 中 都 沒 有 對 應 此 消 息 的 處 理 句 柄,Dispatch 方 法 便 會 調 用Defaulthandler 方 法.Defaulthandler 方 法 是 定 義 于Tobject 中 的 虛 擬 方 法, 其 聲 明 如 下:   procedure Defaulthandler(var Message);virtual; Tobject 類 中 的Defaulthandler 方 法 只 是 實 現 簡 單 的 返 回 而 不 對 消 息 進 行 任 何 的 處 理. 我 們 可 以 通 過 對 此 虛 擬 方 法 的 重 載, 在 子 類 中 實 現 對 消 息 的 缺 省 處 理. 對 于VCL 中 的 構 件 而 言, 其Defaulthandler 方 法 會 啓動 windows API 函 數Defwindowproc 對 消 息 進 行 處 理.   二.DELPHI 中 的 消 息 處 理 句 柄   在DELPHI 中 用 戶 可 以 自 定 義 消 息 及 消 息 處 理 句 柄. 消 息 處 理 句 柄 的 定 義 有 如 下 幾 個 原 則:   1.消 息 處 理 句 柄 方 法 必 須 是 一 個 過 程, 且 只 能 傳 遞 一 個Tmessage 型 變 量 參 數.   2.方 法 聲 明 後 要 有 一 個message 命 令, 後 接 一 個 在0 到32767 之 間 的 消 息 標 號( 整 型 常 數).   3.消 息 處 理 句 柄 方 法 不 需 要 用override 命 令 來 顯 式 指 明 重 載 祖 先 的 一 個 消 息 處 理 句 柄, 另 外 它 一 般 聲 明 在 構 件 的protected 或private 區.   4.在 消 息 處 理 句 柄 中 一 般 先 是 用 戶 自 己 對 消 息 的 處 理, 最 後 用inherited 命 令 調 用 祖 先 類 中 對 應 此 消 息 的 處 理 句 柄( 有 些 情 況 下 可 能 正 相 反). 由 于 可 能 對 祖 先 類 中 對 此 消 息 的 處 理 句 柄 的 名 字 和 參 數 類 型 不 清 楚, 而 調 用 命 令inherited 可 以 避 免 此 麻 煩, 同 樣 如 果 祖 先 類 中 沒 有 對 應 此 消 息 的 處 理 句 柄,inherited 就 會 自 動 調 用Defaulthandler 方 法.( 當 然 如 果 要 屏 蔽 掉 此 消 息, 就 不 用inherited 命 令 了)。   消 息 處 理 句 柄 方 法 聲 明 爲:   procedure Mymsgmethod(var message:Tmessage); message Msgtype; 同 樣 用 戶 也 可 以 定 義 自 己 的 消 息, 用 戶 自 定 義 消 息 應 從WM_USER 開 始. 自 定 義 消 息 及 消 息 處 理 句 柄 舉 例 如 下:   const my_paint=Wm_user+1;   type    Tmypaint=record    msgid:cardinal;    msize:word;    mcolor:longint;    msgresult:longint;   end;   type    Tmycontrol=class(TCustomControl)    protected    procedure change(var message:Tmypaint); message my_paint;     .....    end;    ......   procedure Tmycontrol.change(var message:Tmypaint);   begin    size:=message.msize; { 設 置Tmybutton 尺 寸 屬 性}    color:=message.mcolor; { 設 置Tmybutton 顔 色 屬 性}    {do something else}    inherited; { 交 由Tcustomcontrol 處 理}   end;
󰈣󰈤
 
 
 
  免責聲明:本文僅代表作者個人觀點,與王朝網路無關。王朝網路登載此文出於傳遞更多信息之目的,並不意味著贊同其觀點或證實其描述,其原創性以及文中陳述文字和內容未經本站證實,對本文以及其中全部或者部分內容、文字的真實性、完整性、及時性本站不作任何保證或承諾,請讀者僅作參考,並請自行核實相關內容。
 
 
陽光靓麗的模特兒(8)
陽光靓麗的模特兒(7)
陽光靓麗的模特兒(6)
陽光靓麗的模特兒(5)
秋-印象
德慶盤龍峽 一
松江印象之三
雲之南(寬幅)
 
>>返回首頁<<
 
 
 
 熱帖排行
 
 
 
 
© 2005- 王朝網路 版權所有