熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Delphi編程 >> 正文

DELPHI基礎教程:Delphi自定義部件開發(三)[1]

2022-06-13   來源: Delphi編程 

   創建新的消息處理方法

  因為Delphi只為大多數普通Windows消息提供了處理方法所以當你定義自己的消息時就要創建新的消息處理方法

  用戶自定義消息的過程包括兩個方面

  ● 定義自己的消息

  ● 聲明新的消息處理方法

  ⑴ 定義自己的消息

  許多標准部件為了內部使用定義了消息定義消息的最一般的動因是廣播信息和狀態改變的通知

  定義消息過程分兩步

  ● 聲明消息標識符

  ● 聲明消息記錄類型

  ① 聲明消息標識

  消息標識是整型大小的常量Windows保存了小於的消息用於自己使用因此當聲明自己的消息時你應當大於

  常量WM_USER代表用於自定義消息的開始數字當定義消息標准時你應當基於WM_USER

  某些標准Windows控制使用用戶自定義范圍的消息包括ListBoxComboBoxEditBox和Button如果從上述部件中繼承了一個部件在定義新的消息時應當檢查一下Message單元是否有消息用於該控制

  定義消息的方法如下

  Const

  WM_MYFIRSTMESSAGE=WM_USER+;

  WM_MYSECONDMESSAGE=WM_USER+;

  ② 聲明消息記錄類型

  如果你想給予自定義消息的參數有含義的名字就要為該消息聲明消息記錄類型消息記錄是傳給消息處理方法的參數的類型如果不使用消息參數或者想使用舊風格參數可以使用缺省的消息記錄

  聲明消息記錄類型要遵循下列規則

  ● 以消息名命名消息記錄類型以T打頭

  ● 將記錄中第一個域命名為Msg類型為TMsgPraram

  ● 將接著的兩個字節定義為word 以響應word大小的參數

  ● 將接著的四個字節與long參數匹配

  ● 將最後的域命名為Result類型為Longint

  下面是TWMMouse的定義

  type

  TWMMouse=record

  Msg: TMsgParam; { 第一個是消息ID }

  Keys: Word; { wParam }

  case Integer of { 定義lParam的兩種方式 }

  o: (

  Xpos: Integer; { 或者以xy座標 }

  Ypos: Integer)

  : (

  Pos : TPoint; { 或者作為單個點 }

  Result: Longint; ) { 最後是Result域 }

  end;

  TWMMouse使用變長記錄定義了相同參數的不同名字集

  ⑵ 聲明新的消息處理方法

  有兩類環境需要你定義新的消息處理方法

  ● 自定義新部件需要處理沒有被標准部件處理的Windows消息

  ● 已定義了自定義部件使用的新消息

  聲明消息處理方法的辦法如下

  ● 在部件聲明中的protected部分聲明方法

  ● 將方法做成過程

  ● 以要處理的消息名命名方法 但不帶下劃線

  ● 傳遞一個命名為Message的var參數類型為消息記錄類型

  ● 編寫用於該部件的特別處理代碼

  ● 調用繼承的消息方法

  下面是用於用戶自定義消息CM_CHANGECOLOR的消息處理代碼

  type

  TMyComponent=class(TControl)

  …

  protected

  procedure CMChangeColor(var Message:TMessage)

  message CM_CHANGECOLOR;

  end:

  procedure TMyComponentCMChangeColor(var Message: TMessage)

  begin

  color := Message lParam;

  inherited;

  end;

   注冊部件

  編寫部件及其屬性方法和事件只是部件創建過程的一部分盡管部件具有這些特征就可用但部件真正功能強大的是在設計時操作它們的能力

  使部件在設計時可用需要經過如下幾步

  ● 用Delphi注冊部件

  ● 增加選擇板位圖

  ● 提供有關屬性和事件的幫助

  ● 存貯和讀取屬性

   用Delphi注冊部件

  為了讓Delphi識別自定義部件並將它們放置於Component Palette上你必須注冊每一個部件

  注冊一個部件要在部件所在單元裡加入Register方法這包括兩個方面的內容

  ● 聲明注冊過程

  ● 實現注冊過程

  一旦安裝了注冊過程就可以將部件安裝在選擇板上

  注冊過程要在部件所在單元中寫一個過程該過程必須以Register命名Register必須出現在庫單元的interface部分這樣Delphi就能定位它在Register過程中可以為每個部件調用過程RegisterComponents

  下面的代碼演示了建立和注冊部件的概略方法

  unit MyBtns;

  interface

  type

  … { 聲明自定義部件 }

  procedure Register;

  Implementation

  procedure Register;

  begin

  … { 注冊部件 }

  end;

  end

  在Register過程中必須注冊每一個要加入Component Palette的部件如果庫單元包含若干部件就要將它們一次性注冊

[]  []  []  []  


From:http://tw.wingwit.com/Article/program/Delphi/201311/25113.html
    Copyright © 2005-2022 電腦知識網 Computer Knowledge   All rights reserved.