首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> Delphi

Delphi 自定義元件開發:建立自訂訊息處理機制

     編輯:Delphi

建立新的訊息處理方法

Delphi 僅為常見 Windows 訊息提供內建處理方法。當定義專屬訊息時,必須自行建立對應的處理機制,包含「定義訊息」與「宣告處理方法」兩大步驟。

1. 定義自訂訊息

定義訊息的主因通常為廣播資訊或通知狀態變更。過程分兩步:

① 宣告訊息識別碼

訊息識別碼為整數常數。Windows 保留 1024 以下編號,自訂訊息應大於此值。WM_USER 為自訂訊息起始值,建議以此為基礎累加:

const
  WM_MYFIRSTMESSAGE  = WM_USER + 0;
  WM_MYSECONDMESSAGE = WM_USER + 1;

若繼承自 ListBox、ComboBox 等標準控制項,需檢查 Messages 單元是否已佔用特定範圍。

② 宣告訊息記錄類型

為賦予參數有意義的名稱,需宣告對應的記錄類型。規範如下:

  • 類型名以 T 開頭,對應訊息名稱
  • 第一欄位 Msg: TMsgParam 為訊息 ID
  • 接著兩個 Word 對應 wParam
  • 接著四個位元組對應 lParam
  • 最後欄位 Result: Longint 為回傳值

範例 TWMMouse 運用變體記錄,為同一參數提供不同命名:

type
  TWMMouse = record
    Msg: TMsgParam;
    Keys: Word;
    case Integer of
      0: (XPos: Integer; YPos: Integer);
      1: (Pos: TPoint; Result: Longint);
  end;

2. 宣告新的訊息處理方法

適用場景:處理標準元件未涵蓋的 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;
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved