Delphi 僅為常見 Windows 訊息提供內建處理方法。當定義專屬訊息時,必須自行建立對應的處理機制,包含「定義訊息」與「宣告處理方法」兩大步驟。
定義訊息的主因通常為廣播資訊或通知狀態變更。過程分兩步:
訊息識別碼為整數常數。Windows 保留 1024 以下編號,自訂訊息應大於此值。WM_USER 為自訂訊息起始值,建議以此為基礎累加:
const
WM_MYFIRSTMESSAGE = WM_USER + 0;
WM_MYSECONDMESSAGE = WM_USER + 1;
若繼承自 ListBox、ComboBox 等標準控制項,需檢查 Messages 單元是否已佔用特定範圍。
為賦予參數有意義的名稱,需宣告對應的記錄類型。規範如下:
T 開頭,對應訊息名稱Msg: TMsgParam 為訊息 IDwParamlParamResult: Longint 為回傳值範例 TWMMouse 運用變體記錄,為同一參數提供不同命名:
type
TWMMouse = record
Msg: TMsgParam;
Keys: Word;
case Integer of
0: (XPos: Integer; YPos: Integer);
1: (Pos: TPoint; Result: Longint);
end;
適用場景:處理標準元件未涵蓋的 Windows 訊息,或處理自訂訊息。宣告規則:
protected 區塊procedure 類型CM_CHANGECOLOR → CMChangeColor)var 參數,型別為對應訊息記錄inherited 保留繼承行為type
TMyComponent = class(TControl)
protected
procedure CMChangeColor(var Message: TMessage); message CM_CHANGECOLOR;
end;
procedure TMyComponent.CMChangeColor(var Message: TMessage);
begin
Color := Message.LParam;
inherited;
end;