亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? delphi的消息處理機(jī)制 (2000年12月13日).txt

?? 自己對(duì)DELPHI學(xué)習(xí)的一點(diǎn)體會(huì)
?? TXT
字號(hào):
DELPHI的消息處理機(jī)制 (2000年12月13日) 

本站更新  分類:   作者:未知  推薦:   閱讀次數(shù):594  
(http://www.codesky.net)  

--------------------------------------------------------------------------------
Delphi 是Borland 公 司提 供 的 一 種 全 新 的WINDOWS 編 程 開 發(fā) 工 具. 由 于 它 采 用 了 具有 彈 性 的 和 可 重 用 的 面 向 對(duì) 象Pascal(object-oriented pascal) 語言, 并 有 強(qiáng) 大 的 數(shù) 據(jù) 庫(kù) 引 擎(BDE), 快 速 的 代 碼 編 譯 器, 同 時(shí)又 提 供 了 眾 多 出 色 的 構(gòu) 件. 受 到 廣 大 編 程 人 員 的 青 睞. 在眾 多 的 編 程 語 言( 如VB,PowerBuilder,Powerpoint 等) 中 脫 穎 而 出。 其 中 一 個(gè)DELPHI 強(qiáng)于 其 他 編 程 語 言( 如VB4.0) 的 地 方 就 是 在DELPHI 中 可 自 定 義 消息, 并 可 直 接 處 理 消 息. 這 對(duì) 于 那 些 希 望 編 寫 自 己 的 構(gòu) 件(Component), 或 者 希 望 截 獲. 過 濾 消 息 的 用 戶 來 說 是 必 不 可 少 的. 因 為編 寫 構(gòu) 件 一 般 要 對(duì) 相 應(yīng) 的 消 息 進(jìn) 行 處 理. 下 面 就 對(duì)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) 的 處 理 方 法, 如 果 沒 有 特 定 的 處 理 方 法, 則 調(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), 它 包 含 了 要 分 配 的 消 息 的 消 息 號(hào) 碼. 例 如: 

type

Tmessage=record

Msg:cardinal;

wparam:word;

lparam:longint; .

result:longint;

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

procedure Defaulthandler(var Message);virtual; 

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

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

消 息 處 理 句 柄 方 法 必 須 是 一 個(gè) 過 程, 且 只 能 傳 遞 一 個(gè)Tmessage 型 變 量 參 數(shù). 
方 法 聲 明 后 要 有 一 個(gè)message 命 令, 后 接 一 個(gè) 在0 到32767 之 間的 消 息 標(biāo) 號(hào)( 整 型 常 數(shù)). 
消 息 處 理 句 柄 方 法 不 需 要 用override 命 令 來 顯 式 指 明 重 載祖 先 的 一 個(gè) 消 息 處 理 句 柄, 另 外 它 一 般 聲 明 在 構(gòu) 件 的protected 或private 區(qū). 
在 消 息 處 理 句 柄 中 一 般 先 是 用 戶 自 己 對(duì) 消 息 的 處 理, 最 后用inherited 命 令 調(diào) 用 祖 先 類 中 對(duì) 應(yīng) 此 消 息 的 處 理 句 柄( 有些 情 況 下 可 能 正 相 反). 由 于 可 能 對(duì) 祖 先 類 中 對(duì) 此 消 息 的處 理 句 柄 的 名 字 和 參 數(shù) 類 型 不 清 楚, 而 調(diào) 用 命 令inherited 可以 避 免 此 麻 煩, 同 樣 如 果 祖 先 類 中 沒 有 對(duì) 應(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). 針 對(duì) 某 消 息 編 寫 消 息 處 理 句 柄. (3). 重 載 構(gòu) 件 繼 承 的 虛 擬方 法Defhandler, 在 其 中 對(duì) 消 息 進(jìn) 行 處 理。 其 中 常 用 的 方 法是 方 法(2), 在 上 節(jié) 中 已 介 紹 過 了, 方 法(1) 與 方 法(3) 相 似,這 里 只 簡(jiǎn) 單 介 紹 一 下 方 法(1)。 

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

procedure Tmyobject.wndproc(var message:Tmessage);

begin

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

inherited wndproc(message);

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

