如何爲Delphi程序添加事件和事件處理器方案

如何爲Delphi程序添加事件和事件處理器方案

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;
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;

end. 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章