请教:如何ActiveX添加自定义事件?
当前在做的一个项目,实时监控的一个东东,要求在网页上将监控的数据实时展现给用户,考虑用ActiveX+HTML实现:
1. 服务器收到数据包,通过Socket将数据包发给ActiveX
2. ActiveX收到数据包,触发自定义事件,将数据包发送给网页的JavaScript
3. JavaScript更新页面上的内容
这个自定义事件在Delphi里如何实现?刚才上网查了一些资料,都没有详细说明这个步骤,还望各位DX指点一下。
目前我只知道:Type Library --> New Method,接下去的步骤就搞不懂了。
//以下这段是Socket客户端接收消息
procedure TafxSck.OnSocketRead(var message: TMessage);
var
pHeadBuf, pBodyBuf: PChar;
iHeadLen, iBodyLen: Integer;
myPack: PMyPack;
sMsg: string;
iRet: Integer;
begin
iHeadLen := SizeOf(TMyPack);
case WSAGETSELECTEVENT(message.lParam) of
FD_READ: //Socket有数据需要读取
begin
GetMem(pHeadBuf, iHeadLen);
iRet := Recv(xl_socket, pHeadBuf^, iHeadLen, 0); //读取包头
if iRet = SOCKET_ERROR then
begin
systemLog('Read Error!');
Exit;
end
else
begin
myPack := PMyPack(pHeadBuf); //解析出包头
iBodyLen := myPack^.PackLen; //得到包体的长度
if iBodyLen > 0 then
begin
//再读取包体
GetMem(pBodyBuf, iBodyLen);
iRet := Recv(xl_socket, pBodyBuf^, iBodyLen, 0);
if iRet = SOCKET_ERROR then
begin
systemLog('Read Error!');
Exit;
end;
sMsg := string(pBodyBuf);
FreeMem(pBodyBuf, iBodyLen);
//*******到这里,我已经得到服务器传过来的数据包了,这里要如何触发自定义的事件???
end;
end;
end;
FD_CLOSE:
begin
systemLog('Socket Closed!');
end;
end;
end;
问题点数:100、回复次数:9Top
1 楼weyoung(有来有去)回复于 2006-03-09 01:53:54 得分 0
请路过的DX指点一下。
MSN: weyoung@163.net
QQ: 21998699
多谢!Top
2 楼weyoung(有来有去)回复于 2006-03-09 08:53:08 得分 0
顶一下Top
3 楼jilu_sun(Godfather)回复于 2006-03-09 10:07:07 得分 0
自定义的事件实现方法和普通的没有什么太大的区别
在对应的imp单元中声明的类中添加自己的方法定义
在implementation中添加具体实现代码
Top
4 楼weyoung(有来有去)回复于 2006-03-09 14:18:35 得分 0
楼上兄弟能说的明白一些吗?最好给点例子,哈哈Top
5 楼Dlwxn(Dlwxn)回复于 2006-03-09 16:05:11 得分 5
你需要的是一个ActiveX Control控件,在新建一个ActiveX Control控件 的时候,必须从TCustomControl类继承下来。
你可以先写一个从TCustomControl继承下来的组建,在这里面实现你需要的方法,然后安装到delphi的组建面板上,新建一个ActiveX Control从这个类继承,保存这个程序,不需要修改,编译后就是你需要的ActiveX ControlTop
6 楼weyoung(有来有去)回复于 2006-03-09 16:52:28 得分 0
多谢Dlwxn(Dlwxn)。不过我想要的不是这个。。。Top
7 楼weyoung(有来有去)回复于 2006-03-09 20:01:26 得分 0
顶Top
8 楼ljy(ljy)回复于 2006-03-11 13:59:59 得分 95
在你的Events接口中添加一个处理函数原型
然后在你需要的地方进行下面的调用,
if FEvents <> nil then FEvents.OnRequest(Command, Message);
不过我还没找到怎么在web page里能调用这个事件。在其它平台中可以激发这个事件,据msdn上说,好像要实现一个什么东东的接口才行。Top
9 楼weyoung(有来有去)回复于 2006-03-13 10:41:39 得分 0
问题已经解决。多谢ljyTop




