当前在做的一个项目,实时监控的一个东东,要求在网页上将监控的数据实时展现给用户,考虑用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. 自定义的事件实现方法和普通的没有什么太大的区别
    在对应的imp单元中声明的类中添加自己的方法定义
    在implementation中添加具体实现代码
      

  2. 你需要的是一个ActiveX Control控件,在新建一个ActiveX Control控件 的时候,必须从TCustomControl类继承下来。你可以先写一个从TCustomControl继承下来的组建,在这里面实现你需要的方法,然后安装到delphi的组建面板上,新建一个ActiveX Control从这个类继承,保存这个程序,不需要修改,编译后就是你需要的ActiveX Control
      

  3. 多谢Dlwxn(Dlwxn)。不过我想要的不是这个
      

  4. 在你的Events接口中添加一个处理函数原型
    然后在你需要的地方进行下面的调用,
    if FEvents <> nil then FEvents.OnRequest(Command, Message);不过我还没找到怎么在web page里能调用这个事件。在其它平台中可以激发这个事件,据msdn上说,好像要实现一个什么东东的接口才行。
      

类似问题 »