求教怎样为Automation object 添加事件?(100分)

  • 主题发起人 主题发起人 lytime
  • 开始时间 开始时间
L

lytime

Unregistered / Unconfirmed
GUEST, unregistred user!
各位热心高手:
我想为我的automation object 添加事件,
以使客户可以响应该事件。书上未见介绍,不知
怎样添家,特向各位请教。
 
automation是什么控件
 
在Type Library中好像没有添加一个事件的方法,
 
呵呵, automation object不支持事件的:-)
 
是啊!自动化对象好象不能这么做。
 
我也正在寻求答案呢!
在创建对象时选择generate event support code,
就有一个事件的接口,但不知如何用?
 
这个问题我可以解答:
在delphi 5中,当我们向dll或者exe添加Automation Object的时候,
delphi的询问对话框中又一个选项:
Generate Event Surport Code
选中这个选项就可以加入Event.
事实上,加入Event对于com服务器来说,要实现IConnectionPointContainer
和 IConnectionPoint这两个接口,而com客户部分可以通过从第一个接口得到
所有的服务器加入的Event,而用第二个接口来向服务器传递客户实现的Event的
处理过程的指针.
OLE Automation这么好用的东西怎么能没有事件呢?微软会这么傻吗?
 
下面是详细的方法,要的话,可以寄示例工程.
建立com服务器的事件(Using delphi)
服务器端:
1.建立服务器进程.可选择exe,dll.示例为Serverdll.dpr.
2.添加ole automation对象,使用delphi的new对话框添加,注意的是
要选中Generate Events Surport.示例中com server的名字是TTestClass.
接口为ITestClass.
3.使用Type library添加事件.在选中了Generate Events Surport的时候,
服务器类会自动加入ITestClassEvents.选中这个接口,利用上访的按钮,
加入一个方法(method),命名为OnTest,在示例中我们没有加入参数.
4.添加产生事件的过程.想编写所有的组件一样,我们必须编写这样一个方法,
在这个方法中能够触发事件.同样的,在Type library中,我们在ITestClass中
加入一个方法Test,并且在实现类TTestClass中为其添加下面的代码:
procedure TTestClass.Test;
begin
if FEvents<>nil then FEvents.OnTest
else ShowMessage('Not assigned');
end;
这同一般的组件的编写是相同的.
5.注册服务器.使用run菜单中的注册项.
客户端:
1.建立工程,可执行文件.示例为Clientexe.dpr.
2.引入Type library.使用Project菜单进行,可选择是否加入组件面板.
3.编写事件处理程序.在Clientexe工程的Form中添写一个方法:
procedure TForm1.TestEventToDo(sender:TObject);
begin
ShowMessage('OK');
end;
4.用一个按钮来进行测试:
procedure TForm1.Button1Click(Sender: TObject);
var Server:ITestClass;
Obj:TTestClass;
begin
Server:=(CoTestClass.Create as ITestClass);
Obj:=TTestClass.Create(self);
Obj.Connect;
Obj.OnTest:=TestEventToDo;
Obj.Test;
end;
这就像我们是用一般的com服务器一样,也与一般的事件处理程序类似.
同样我们还可以看到,当未给OnTest赋值的时候,会显示Not Assigned.
 
lczhuohuo:
麻烦你将示例工程Mailto: <a href="mailto:shenqw@21cn.com">shenqw@21cn.com</a> ,谢谢。
 
沈前卫:
好的,不过今天不行,我不在寝室里,改天吧
 
这个问题可以结束了吧,小弟等着分用!
 
沈前卫,你的信箱不行了
 
接受答案了.
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
2K
DelphiTeacher的专栏
D
后退
顶部