在Delphi中,事件實(shí)際上是專門化的屬性,它是一個(gè)過(guò)程(procedure)的指針。要添加事件,首先應(yīng)在所定義的類中說(shuō)明一個(gè)用來(lái)指向事件過(guò)程的指針,該指針的作用是當(dāng)事件一旦發(fā)生,就通過(guò)這個(gè)指針執(zhí)行所指向的處理這個(gè)事件的過(guò)程。最后通過(guò)指定符 published公布定義的事件屬性以及與之關(guān)聯(lián)的事件處理過(guò)程指針。
本例中,F(xiàn)tooBig為定義的事件處理過(guò)程指針,OnTooBig為事件屬性名。事件處理過(guò)程指針FtooBig通過(guò)程序的初始化使之指向過(guò)程TooBig1。在Delphi的表單(Form1)上放置三個(gè)編輯框,分別為Edit1、Edit2和Edit3,放一按鈕Button1。程序中設(shè)私有整型變量val1、val2和res,變量res用來(lái)記錄val1和val2的乘積,并用Edit3顯示出來(lái)。當(dāng)通過(guò)Edit1和Edit2輸入的數(shù)據(jù)有一個(gè)大于100時(shí),會(huì)觸發(fā)一個(gè)事件,并調(diào)用事件處理過(guò)程TooBig1顯示一個(gè)對(duì)話框,說(shuō)明此事件已經(jīng)發(fā)生并已進(jìn)行處理。源程序代碼如下, 該程序在Delphi 3中調(diào)試通過(guò)。
unit Unit1;interfaceuses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;type TForm1 = class(TForm) Edit1: TEdit; {輸入第一個(gè)整數(shù)} Edit2: TEdit; {輸入第二個(gè)整數(shù)} Edit3: TEdit; {輸出前二個(gè)整數(shù)的積} Button1: TButton; procedure Button1Click(Sender: TObject);procedure TooBig1(Sender: TObject); {當(dāng)事件觸發(fā)后調(diào)用此過(guò)程} procedure FormCreate(Sender: TObject); privateval1,val2,res:integer; {val1和val2存放輸入的兩個(gè)整數(shù),res存放兩數(shù)的積}FTooBig : TNotifyEvent; {定義一個(gè)指向事件處理器的指針FTooBig} { Private declarations } public { Public declarations } publishedproperty 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);beginapplication.MessageBox('Too Big',' Test Event! ',MB_OK);end;procedure TForm1.FormCreate(Sender: TObject);begin val1:=1; val2:=1; FTooBig := TooBig1;{使事件處理指針指向事件處理器}end;end.新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注