事件(Event)编程,好玩.
{看了事件编程觉得很有趣,特向大家介绍心得.}
unit unit1;
uses
....
type
//定义一个我的事件.
TMyEvent :procedure(Sender :TObject;var Param :string) of Object;
TMyClass=class(TObjec)
private
FActive:Boolean;
FParam:string;
FEvent:TMyEvent;
procedure SetState(Value:boolean);
public
constructor Create(AOwner: TComponent);override;
procedure Open;
procedure Close;
publish
property Active :boolean read FActive write SetState;
property Param :string read FParam;
Event :TMyEvent read FEvent write FEvent;
end;
type
TForm1=class(TForm)
Button1:TButton1;
procedure Oncreate(Sender :TObject);
procedure ButtonOnClick(Sender :TObject);
private
Object:TMyClass;
procedure MyEvent(Sender:TObject;var Param:string);
public
end;
procedure TForm1.Oncreate(Sender :TObject);
begin
Object:=TMyClass.Create(Self);
Object.Event:=MyEvent;
end;
////////////////////////////////////////////////////
可以去掉这个procedure 看有什么效果.
procedure MyEvent(Sender:TObject;var Param:string);
begin
Param:='hello,test';
end;
////////////////////////////////////////////////////
procedure ButtonOnClick(Sender :TObject);
begin
Object.Open;//or Object.Close;
ShowMessage(Object.Param);
end;
procedure TMyClass.Create(AOwner :TComponent);
begin
FParam:='';
FActive:=False;
inherited Create(Self);
end;
procedure TMyClass.Open;
begin
SetState(True);
end;
procedure TMyClass.Close;
begin
SetState(False);
end;
procedure TMyClass.SetState(Value:boolean);
begin
if Value then
begin //事件处理.
if Assigned(Event) then Event(Self,FParam) else FParam='类对象没有调用Event事件';
end else if not Value then
begin
FParam:='类对象现在是没有激活(False Active)状态.';
end;
FActive:=Value;
end;
//欢迎大家来讨论事件编程