1. 程式人生 > 實用技巧 >Delphi之建立元件模板(Component Template)

Delphi之建立元件模板(Component Template)

New Term

元件模板(Component Template)是指修改後儲存下來供以後再使用的一個或一組元件。

元件模板可用來建立、儲存和重複使用元件組。實際上,元件模板不必是一組元件,完全可以是單個元件。舉一個小例子對理解元件模板的用途會很有幫助,但先要簡要介紹一下Windows編輯控制元件(edit control)。

與所有的Windows控制元件一樣,標準Windows單行編輯控制元件有若干預定義動作。其中一個動作與Enter鍵的處理方式有關。如果當游標在編輯框控制元件上時使用者按下Enter鍵,Windows就開始查詢視窗上的預設按鈕,如果找到了預設按鈕,Windows就點選該按鈕。

這是什麼意思呢?比方說,一個窗體上有多個編輯控制元件和一個預設按鈕(如OK按鈕或Default屬性設成True的其他按鈕),當按下Enter鍵且有一個編輯控制元件為當前控制元件時,視窗會關閉;如果窗體上無預設按鈕,Windows就會發出嘟嘟聲。雖然這是標準的Windows動作,但很多使用者覺得它很煩人,它們希望按下Enter鍵後輸入焦點移到下一個控制元件,而不是關閉視窗。

這個問題的解決其實很簡單。只要為OnKeyPress事件提供一個事件處理程式並加入程式碼,其程式碼如下:

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin if Key = Char(vk_return) then begin Key := #0; PostMessage(Handle, WM_NEXTDLGCTL, 0, 0); end; end;

這段程式碼首先檢查按下的鍵是不是Enter鍵(VK_RETURN虛擬鍵碼),如果是,它就把鍵值設為#0,Windows就不會發出嘟嘟聲。程式碼第6行傳送一個Windows的WM_NEXTDLGCTL訊息給窗體,該訊息把焦點設定到下一個控制元件上,這就是與此有關的全部內容。

為新的Edit元件編寫好程式碼後,可將它儲存為一個元件模板。儲存元件時,全部程式碼都一起儲存下來。建立的程式碼模板儲存到元件面板的Templates

頁面上。下面來建立一個元件模板,以便讀者更好地理解。下面我們按步驟建立元件模板:

(1)在空白窗體上放置一個Edit元件,將其Name屬性改為EnterAsTab,並清除它的Text屬性;

(2)切換到Object Inspector的Events頁面。建立OnKeyPress事件的事件處理程式。輸入下面的程式碼:

procedure TForm1.EnterAsTabKeyPress(Sender: TObject; var Key: Char);
begin
  if Key = Char(vk_return) then
  begin
    Key := #0;
    PostMessage(Handle, WM_NEXTDLGCTL, 0, 0);
  end;
end;

(3)選取Edit元件,從主選單上選【Component | Create Component Template】選單項,顯示出“Component Template Information”對話方塊;

(4)在“Component Name”欄中輸入TEnterAsTab,這時的對話方塊如上面所示;

(5)點選OK儲存該元件模板。

現在元件面板上有了一個Templates頁面。

切換到Templates頁面,選擇需要的元件放置到窗體上,OnKeyPress事件處理程式的程式碼也隨元件一起加到了窗體上。

切換到Templates頁面,選擇需要的元件放置到窗體上,OnKeyPress事件處理程式的程式碼也隨元件一起加到了窗體上。

Tip

一個窗體上如果有多個這樣的元件,對於窗體上每個EnterAsTab元件,OnKeyPress事件處理程式的程式碼是重複的。為了避免程式碼重複,可只放置一個EnterAsTab元件於窗體上,其他元件可以是標準Edit元件,它們的OnKeyPress事件均有EnterAsTab元件的OnKeyPress事件處理程式處理。

元件模板的最大優勢就是:每個元件的事件處理程式的程式碼與該元件存放在一起。用元件模板可將定值元件按自己的安排集中在一起:帶有預定義過濾器和標題的公用對話方塊、帶有符號的加速按鈕、列表框或自動從檔案中載入專案的組合框以及任意其他集合。

儘管元件模板概念適用於單個元件,但用它來處理多個元件更有意義。如果有一組元件要放置到窗體上,則可以建立一個由這組元件組成的元件模板,以後再用這組元件時只要點選一下由它們組成的元件模板就可以了。

Note

元件模板與物件庫中儲存的窗體有一些相似之處。元件模板用於窗體上的元件組。使用物件庫儲存要重複使用的窗體。