当前在做的一个项目,实时监控的一个东东,要求在网页上将监控的数据实时展现给用户,考虑用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;
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;
解决方案 »
- 服务端如何接收消息
- 为什么现在大多知名的软件都是VC写的,DELPHI太少了,难道DELPHI比VC少什么吗?功能没VC强大,还是怎么的
- 我有同学的一个delphi程序源码 我想重新编译一下 但我在数据库代码部分遇到问题
- View 和 Table的最本質的區別
- 如何控制在scrollbox里的一张大图在按scrollbox向下滚动时不让图片跟着动?scrollbox在上下左右滚动时会确发那个事件?
- Mysql 是否支持ADO连接,如果支持怎么连接
- 怎么用呀?我得到函数的地址了……
- 祝大家新年快乐!
- DynamicSkinForm 4.1 for d6 的crack谁有啊?
- 一个DBGRID的问题!
- 怎样可以使synedit像dos输入框一样?
- 是否可用循环的方法设置多个组件的属性?
在对应的imp单元中声明的类中添加自己的方法定义
在implementation中添加具体实现代码
然后在你需要的地方进行下面的调用,
if FEvents <> nil then FEvents.OnRequest(Command, Message);不过我还没找到怎么在web page里能调用这个事件。在其它平台中可以激发这个事件,据msdn上说,好像要实现一个什么东东的接口才行。