delphi——自定义事件的实现

来源:互联网 发布:h5页面设计软件 编辑:程序博客网 时间:2024/06/04 19:09

下面 实现了两个自定义事件


unit Unit1;interfaceuses  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,  Dialogs, StdCtrls, ExtCtrls;type  TForm1 = class(TForm)    edtcheng1: TEdit;    edtcheng2: TEdit;    btnBtnJi: TButton;    edtchengvalue: TEdit;    tmr1: TTimer;    edt1: TEdit;    //声明  TooBigEvent事件    procedure TooBigEvent(Sender: TObject);    //声明  Timeisover事件    procedure Timeisover (Sender: TObject);    procedure FormCreate(Sender: TObject);    procedure btnBtnJiClick(Sender: TObject);    procedure tmr1Timer(Sender: TObject);  private    { Private declarations }     FTooBig:TNotifyEvent;  //FTooBig是一个指针,它可以保存TooBigEvent事件方法的调用地址。     FMsgTimeIsOver:TNotifyEvent; //FTooBig是一个指针,它可以保存Timeisover事件方法的调用地址。  public    { Public declarations }    published          // OnTooBig这个属性(其实也是方法的一种)用来操作FTooBig这个私有变量,因为FTooBig是个函数指针,所以但读这个变量时,也就调用了函数。    property OnTooBig:TNotifyevent read FTooBig write FTooBig;    property OnFMsgTimeIsOver:TNotifyevent read FMsgTimeIsOver write FMsgTimeIsOver;  end;var  Form1: TForm1;implementation{$R *.dfm}//声明事件方法的实现procedure TForm1.TooBigEvent(Sender: TObject);beginApplication.MessageBox('太大了','测试事件!',MB_OK);end;//声明事件方法的实现procedure TForm1.Timeisover(Sender: TObject);beginApplication.MessageBox('时间到了','游戏结束!',MB_OK);end;procedure TForm1.FormCreate(Sender: TObject);begin//将TooBigEvent事件方法地址存入FTooBig变量  FTooBig := TooBigEvent;//将Timeisover事件方法地址存入FTooBig变量  FMsgTimeIsOver:=Timeisover;  tmr1.Enabled:=True;end;procedure TForm1.btnBtnJiClick(Sender: TObject);var  var1,var2,Myvalue:integer;begin  var1 := StrToInt(edtcheng1.Text); var2 := StrToInt(edtcheng2.Text);  if(var1<100)and(var2<100) then  begin Myvalue := var1*var2; edtchengvalue.Text := IntToStr(Myvalue); end else if assigned(FTooBig) then //OnTooBig属性操作FTooBig指针变量,调用TooBigEvent方法  OnTooBig(Self); end;procedure TForm1.tmr1Timer(Sender: TObject);begin      if strtotime(FormatDateTime('hh:nn:ss',Now))>strtotime('10:17:01') then      begin           OnFMsgTimeIsOver(Self);      end;      edt1.Text:= FormatDateTime('hh:nn:ss',Now());end;end.


0 0
原创粉丝点击