Delphi是一種功能很強的視覺化程式開發工具。我們在使用Delphi開發WINDOWS 應用程式的過程中,雖然Delphi為每個視覺化元件都提供了許多屬性(PRoperty)和事件(Event),但在實際應用中可能會碰到一些自己需要的特殊事件,這些特殊事件Delphi 又沒有提供,這時我們就需要為應用程式新增這些特殊事件。當這些事件發生後,又能馬上呼叫處理這些事件的過程。本文透過實例來說明如何為應用程式新增事件和處理事件的過程。
在Delphi中,事件其實是專門化的屬性,它是一個過程(procedure)的指標。要新增事件,首先應在所定義的類別中說明一個用來指向事件過程的指針,該指針的作用是當事件一旦發生,就透過這個指針執行所指向的處理這個事件的過程。最後透過指定符published公佈定義的事件屬性以及與之關聯的事件處理過程指標。
本例中,FtooBig為定義的事件處理流程指針,OnTooBig為事件屬性名。事件處理過程指標FtooBig透過程式的初始化使其指向過程TooBig1。在Delphi的表單(Form1)上放置三個編輯框,分別為Edit1、Edit2和Edit3,放一按鈕Button1。程式中設私有整數變數val1、val2和res,變數res用來記錄val1和val2的乘積,並用Edit3顯示。當透過Edit1和Edit2輸入的資料有一個大於100時,會觸發一個事件,並呼叫事件處理過程TooBig1顯示一個對話框,說明此事件已經發生並已處理。原始程式碼如下, 該程式在Delphi 3中偵錯通過。
unit Unit1;interfaceuses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;type TForm1 = class(TForm) Edit1: TEdit; {輸入第一個整數} Edit2: TEdit; {輸入第二個整數; {輸入第二個整數; } Edit3: TEdit; {輸出前二個整數的積} Button1: TButton; procedure Button1Click(Sender: TObject);procedure TooBig1(Sender: TObject); {當事件觸發後呼叫此程序} procedure FormCreate(Sender: TObject); privateval1,val2,res:integer; {val1和val2存放輸入的兩個整數,res存放兩數的積}FTooBig : TNotifyEvent; {定義一個指向事件處理器的指標FTooBig} { Private declarations } public { Public declarations } publishedproperty OnTooBig:TNotifyevent read FTooBig write FTooBig;{定義事件} end;var Form1: TForm1;implementation{$R *.DFM}procedure TForm1.Button1CC(Sgin); StrToInt(Edit1.Text); val2 := StrToInt(Edit2.Text); if(val1< 100)and(val2< 100) then begin res := val1*val2; Edit3.Text := IntToStr(res); end else if assigned(FTooBig) then OnToo (Self);end;procedure TForm1.TooBig1(Sender: TObject);beginapplication.MessageBox('Too Big',' Test Event! ',MB_OK);end;procedure TForm1.FormCreate(Sender: TObject);begin val1:=1; val2:=1; FTooBig := TooBig1;{使事件處理指標指向事件處理器}end;end.