事件(Event)编程,好玩.

saoren 2001-01-16 01:04:00
{看了事件编程觉得很有趣,特向大家介绍心得.}

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;

//欢迎大家来讨论事件编程
...全文
174 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
saoren 2001-01-17
  • 打赏
  • 举报
回复
oh,天,没人玩过事件编程?????????????????
TechnoFantasy 2001-01-17
  • 打赏
  • 举报
回复
原来是这个,我以为是IConnectionPoint 接口和COM的呢
www.applevb.com
saoren 2001-01-17
  • 打赏
  • 举报
回复
to zj1978
我也知道这是最基本的技术,但是由于一些控件继承的类层次太低了。所以它的事件有些都是不知去哪里找,哪里调用。呼,其实我昨天是在找DCOMConnection中Connected为真时,找它的怎么连接到DCOM Server ,半天也没找到,还有它的ServerName.烦死了,那DCOMConnection.
saoren 2001-01-17
  • 打赏
  • 举报
回复
我写的上面的代码,只是看到VCL的源程序,明白了事件编程的道理,很是过瘾,所以快快写了一个例子,给大家示例,一块讨论。是直接写出来的,没有到delphi中试,只是我把知道的写一个类出来,所以可能会有些错。
上面的事件我是看了那些一般的控件的过程:Close,Open;体会出来的。
它们的基本过程序就是像上面一样:
procedure TClass.Close;
begin
procedure1(False);
end;
procedure TClas.Open;
begin
procedure1(True);
end;
而后:
procedure TClass.Procedure1(Value:boolean);
begin
//开始事件1处理。
if Assigned(SomeEvent1) then SomeEvent1(Param1,Param2...);//如果用户编写了SomeEvent1,则处理SomeEvent1,相当于一个过程。
//中间数据处理
//process...
//事件2处理。
if Assigned(SomeEvent) then SomeEvent2(Param1,Param2...);
end;
zj1978 2001-01-17
  • 打赏
  • 举报
回复
这应该是最基本的技术了
wzs 2001-01-17
  • 打赏
  • 举报
回复
我知道好玩!我现在正在努力中....希望以后多多交流也更希望高手们多多多多讲些心得!

5,927

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