在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; interface uses 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); private val1,val2,res:integer; {val1和val2存放輸入的兩個整數,res存放兩數的積} FTooBig : TNotifyEvent; {定義一個指向事件處理器的指針FTooBig} { Private declarations } public { Public declarations } published property OnTooBig:TNotifyevent read FTooBig write FTooBig;{定義事件} end; var Form1: TForm1; implementation {$R *.DFM} procedure TForm1.Button1Click(Sender: TObject); begin val1 := 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 OnTooBig(Self); end; procedure TForm1.TooBig1(Sender: TObject); begin Application.MessageBox('Too Big',' Test Event! ',MB_OK); end; procedure TForm1.FormCreate(Sender: TObject); begin val1:=1; val2:=1; FTooBig := TooBig1;{使事件處理指針指向事件處理器} end;