end;
由 此 可 以 看 出 在wndproc 方 法 中 處 理 消 息 的 優(yōu) 勢(shì) 是 可 以 過 濾 整 個(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;
下 例 為 一 簡(jiǎn) 單 的 自定 義 構(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)。 

 
 

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人少妇影院yyyy| 亚洲一区在线看| 国产成人精品影视| 日本一区二区三级电影在线观看 | 国产成人精品三级| 欧美国产禁国产网站cc| 成人高清免费观看| 曰韩精品一区二区| 欧美男男青年gay1069videost | 一个色在线综合| 欧美日本在线一区| 久88久久88久久久| 国产精品乱码人人做人人爱| 97精品视频在线观看自产线路二| 亚洲你懂的在线视频| 欧美日韩国产色站一区二区三区| 肉色丝袜一区二区| 久久久亚洲精品一区二区三区| 成人性色生活片| 亚洲午夜在线电影| 精品国产一区二区在线观看| 成人黄色大片在线观看| 亚洲一区二区三区精品在线| 日韩欧美自拍偷拍| av不卡在线观看| 亚瑟在线精品视频| 久久久精品影视| 色婷婷综合久久久中文一区二区 | 欧洲亚洲国产日韩| 国产一区二区三区黄视频| 亚洲丝袜制服诱惑| 日韩欧美色电影| 91福利视频在线| 国模套图日韩精品一区二区| **网站欧美大片在线观看| 4hu四虎永久在线影院成人| 国产精品1区2区3区在线观看| 亚洲精品美腿丝袜| 精品福利在线导航| 欧洲精品一区二区三区在线观看| 韩国精品主播一区二区在线观看| 洋洋成人永久网站入口| 欧美精品一区二区三区一线天视频| 91女厕偷拍女厕偷拍高清| 蜜臀va亚洲va欧美va天堂| 自拍偷在线精品自拍偷无码专区| 日韩丝袜情趣美女图片| aaa欧美日韩| 国内一区二区在线| 亚洲风情在线资源站| 国产精品少妇自拍| 精品久久久久av影院| 欧美视频自拍偷拍| 成人网页在线观看| 国模娜娜一区二区三区| 日本vs亚洲vs韩国一区三区二区| 亚洲丝袜制服诱惑| 中文字幕va一区二区三区| 日韩精品在线看片z| 欧美视频一区二区三区四区| 国产不卡视频一区二区三区| 美脚の诱脚舐め脚责91| 亚洲777理论| 亚洲一二三四在线| 亚洲青青青在线视频| 国产清纯在线一区二区www| 日韩精品一区二区三区在线观看| 欧美日韩一区二区三区在线| 成人精品国产福利| 国产福利不卡视频| 国产一区二区三区美女| 激情小说亚洲一区| 理论电影国产精品| 麻豆成人免费电影| 天天影视网天天综合色在线播放| 伊人性伊人情综合网| 亚洲蜜臀av乱码久久精品蜜桃| 国产欧美一区二区精品性| 日本一二三不卡| 国产精品视频一二| 中文字幕在线不卡| 国产精品福利一区二区| 国产精品毛片a∨一区二区三区| 久久精品视频在线看| 久久久天堂av| 中文子幕无线码一区tr| 欧美激情在线观看视频免费| 中文字幕欧美日韩一区| 中文字幕在线播放不卡一区| 亚洲欧美日韩电影| 一级特黄大欧美久久久| 视频一区在线视频| 蜜臀av性久久久久av蜜臀妖精| 青青草国产成人av片免费| 久久精品国产亚洲高清剧情介绍| 另类人妖一区二区av| 国产综合久久久久久鬼色 | 91国偷自产一区二区使用方法| 91麻豆.com| 欧美欧美欧美欧美| 日韩美女在线视频| 欧美韩日一区二区三区| 亚洲欧美欧美一区二区三区| 亚洲国产精品久久久男人的天堂| 蜜桃一区二区三区四区| 国产成人免费9x9x人网站视频| 成人av影视在线观看| 日本乱人伦aⅴ精品| 日韩视频不卡中文| 国产精品免费视频一区| 亚洲一区二区三区免费视频| 久久精品国产精品亚洲红杏| 国产sm精品调教视频网站| 色综合久久精品| 欧美一区二区三区婷婷月色| 久久九九影视网| 夜夜操天天操亚洲| 国产精品一区二区三区四区| 色悠悠亚洲一区二区| 精品国产精品网麻豆系列 | 国产欧美精品一区二区色综合朱莉 | 欧美性色aⅴ视频一区日韩精品| 欧美一级黄色录像| 亚洲丝袜美腿综合| 捆绑变态av一区二区三区| av男人天堂一区| 精品捆绑美女sm三区| 亚洲日本va午夜在线影院| 免费看欧美女人艹b| 97se亚洲国产综合自在线观| 日韩欧美中文字幕精品| 一区二区三区中文字幕在线观看| 久久精品99久久久| 欧美日韩国产综合一区二区三区| 中文字幕欧美国产| 日本不卡一二三| 在线观看国产91| 国产精品久久久久一区| 精品夜夜嗨av一区二区三区| 在线免费精品视频| 国产精品麻豆久久久| 精品一区二区精品| 91精品国产综合久久精品图片 | 精品剧情v国产在线观看在线| 亚洲一区二三区| 成人av电影在线| 久久综合99re88久久爱| 首页欧美精品中文字幕| 在线观看国产日韩| 亚洲女爱视频在线| 91色在线porny| 中文字幕一区二区三区在线观看| 久久精品999| 日韩欧美色综合网站| 日韩成人免费看| 欧美日本在线看| 亚洲午夜免费电影| 欧美性一级生活| 亚洲国产日韩精品| 欧美午夜一区二区三区免费大片| 国产精品二三区| www.欧美日韩国产在线| 国产精品天干天干在线综合| 国产专区综合网| 久久精品一区二区三区不卡 | 夜夜夜精品看看| 在线免费精品视频| 一区二区三区加勒比av| 色婷婷久久久久swag精品| 亚洲日本电影在线| 在线观看国产日韩| 亚洲123区在线观看| 欧美卡1卡2卡| 久久丁香综合五月国产三级网站| 5858s免费视频成人| 日本中文字幕不卡| 日韩欧美激情四射| 韩国av一区二区三区四区| 久久久久久一级片| 成人精品免费视频| 综合av第一页| 欧美日韩国产片| 美女脱光内衣内裤视频久久网站| 精品乱人伦一区二区三区| 国产精品77777| 亚洲品质自拍视频| 欧美日韩亚洲综合一区二区三区| 午夜精品久久久久久久久久 | 国产精品人妖ts系列视频| 成人av免费在线观看| 亚洲色图都市小说| 777xxx欧美| 国产精品一卡二卡在线观看| 亚洲欧洲精品天堂一级| 91久久精品国产91性色tv| 亚洲电影第三页| 国产亚洲一区字幕| 色偷偷88欧美精品久久久| 日韩激情在线观看| 国产欧美日韩在线观看|