下面我們以Delphi為使用語言,說明在程序設計中消息是如何定義、發送和處理的。在Delphi中聲明消息處理過程之前,首先要定義一個消息常,其值為一個整數(取值范圍在1到49151之間),一般我們會使用Messages單元中定義的WM_USER常量作為基數。
const
CM_EmbeddableFormClose = WM_User + $01;
一般情況下Windows消息是使用WM_作為前綴,表示Windows Message;用戶自定義的消息則以CM_作為前綴,表示Customer Message。
在定義好消息之後,就需要定義一個處理該消息的消息過程。消息方法是由消息發分發而觸發的,不需要程序員顯示的調用,所以一般都是將其聲明為一個類的私有方法Private,當然如果該類的子類需要改寫這方法,則可以將其聲明為保護方法Protected。
Type
TMessageTester = class
private
procedure EmbeddableFormClose(Var Msg: TMessage); Message CM_EmbeddableFormClose;
public
......
end;
此處僅為了說明消息方法的使用,故沒有列出其全部的代碼。由於它被聲明為私有方法,所在在客戶類中是看不到這個方法的,也就無法通過指定方法名的方式調用,但我們可以使用發送消息來調用這一方法。
PostMessage(HostForm.Handle, CM_EmbeddableFormClose, 0, Handle);
Application.ProcessMessages;
這樣我們就向服務類(即上面代碼中的HostForm)發送了CM_EmbeddableFormClose消息,服務類在查找到該消息的處理方法時即執行該方法中的代碼。