又名:将事件作为参数进行传递实例
首先要明白DELPHI中的事件是指针来的。
1 声明一个事件:
type
TChangeEvent = procedure (ASelectType, AResultID :string) of object;
2 定义一个类(uDataListview.pas)
typeTListDataObject=class
private
FChangeEvent :TChangeEvent;
procedure DoChange(Sender: TObject);
public
property proChangeEvent :TChangeEvent read FChangeEvent write FChangeEvent;//通过事件读写可以随意执行本类外的东西
end;
{TListDataObject}
procedure TListDataObject.DoChange(Sender: TObject);
var
LPara1, LPara2 :string;
begin
LPara1 := '参数1';
LPara2 := '参数2';
if Assigned(FChangeEvent) then
FChangeEvent(LPara1, LPara2)
end;
3 定义一个全局变量及调用方法
var
gListDataObject :TListDataObject;
procedure ShowDataListview(AOwner :TWincontrol; AChangeEvent :TChangeEvent=nil);
//AChangeEvent必需赋nil否则会提示[Error] uDataListview.pas(86): Default value required for 'AChangeEvent'
implementation
{$R *.dfm}
procedure ShowDataListview(AOwner :TWincontrol; AChangeEvent :TChangeEvent=nil);
begin
if gListDataObject = nil then
gListDataObject := TListDataObject.Create(AOwner);
gListDataObject.proChangeEvent := AChangeEvent;
end;
4调用,其它任何单元调用ShowDataListview
假设在unit1.pas中调用,
a.在private定义一个过程:
procedure DoChangeEvent(ASelectType, AResultID :string);
b.实现
procedure TForm1.DoChangeEvent(ASelectType, AResultID :string);
begin
ShowMessage(ASelectType + ' ' + AResultID);//这里随便写的
end;
c.假设本单元有一个按钮btnShow,此按钮调用ShowDataListview,实现如下
procedure TForm1.btnShowClick(Sender :TObject)
begin
ShowDataListview(Self, DoChangeEvent);
end;
将事件作为参数的好处是具体调用的时候作具体处理,灵活方便,就像写一个线程传递一个事件,就可以灵活处理各种情况