亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Delphi > 正文

DELPHI中的消息處理機(jī)制

2019-11-18 18:50:57
字體:
供稿:網(wǎng)友
Delphi是Borland公司提供的一種全新的WINDOWS編程開發(fā)工具.由于它采用了具有彈性的和可重用的面向?qū)ο驪ascal(object-oriented pascal)語言,并有強(qiáng)大的數(shù)據(jù)庫引擎(BDE), 快速的代碼編譯器, 同時(shí)又提供了眾多出色的構(gòu)件.受到廣大編程人員的青 睞. 在眾 多 的 編 程 語 言( 如VB,PowerBuilder,Powerpoint 等) 中 脫 穎 而 出.
  其中一個(gè)DELPHI強(qiáng)于其他編程語言(如VB4.0)的地方就是在DELPHI中可自定義消息, 并可直接處理消息. 這對于那些希望編寫自己 的 構(gòu) 件(Component), 或 者 希 望 截 獲. 過 濾 消 息 的 用 戶 來 說 是 必 不 可 少 的. 因 為編 寫 構(gòu) 件 一 般 要 對相應(yīng)的消息進(jìn)行處理.下面就對Delphi 中消息處理機(jī)制進(jìn)行一下介紹。

一.DELPHI VCL中消息的傳遞
  Delphi中每一個(gè)VCL(Visual Component Library)構(gòu)件( 如Tbutton,Tedit等)都有一內(nèi)在的消息處理機(jī)制,其基本點(diǎn)就是構(gòu)件類 接收到某些消息并把它們發(fā)送給適當(dāng)?shù)奶幚矸椒?如果沒有特定的處理方法,則調(diào)用缺省的消息處理句柄。其中mainwndPRoc是定義在Twincontrol類中的一個(gè)靜態(tài)方法,不能被重載(Override)。它不直接處理 消 息, 而 是 交 由wndproc 方 法 處 理, 并 為wndproc方法提供一個(gè)異常處理模塊。Mainwndproc方法聲明如下:

procedure MainWndProc(var Message: TMessage);

Wndproc是在Tcontrol類中定義的一個(gè)虛擬方法,由它調(diào)用dispatch方法來進(jìn)行消息的分配, wndproc 方 法 聲 明 如 下:

procedure WndProc(var Message: TMessage); virtual;

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

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

type

Tmessage=record

Msg:cardinal;

wparam:Word;

lparam:longint; .

result:longint;

end;
  而Dispatch 方 法 會(huì) 根據(jù) 消 息 號 碼 調(diào) 用 構(gòu) 件 的 最 后 代 類 中 處 理 此 消 息 的 句 柄 方法. 如 果 此 構(gòu) 件 和 它 的 祖 先 類 中 都 沒 有 對 應(yīng) 此 消 息 的 處 理句 柄,Dispatch 方 法 便 會(huì) 調(diào) 用Defaulthandler 方 法.Defaulthandler 方法 是 定 義 于Tobject 中 的 虛 擬 方 法, 其 聲 明 如 下:

procedure Defaulthandler(var Message);virtual;

  Tobject 類 中 的Defaulthandler 方 法 只 是 實(shí) 現(xiàn) 簡 單 的 返 回 而 不 對 消 息 進(jìn) 行 任 何 的 處 理. 我們 可 以 通 過 對 此 虛 擬 方 法 的 重 載, 在 子 類 中 實(shí) 現(xiàn) 對 消 息 的缺 省 處 理. 對 于VCL 中 的 構(gòu) 件 而 言, 其Defaulthandler 方 法 會(huì) 啟 動(dòng) windows API 函 數(shù)Defwindowproc 對 消 息 進(jìn) 行 處 理.

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

  消 息 處 理 句 柄 方 法 必 須 是 一 個(gè) 過 程, 且 只 能 傳 遞 一 個(gè)Tmessage 型 變 量 參 數(shù).
  方 法 聲 明 后 要 有 一 個(gè)message 命 令, 后 接 一 個(gè) 在0 到32767 之 間的 消 息 標(biāo) 號( 整 型 常 數(shù)).
  消 息 處 理 句 柄 方 法 不 需 要 用override 命 令 來 顯 式 指 明 重 載祖 先 的 一 個(gè) 消 息 處 理 句 柄, 另 外 它 一 般 聲 明 在 構(gòu) 件 的protected 或private 區(qū).
  在 消 息 處 理 句 柄 中 一 般 先 是 用 戶 自 己 對 消 息 的 處 理, 最 后用inherited 命 令 調(diào) 用 祖 先 類 中 對 應(yīng) 此 消 息 的 處 理 句 柄( 有些 情 況 下 可 能 正 相 反). 由 于 可 能 對 祖 先 類 中 對 此 消 息 的處 理 句 柄 的 名 字 和 參 數(shù) 類 型 不 清 楚, 而 調(diào) 用 命 令inherited 可以 避 免 此 麻 煩, 同 樣 如 果 祖 先 類 中 沒 有 對 應(yīng) 此 消 息 的 處 理句 柄,inherited 就 會(huì) 自 動(dòng) 調(diào) 用Defaulthandler 方 法.( 當(dāng) 然 如 果 要屏 蔽 掉 此 消 息, 就 不 用inherited 命 令 了)。
