程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Delphi >> 理解Delphi的類(十一) - 深入類中的方法(8)

理解Delphi的類(十一) - 深入類中的方法(8)

編輯:Delphi

{測試結果: 只執行了消息方法, 沒有執行事件, 也就是事件被消息攔截了}

//可以並存嗎? 當然可以!{把消息的實現改為:}
procedure TForm1.KeyDown(var msg: TWMKeyDown);
begin
 ShowMessage('消息: ' + Char(msg.CharCode));
 inherited;
end;
{會先執行消息, 後調用方法}
{把消息的實現改為:}
procedure TForm1.KeyDown(var msg: TWMKeyDown);
begin
 inherited;
 ShowMessage('消息: ' + Char(msg.CharCode));
end;
{會先調用方法, 後執行消息}
{
 消息這個概念還是非常復雜的,
 譬如, 現在只是攔截了 WM_KEYDOWN , Windows 的消息多著呢;
 譬如, 現在只是攔截了當前窗體的消息, 能接受消息的的對象也多著呢;
 還有 Delphi 定義的類似 TWMKey 這樣的眾多消息結構, 譬如鼠標的消息等等...
 這是一個需要另辟專欄的話題.
 總之消息很強大, 能替代所有事件; 我們研究它就是為了解決事件所不能的事情.
}
[13] - 方法的調用約定

因為使用方法參數的不同, 所以有了調用約定.

譬如 Delphi 默認的是從左到右讀取參數; Window API 是從右到左讀取參數.

如果沒有調用約定, Delphi 就無法使用由 C 語言編寫的 Window API;

如果沒有調用約定, 別的語言也無法使用由 Delphi 編寫的 DLL 文件中的方法.

指示字 參數讀取順序 參數刪除 參數傳遞 備注 register 左→右 方法返回時自動刪除參數 前三個參數使用CPU的三個寄存器傳遞; 其他使用棧傳遞 速度最快, 是 Delphi 的默認方式 pascal 左→右 方法返回時自動刪除參數 使用棧傳遞參數 為兼容存在 cdecl 右→左 由調用者在調用返回時從棧中刪除參數 使用棧傳遞參數 調用來自用 C 或 C++ 編寫的共享庫, 一般用於非 Windows 操作系統 stdcall 右→左 方法返回時自動刪除參數 使用棧傳遞參數 用於調用 Windows API safecall 右→左 方法返回時自動刪除參數 使用棧傳遞參數 用於調用 Windows 中的雙重接口中的方法(除了繼承自 IInterface 和 IDispatch 的方法) near Win16 位下的產物, 現在不用了 far export
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved