delphi的訊息處理的相關函式

2021-04-06 20:26:37 字數 2443 閱讀 5980

twincontrol.mainwndproc

tcontrol.wndproc

tobject.dispatch

tobject.defaulthandler

procedure twincontrol.mainwndproc(var message: tmessage);

begin

try

try

windowproc(message);

finally

freedevicecontexts;

freememorycontexts;

end;

except

end;

end;

property windowproc: twndmethod read fwindowproc write fwindowproc;

twndmethod = procedure(var message: tmessage) of object;

procedure wndproc(var message: tmessage); virtual;

procedure tcontrol.wndproc(var message: tmessage);

var

form: tcustomform;

begin

if (csdesigning in componentstate) then

begin

form := getparentform(self);

if (form <> nil) and (form.designer <> nil) and

form.designer.isdesignmsg(self, message) then exit;

end

else if (message.msg >= wm_keyfirst) and (message.msg <= wm_keylast) then

begin

form := getparentform(self);

if (form <> nil) and form.wantchildkey(self, message) then exit;

end

else if (message.msg >= wm_mousefirst) and (message.msg <= wm_mouselast) then

begin

if not (csdoubleclicks in controlstyle) then

case message.msg of

wm_lbuttondblclk, wm_rbuttondblclk, wm_mbuttondblclk:

dec(message.msg, wm_lbuttondblclk - wm_lbuttondown);

end;

case message.msg of

wm_lbuttondown, wm_lbuttondblclk:

begin

if fdragmode = dmautomatic then

begin

beginautodrag;

exit;

end;

include(fcontrolstate, cslbuttondown);

end;

wm_lbuttonup:

exclude(fcontrolstate, cslbuttondown);

end;

end

else if message.msg = cm_visiblechanged then

with message do

senddocknotification(msg, wparam, lparam);

dispatch(message);

end;

procedure tobject.dispatch(var message);

a**

pushebx

movbx,[edx]

orbx,bx

je@@default

cmpbx,0c000h

jae@@default

pusheax

moveax,[eax]

callgetdynamethod

popeax

je@@default

movecx,ebx

popebx

jmpecx

@@default:

popebx

movecx,[eax]

jmpdword ptr [ecx].vmtdefaulthandler

end;

procedure defaulthandler(var message); virtual;

procedure tobject.defaulthandler(var message);

begin

end;

Delphi的訊息處理

delphi中的訊息 訊息是windows發出的一個通知,它告訴應用程式某個事件發生了。在delphi中,大多數情況下windows的訊息被封裝在vcl的事件中,我們只需處理相應的vcl事件就可以了,但如果我們需要編寫自己的控制元件 截獲或過濾訊息就必須深入研究win32的訊息處理機制。在delph...

Delphi中的訊息處理

1 windows的訊息驅動體系 在windows系統中,訊息傳遞是實現物件間通訊和控制的主要手段。可以系統都以訊息驅動的方式工作。系統中發生的使用者輸入操作 顯示資訊的改變 系統環境引數變化等所有事件都以系統定義訊息的形式出現在相關的應用程式和視窗。所以程式設計的主要任務就是為這些訊息的處理設計 ...

delphi類訊息的處理機制

delphi 類訊息的處理機制 文章不涉及 windows 訊息迴圈和更復雜的技術,只從 delphi 類繼承及類自身的訊息處理分析 是自己的學習心得和體驗 1.搜尋類本身有沒有處理該訊息值的函式 如果有 則終止迴圈 迴圈次數 1 2.搜尋父類有沒有處理該訊息值的函式 如果有 則終止迴圈 迴圈次數 ...

Delphi中的訊息截獲

windows是一個基於訊息驅動的系統,因此,在很多時候,我們需要截獲一些訊息然後自己進行處理。而vcl系統又有一些特定的訊息。下面對我所瞭解的delphi環境中截獲訊息進行一些總結。就個人瞭解,共有6種方法來截獲 處理訊息。1.訊息鉤子 message hook 特點 可以針對所有有控制代碼的窗體...

在VS2005如何刪除已新增的訊息處理函式

下午部門一個同事問我 在vs 2005中如何刪除已經新增的訊息處理函式。她覺得在標頭檔案 訊息巨集和實現檔案中三處刪除一個函式太麻煩了。對此我還真沒試過,vc 6.0我知道是在class wizard中刪除,在vs 2005中我已習慣在 中修改,還真沒試過。回家後摸索了一下,找到了,下面以刪除刪除檢...