消 息 處 理 句 柄 方 法 聲 明 為:
procedure Mymsgmethod(var message:Tmessage); message Msgtype;

同 樣 用 戶 也 可 以定 義 自 己 的 消 息, 用 戶 自 定 義 消 息 應(yīng) 從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; { 設(shè) 置Tmybutton 尺 寸 屬 性}

color:=message.mcolor; { 設(shè) 置Tmybutton 顏 色 屬 性}

{do something else}

inherited; { 交 由Tcustomcontrol 處 理}

end;
三. 過 濾 消 息
  過 濾 消 息 又 稱 消 息陷 阱。 在 一 定 情 況 下, 用 戶 可 能 需 要 屏 蔽 某 些 消 息. 或 者截 獲 某 些 消 息 進(jìn) 行 處 理。 由 以 上 介 紹 可 以 看 出 過 濾 消 息一 般 有 三 種 途 徑:(1). 重 載 構(gòu) 件 繼 承 的 虛 擬 方 法wndproc. (2). 針 對 某 消 息 編 寫 消 息 處 理 句 柄. (3). 重 載 構(gòu) 件 繼 承 的 虛 擬方 法Defhandler, 在 其 中 對 消 息 進(jìn) 行 處 理。 其 中 常 用 的 方 法是 方 法(2), 在 上 節(jié) 中 已 介 紹 過 了, 方 法(1) 與 方 法(3) 相 似,這 里 只 簡 單 介 紹 一 下 方 法(1)。

重 載 虛 擬 方 法wndproc 的 一 般 過 程 如 下:

procedure Tmyobject.wndproc(var message:Tmessage);

begin

{... 判 斷 此 消 息 是 否 該 處 理..}

inherited wndproc(message);

{ 未 處 理 的 消 息 交 由 父 輩wndproc 方 法 處 理}

end;
  由 此 可 以 看 出 在wndproc 方 法 中 處 理 消 息 的 優(yōu) 勢 是 可 以 過 濾 整 個(gè) 范 圍 內(nèi) 的 消 息,而 不 必 為 每 個(gè) 消 息 指 定 一 個(gè) 處 理 句 柄, 事 實(shí) 上Tcontrol 構(gòu) 件中 就 是 利 用 它 來 過 濾 并 處 理 所 有 的 鼠 標(biāo) 消 息 的( 從WM_mousefirst 到WM_mouselast, 如 下 代 碼 示). 同 樣 利 用 它 也 可 以 阻 止 某 些 消息 被 發(fā) 送 給 處 理 句 柄。

procedure TControl.WndProc(var Message: TMessage);

begin

if (Message.Msg>=WM_MOUSEFIRST) and

(Message.Msg <= WM_MOUSELAST)

then

if Dragging then { 處 理 拖 曳 事 件}

DragMouseMsg(TWMMouse(Message))

else

... { 處 理 其 他 鼠 標(biāo) 消 息}

end;

Dispatch(Message);

{ 否 則 正 常 發(fā) 送 消 息}

