delphi自定义事件处理
http://www.cnblogs.com/ywangzi/archive/2012/09/06/2673414.html
delphi自定義事件處理
??????為什么我們點擊按鈕,就會執(zhí)行按鈕的onclick事件?這個事件是怎么和我們自己的代碼關(guān)聯(lián)起來的。相信很多人都有這個疑問。那么我們就通過一個自定義事件來了解這里面得運行原理。以乘法運算來顯示,如果乘數(shù)大于100,就提示用戶,太大了。這個事件用自定義事件定義。 大家先看一下最終效果,
??????我添加了三個文本框,一個按鈕,當?shù)谝换蛘叩诙€文本框的數(shù)>100時,點求積按鈕,提示Too Big 對話框。
??????完成自定義事件需要5步來做:
?????1.定義TNotifyEvent類型私有變量
????????
FTooBig:TNotifyEvent;?
???????? FTooBig是一個指針,它可以保持事件方法的調(diào)用地址。
???? 2.公布一個屬性
?????????
published??property?OnTooBig:TNotifyevent?read?FTooBig?write?FTooBig;
?
???????? OnTooBig這個屬性用來操作FTooBig這個私有變量,因為FTooBig是個函數(shù)指針,所以但讀這個變量時,也就調(diào)用了函數(shù)。
???? 3.定義事件處理函數(shù)
?
?????????procedure?TooBigEvent(Sender:?TObject);
?????????procedure?TForm1.TooBigEvent(Sender:?TObject);
?????????begin
?????????Application.MessageBox('Too?Big','Test?Event!',MB_OK);
?????????end;
?
???????? 這是當文本框數(shù)太大時執(zhí)行的方法。
?????4. 把事件處理函數(shù)賦值給TNotifyEvent私有變量
???????? FTooBig := TooBigEvent;
???? 5. 當條件符合時執(zhí)行事件處理函數(shù)
?
procedure?TForm1.Button1Click(Sender:?TObject);
var
??val1?:?integer;
??val2?:?integer;
??res??:?integer;
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;
?
???? 下面貼出全部代碼:
?
unit?Unit1;
interface
uses
??Windows,?Messages,?SysUtils,?Variants,?Classes,?Graphics,?Controls,?Forms,
??Dialogs,?StdCtrls;
type
??TForm1?=?class(TForm)
????Edit1:?TEdit;
????Edit2:?TEdit;
????Edit3:?TEdit;
????Button1:?TButton;
????procedure?TooBigEvent(Sender:?TObject);
????procedure?Button1Click(Sender:?TObject);
????procedure?FormCreate(Sender:?TObject);
??private
?????FTooBig:TNotifyEvent;?
????{?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);
var
??val1?:?integer;
??val2?:?integer;
??res??:?integer;
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.TooBigEvent(Sender:?TObject);
begin
Application.MessageBox('Too?Big','Test?Event!',MB_OK);
end;
procedure?TForm1.FormCreate(Sender:?TObject);
begin
FTooBig?:=?TooBigEvent;
end;
end.
轉(zhuǎn)載于:https://www.cnblogs.com/delphi-xe5/p/7476076.html
總結(jié)
以上是生活随笔為你收集整理的delphi自定义事件处理的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 哈鲁哈鲁是什么歌呢?
- 下一篇: redis面试总结