讓AllocateHwnd接受一般函式位址作引數

2021-09-06 18:37:18 字數 3151 閱讀 9649

classes單元的allocatehwnd函式是需要傳入乙個處理訊息的類的方法的作為引數的,原型:

function allocatehwnd(method: twndmethod): hwnd;
很多時候,我們想要建立乙個視窗,而又不想因為這個引數而建立乙個類,怎麼辦?

換句話說,就是能不能使傳入的引數是個普通的函式而不是類的方法呢?答案是肯定的!

看看twndmethod的宣告:

type

twndmethod = procedure(var message: tmessage) of

object;

實際上類的方法在執行時,總是傳入了物件這個引數。

即此方法共傳了兩個引數,根據delphi預設的registry呼叫約定,暫存器eax傳遞物件,edx傳遞message結構變數。

因此我們可以宣告處理訊息的函式的型別:

type

tmywndproc = procedure(aobject: tobject; var message: tmessage);

我們自定義myallocatehwnd函式以接收這個型別的引數,內部呼叫allocatehwnd:

function

myallocatehwnd(proc: tmywndproc): hwnd;

asmpush

0// aobject

push proc// message

call allocatehwnd

end;

如果直接呼叫allocatehwnd(proc)是不能通過編譯的!

讓 Edit 只接受數字《轉》

方法1 proceduretform1.edit1keypress sender tobject varkey char begin ifnot keyin 0 9 then key chr 0 end 方法2 proceduretform1.edit1keypress sender tobject...

色誘 讓我接受了問卷調查

今天去4s店做車保養,在等師傅洗車的過程中感覺好無聊。雖然4s店有很多的時尚雜誌 也有電視 電腦上網,但因我想早點回單位有事,所以什麼也不想玩,只想快點等事情辦好。4s店的服務一貫很好,真的是搞得自己都有點不習慣他們那種過度的客氣。在我正感到無聊時,一位靚女過來幫我添茶。本來有點疲倦的眼一下精神了很...

如何讓年輕員工樂於接受批評

很多ceo抱怨,現在剛畢業的年輕員工,都是獨生子女,從小嬌生慣養,屬於 老虎的屁股摸不得 稍微批評一下都立馬火冒三丈,甚至馬上辭職。我很認同這些ceo的觀點。現在的年輕人當中的確普遍存在這種情況。但是,既然是乙個普遍現象,那競爭對手也會在用人方面碰到同樣的問題,所以,也不用過分煩惱。既然無法改變這個...