end;
下 例 為 一 簡 單 的 自定 義 構(gòu) 件 例 子 :

  Tmyedit 類 是 從Tedit 類 派 生 出 的 一 個(gè) 新 類, 它 的 特 點(diǎn) 是 在 運(yùn) 行 中 不 能 獲 得 焦點(diǎn), 不 能 由 鍵 盤 輸 入( 有 點(diǎn) 類 似Tlabel 構(gòu) 件). 我 們 可 在 其wndproc 方 法 中 過 濾 出WM_setfocus,WM_mousemove 消 息 并 進(jìn) 行 處 理 來 達(dá) 到上 述 要 求, 源 程 序 如 下:

unit myedit;

interface

uses

Windows, Messages, SysUtils, Classes, Graphics,

Controls, Forms, Dialogs,

StdCtrls;

type

Tmyedit = class(TEdit)

private

{ Private declarations }

protected

{ Protected declarations }

{ other fields and methods}

procedure wndproc(var message:Tmessage);override;

public

{ Public declarations }

published

{ Published declarations }

end;

procedure Register;

implementation

procedure Register;

begin

RegisterComponents('Samples', [Tmyedit]);

end;

procedure Tmyedit.wndproc(var message:tmessage);

begin

if message.msg=wm_mousemove then

begin

cursor:=crarrow;

{ 設(shè) 置 光 標(biāo) 為crarrow, 而 不 是 缺 省 的crBeam 光 標(biāo)}

exit;

end;

if message.msg=wm_SetFocus then exit;

{屏蔽掉WM_setfocus消息,不讓Tmyedit控件獲得輸入焦點(diǎn)}

inherited wndproc(message);

{其他消息交父輩wndproc處理}

end;

end.
您可以將Tmyedit 加到Component Palette中檢驗(yàn)其性能。

  由以上介紹可以看出,只有清楚了Delphi VCL中的消息處理機(jī)制, 掌握好處理各種消息的方法和時(shí)機(jī)(必要時(shí)要借助各種工具, 如winsight32,spy 等),并結(jié)合OOP語言的特點(diǎn), 我們才可能編出高質(zhì)量的構(gòu)件。 這當(dāng)然要靠讀者在實(shí)踐中不斷摸索,積累經(jīng)驗(yàn).

上一篇:使用Delphi獲取系列信息

下一篇:Delphi的TRegistry注冊表類方法詳解

發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
學(xué)習(xí)交流
熱門圖片

新聞熱點(diǎn)

疑難解答

圖片精選

網(wǎng)友關(guān)注

欧美成人中文字幕| 日韩欧美高清在线视频| 日韩少妇一区二区| 欧美日韩三级一区二区| 超薄肉色丝袜脚交一区二区| 亚洲国产日韩在线观看| 蜜臀av色欲a片无码精品一区| 亚洲丶国产丶欧美一区二区三区| 欧美一级二区| 日韩中文字幕组| 99ri国产在线| 国产盗摄视频一区二区三区| 国产亚洲精久久久久久无码77777| 免费毛片视频网站| 男人天堂视频在线| 一区二区亚洲欧洲国产日韩| 欧美丰满熟妇bbb久久久| 欧美日韩免费观看一区=区三区| av白虎一区| 国产美女情趣调教h一区二区| 国产一区二区三区在线观看免费| 无码人妻一区二区三区免费n鬼沢| 日本最黄一级片免费在线| 日日噜噜噜夜夜爽爽狠狠| 激情综合久久| 欧美丰满少妇xxxxx高潮对白| 一区二区三区在线高清| 亚洲色成人www永久在线观看| 精品人妻在线播放| 99re这里只有精品在线| 97超碰青青草| 日韩中文在线视频| 欧美日韩人人澡狠狠躁视频| 久久中文字幕在线视频| 国产精品h视频| 国产精品欧美日韩一区二区| 男操女在线观看| 亚洲精品一区二三区不卡| 成人丁香基地| 一二三区精品福利视频| 国产乱在线观看视频| 91福利在线视频| 日韩三区视频| 最新eeuss影院在线观看| 乡村艳史在线观看| 91啦中文成人| 欧洲一区在线电影| 精品人妻一区二区三区含羞草| 久久裸体视频| av2014天堂网| 亚洲制服丝袜在线| 性の欲びの女javhd| 久久精品夜色噜噜亚洲aⅴ| 九九爱在线视频观看免费视频| 日韩av免费在线看| 国产免费麻豆视频| 在线观看毛片网站| av资源亚洲| 日韩欧美高清在线视频| 成年人网站av| 国产精品毛片久久久久久| 一区二区三区回区在观看免费视频| 欧美片第一页| 国产精品一区二区免费福利视频| 88xx成人免费观看视频库| 先锋影音男人站你懂得| 性高潮久久久久久久久| 国产成人的电影在线观看| 999一区二区三区| 伊人伊人伊人久久| 一区二区中文字幕在线| 国产麻豆精品视频一区二区| 国产中文欧美精品| 欧美日韩中文字幕在线视频| 中国人与牲禽动交精品| 午夜欧美大尺度福利影院在线看| 中文在线日韩| 国产免费无遮挡| 国产精品资源站在线| 好男人在线视频www| 国产欧美欧洲在线观看| 极品少妇一区二区三区精品视频| 亚洲一二三四在线| 日韩在线观看a| 天天av导航| 群体交乱之放荡娇妻一区二区| 国内偷自视频区视频综合| 欧美人妖视频| 国内免费久久久久久久久久久| 成人蜜桃视频网站网址| 亚洲午夜精品久久久中文影院av| 91久久国产综合| 国产亚洲欧美日韩俺去了| 一区二区三区四区在线视频| 粉嫩精品导航导航| 欧美成人禁片在线观看网址| 久久久久综合| 国产成人一级片| 亚洲中文字幕无码一区| 中文字幕第4页| 欧美本精品男人aⅴ天堂| 51视频国产精品一区二区| 国产高清自拍视频在线观看| 日本三级电影网站| 亚洲日本欧美天堂| 熟女俱乐部一区二区| 视频一区二区在线播放| 9797在线看片亚洲精品| 最新国产乱人伦偷精品免费网站| 免费一级黄色大片| 久久成年人网站| 精品视频久久久| 18以下岁禁止1000部免费| 欧美激情亚洲自拍| 91精品国产丝袜白色高跟鞋| 欧美xxxx吸乳| 激情欧美日韩一区二区| 18岁成人毛片| 少妇高潮流白浆| 99这里只有久久精品视频| 国产黑丝在线观看| 在线观看av网| 精品一区免费| 国产香蕉视频在线| 一区二区三区小说| 亚洲毛片在线免费观看| 日韩专区第一页| 久久亚洲精精品中文字幕早川悠里| 欧美激情精品在线| 午夜精品久久久久久久99黑人| 精品爽片免费看久久| 97精品国产91久久久久久| 亚洲av成人精品一区二区三区| 激情在线观看视频| 中文字幕欧美日韩一区| www.亚洲成人网| 水蜜桃色314在线观看| 亚洲国产精品无码观看久久| 亚洲mv在线看| 欧美一级视频免费在线观看| 色综合影院在线| 午夜在线视频观看| 热re99久久精品国产99热| 欧美被日视频| 国产小视频在线免费观看| 一区二区视频免费看| 一色屋精品亚洲香蕉网站| 99国产精品久| 亚洲色图都市激情| 夜夜夜操操操| 日韩一区二区在线播放| 一级片视频在线观看| 亚洲精品在线电影| 日本三级久久| 国产福利在线免费观看| 精品久久久久中文字幕小说| 国产又白又嫩又紧又爽18p| h视频免费网站| 一区二区在线观看网站| 91精品国产91久久久久久一区二区| 欧美三级黄色大片| 青青操视频在线播放| 日韩精品亚洲人成在线观看| 精品嫩模一区二区三区| 91免费看片在线| 日韩免费一区二区| 久久久综合香蕉尹人综合网| 亚洲精品影院在线观看| 午夜成人免费电影| 国产高清一区日本| 亚洲国产欧美日韩另类综合| 蜜臀av在线播放一区二区三区| а√最新版在线天堂| 在线免费看黄视频| 91久久国产综合久久91| 99这里只有精品视频| 亚洲妇女无套内射精| 成人午夜福利视频| 色综合一本到久久亚洲91| 国产成人精品视| 欧美有码在线| 亚洲高清av在线| 毛片基地一级大毛片| 老头吃奶性行交视频| 青青一区二区| 久久91精品视频| 人妻中文字幕一区二区三区| 亚洲成在人线免费| 盗摄系列偷拍视频精品tp| 精品1区2区3区4区| xxx成人少妇69| 69欧美性猛交| 欧美性xxxxx极品少妇| 欧美天堂一区二区三区| 99久久99久久精品国产片果冻| 美日韩一级片在线观看| 亚洲成人一区在线| 成人免费av片| 日本精品免费观看| 亚洲美女中文字幕| 四季av一区二区三区免费观看| 日本成人三级电影| 呦视频在线一区二区三区| 天堂精品中文字幕在线| 男人插入女人视频| 不卡免费追剧大全电视剧网站| 亚洲小说春色综合另类电影| 手机在线理论电影| 538在线视频观看| 日韩高清a**址| 日本电影二区| 手机看片福利永久| 欧美亚洲爱爱另类综合| 亚洲色图图片区| 日本精品va在线观看| 国内av免费观看| 成人影视在线播放| 国产精品久久久久久久久久白浆| 欧美电影完整版在线观看| 男人天堂新网址| а√最新版在线天堂| 国产国语**毛片高清视频| 美女久久一区| 日韩av免费在线观看| 亚洲一区二区三区四区av| 日韩综合小视频| 中文字幕在线播放一区| 好吊色欧美一区二区三区| 天天夜夜人人| 日韩精品一区二区av| 日韩欧美国产成人一区二区| 欧美最猛性xxxxx免费| 国产精品偷伦视频免费观看国产| 日本在线免费观看视频| 日韩激情精品| 国产成人77亚洲精品www| 欧美77777| 亚洲视频电影图片偷拍一区| 3344国产精品免费看| 在线欧美三区| 国产精品a成v人在线播放| 91精品网站| 久久精品视频免费| 国产日韩av一区二区| 精品久久久久久久久国产字幕| 青草视频在线观看免费| 精品欧美日韩一区二区| www.一区| 欧美激情在线一区二区三区| 亚洲第一精品在线观看| 爆操妹子视频在线观看| 国产片乱18免费| 97人人爽人人爽人人爽| 免费精品在线视频| 亚洲国产视频一区二区| 国产一区二区视频在线免费观看| 忘忧草在线日韩www影院| 欧美aⅴ99久久黑人专区| 亚洲天堂中文网| 国产z一区二区三区| 精品中文字幕不卡在线视频| 精品久久久久久亚洲国产300| 97久久精品人人澡人人爽缅北| 亚州欧美精品suv| 亚洲系列中文字幕| www.日韩.com| 亚洲精品成人区在线观看| 亚洲精品色婷婷福利天堂| 处破女av一区二区| 欧美乱妇20p| 日韩一区二区欧美| 一二三中文字幕在线| 99精品在线免费观看| h视频在线观看免费| 天堂视频福利| 日韩精品一区二区三区电影| 国产区精品在线观看| 日韩精品综合一本久道在线视频| 亚洲欧美一区二区三区久本道91| 欧美一级特黄视频| 97久久香蕉国产线看观看| 一级黄色大片视频| 国产精品99久久久久久久| 亚洲精选视频免费看| 无人区在线高清完整免费版 一区二| 精品黑人一区二区三区在线观看| 欧美高清精品一区二区| 亚洲精品大片www| 天天舔天天干| 亚洲欧美日韩国产一区二区三区| 欧美亚洲日本黄色| yw3121.龙物视频永不失联| 中日韩脚交footjobhd| 精品国产免费视频| 免费在线超碰| 欧美wwwwxxxx| 亚洲精品资源美女情侣酒店| 中文字幕在线观| 西瓜成人精品人成网站| 精品a在线观看| 久久亚洲私人国产精品va媚药| 成年人网站免费视频| 精品国产乱码久久久久久牛牛| 99国产精品久久一区二区三区| 久久老女人爱爱| 一区二区欧美久久| 色综合久久网女同蕾丝边| 性色国产成人久久久精品| 日韩高清电影一区| 无码人妻精品中文字幕| 欧美做受高潮6| 四虎成人永久地址| 蜜桃一区二区三区四区| 国产成人免费看| 国产午夜亚洲精品羞羞网站| 福利成人在线观看| 成人永久免费网站| 亚洲伦理在线精品| 红桃视频成人在线观看| 国产美女视频一区二区二三区| 欧美国产一区二区| 亚洲国产黄色片| 黄色a级片免费| 国产美女高潮久久白浆| 成人黄色视屏网站| 欧美极品在线视频| 亚洲一区二区影院| 亚洲国产一区二区三区在线观看|