Wolfgang Chien's Homepage | Delphi學習筆記 - 問答篇 |
小弟知道如何產生動態的產生一Component,但是卻不知如何處理動態Component的Event?請各位先進教教我,謝謝。『例』:
一、動態的產生一個 Button,想對此動態 Button 寫處理 Event的程式,如何寫?
二、如果產生了『一堆』動態的 Button,如何針對不同的 Button寫Event的處理程式?
按照 Conpontent Writer's Guide 第 46 頁的說明:
![]() |
Events are method pointers |
![]() |
Events are properties |
因此, 將事件處理函式的指標指定到動態產生的按鈕的 OnClick 屬性(事件), 應該就可以了, 例:
![]() |
新開一個 project |
![]() |
在 Form1 安排一個 TButton, 並在 OnClick 中撰寫程式碼如下:
procedure TForm1.Button1Click(Sender: TObject); var btnTest: TButton; begin (* 產生一個新的按鈕 *) btnTest := TButton.Create(Self); btnTest.Parent := Self; (* 設定各項屬性 *) btnTest.Caption := 'Test Btn'; btnTest.Top := 10; btnTest.Left := 10; (* 指定事件處理函式 *) btnTest.OnClick := btnTestClick; end; |
![]() |
將 TForm1 的宣告修改如下:
type TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); private { Private declarations } public (* 動態產生的按鈕的 click 事件處理函式 *) procedure btnTestClick(Sender: TObject); end; |
![]() |
在 implementation 中加入下列程式, 撰寫動態產生的按鈕的 click 事件處理函式
implementation {$R *.DFM} procedure TForm1.btnTestClick(Sender: TObject); begin MessageDlg('Test', mtInformation, [mbOK], 0); end; |
![]() |
執行這個程式 |
大部分的 Component 都有一個 Tag 屬性, 在動態產生按鈕時順便設定該屬性, 事件處理程式再依據 Tag 的值, 即可知道是哪一個按鈕
首頁 | 學習筆記 | 主題公園 | 軟體下載 | 關於本站 | 討論信群 | 相約下次 |