做了一个activex控件.
添加了一个idupdserver,一个button,idupdserver接收远程 idudpclient的数据.IdUDPServer1UDPRead事件中是一些通讯接收内容在buttonClick事件中加入
IdUDPServer1.DefaultPort:=1999; IdUDPServer1.Active:=true; 当生成ocx控件后在网页中调中点击actvie控件中的button不会接收远程的数据.
但在activex的button事件改为:IdUDPServer1.DefaultPort:=1999; IdUDPServer1.Active:=true; 
showmessage('ddddd');
这样就可以了.好像是控件本身激活问题
请问各位高手具体是什么原因.如何解决.谢谢

解决方案 »

  1.   

    在buttonClick事件中加入
    IdUDPServer1.DefaultPort:=1999; IdUDPServer1.Active:=true; 当生成ocx控件后在网页中调中点击actvie控件中的button不会接收远程的数据.
    但在activex的button事件改为:IdUDPServer1.DefaultPort:=1999; IdUDPServer1.Active:=true; 不大明白这两段代码有何区别~~~~
      

  2.   

    谢谢zuoansuifeng(左岸xiaocai800322(走自己的路)  两段代码的区别就是多了一句showmessage.当界面弹出showmessage窗口时通讯正常.似乎与控件激活有关.汗一把!
      

  3.   

    定义一个active属性,然后再赋值的时候执行procedure Tactivex.Set_active(const Value: WideString);
    begin
      IdUDPServer1.DefaultPort:=1999; IdUDPServer1.Active:=true;
    end;另外你可以写个js来加载你得activex组件
    function insertocx(elm) 
    {
    var str = '';
    str += '<object height="620" classid="clsid:8E55EAA3-342E-4931-B526-688AD9BD6659" VIEWASTEXT>'
    str += '<PARAM NAME="Visible" VALUE="0">'
    str += '<PARAM NAME="AutoScroll" VALUE="0">'
    str += '<PARAM NAME="AutoSize" VALUE="0">'
    str += '<PARAM NAME="AxBorderStyle" VALUE="1">'
    str += '<PARAM NAME="Caption" VALUE="synjonPic">'
    str += '<PARAM NAME="Color" VALUE="16711422">'
    str += '<PARAM NAME="Font" VALUE="MS Sans Serif">'
    str += '<PARAM NAME="KeyPreview" VALUE="0">'
    str += '<PARAM NAME="PixelsPerInch" VALUE="96">'
    str += '<PARAM NAME="PrintScale" VALUE="1">'
    str += '<PARAM NAME="Scaled" VALUE="-1">'
    str += '<PARAM NAME="DropTarget" VALUE="0">'
    str += '<PARAM NAME="HelpFile" VALUE="">'
    str += '<PARAM NAME="ScreenSnap" VALUE="0">'
    str += '<PARAM NAME="SnapBuffer" VALUE="10">'
    str += '<PARAM NAME="DoubleBuffered" VALUE="0">'
    str += '<PARAM NAME="Enabled" VALUE="-1">'
    str += '<PARAM NAME="activex" VALUE='1'>'
    document.getElementById(elm).innerHTML = str;
    }
    <%@ Page language="c#" Codebehind="Add.aspx.cs" AutoEventWireup="false" Inherits="EPWeb.Config.Add" %>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
    <HTML>
    <HEAD>
    <title>Add</title>
    <meta name="GENERATOR" Content="Microsoft Visual Studio .NET 7.1">
    <meta name="CODE_LANGUAGE" Content="C#">
    <meta name="vs_defaultClientScript" content="JavaScript">
    <meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
    <script type="text/javascript" src="c.js"></script>
    </HEAD>
    <body bottomMargin="0" leftMargin="0" topMargin="0" rightMargin="0">
    <form id="Form1">
    <div id="pic1"><FONT face="宋体"></FONT>
    <script type="text/javascript">
    insertocx('pic1');
    </script>
    </div>
    </form>
    </body>
    </HTML>
      

  4.   

    谢谢hongqi162(失踪的月亮),试了一下你的方法.好像还是不行.
    IdUDPServer1.DefaultPort:=1999; IdUDPServer1.Active:=true;原先代码写在button 中点击是执行了的.IdUDPServer1UDPRead事件不执行.但加一句showmessage.IdUDPServer1UDPRead事件就开始执行了.汗.
      

  5.   

    谢谢各位.已解决!
    原来将IdUDPServer1中的threadedevent属性设为true即可.
      

  6.   


    IdUDPServer1UDPRead 这个事件还是不执行