我把system32目录下的MSInet.ocx利用Delphi的ActiveX控件导入功能安装成功了,现在想知道这种Internet Transfer Control控件在Delphi中的用法。在VB中,已经利用它实现了如下的把网页数据送到txt的功能:
    ...
    Dim txt As String
    Dim b() As Byte
    Dim T As Integer
 
    b() = Inet1.OpenURL(URL, 1)
    txt = ""
    For T = 0 To UBound(b) - 1
        txt = txt + Chr(b(T))
    Next
请问在Delphi中,这段程序应该怎么写?(其中还涉及到动态数组上界的问题,希望能一起解决?)编译程序时,系统提示Inet1时未定义的变量,可是明明有了uses InetCtlsObjects_TLB和Inet1: TInet;的呀?谢谢了

解决方案 »

  1.   

    http://cache.baidu.com/c?word=msinet%3B%2E%3Bocx%2Cdelphi%2Cvar&url=http%3A//neweb%2Edhcn%2Enet/article/delphi/1585%2Eshtml&b=5&user=baidu在Delphi中可以有多种方法实现HTTP协议。可以用WinInet API函数(在Marco Cantu的《精通Delphi 5》中有很好的例子)或者Indy组件(在Delphi 6中应该整合了Indy,也可以在http://www.nevrona.com/Indy下载。这里我打算用Microsoft Internet Transfer Control 6.0,所以你需要在Delphi中Import类型库MSINET.OCX。在INET98.CHM帮助文件里面可以找到更多信息。这个控件用起来很简单,在我们的例子中也只需要一行代码:procedure TForm1.Button1Click(Sender: TObject);
    begin
    Label1.Caption :=
    inet1.OpenURL('http://localhost/scripts/webcalc.exe?x='+Edit1.Text+'&y='
    +Edit2.Text);
    end;控件向服务器发送请求,并且接收回答。OnStateChange事件允许我们得到操作的详细信息:procedure TForm1.Inet1StateChanged(Sender: TObject; State: Smallint);
    begin
    case state of
    icResolvingHost: statusbar1.Panels[0].Text :=
    ('寻找指定服务器的IP地址。');
    icHostResolved: statusbar1.Panels[0].Text :=
    (' 成功找到IP地址。');
    icConnecting: statusbar1.Panels[0].Text :=
    (' 正在连接到主机。');
    icConnected: statusbar1.Panels[0].Text :=
    (' 成功连接到主机。');
    icRequesting: statusbar1.Panels[0].Text :=
    (' 发送请求。');
    icRequestSent: statusbar1.Panels[0].Text :=
    (' 成功发送请求。');
    icReceivingResponse: statusbar1.Panels[0].Text :=
    ('接收主机回应。');
    icResponseReceived: statusbar1.Panels[0].Text :=
    (' 成功接收到主机回应。');
    icDisconnecting: statusbar1.Panels[0].Text :=
    (' 从服务器断开。');
    icDisconnected: statusbar1.Panels[0].Text :=
    ('成功从服务器断开。');
    icError: statusbar1.Panels[0].Text :=
    ('与服务器通讯发生错误。');
    icResponseCompleted: statusbar1.Panels[0].Text :=
    ('The request has completed and all data has been received');
    end;
    end;
    图一:客户端客户端应用程序做好了。它不自己做计算工作,而是依靠Webcalculator服务器完成任务。我们的Web services可以为任何人提供服务……下一个例子稍微高级些:使用XML传递变量。XML连初学者也应该掌握,它不过是储存和交换数据的一种标准格式而已。这回我用TNMHTTP的Post方法(在Delphi的FastNet控件组):Web.Post('http://localhost/scripts/webCalc.exe',' '+strX+'+strY+'); 这个命令做了所有工作,不同之处在于它用来传递结构化了的XML文档。服务器需要解析XML。这是我们需要另一种技术:Charlie Calvert在《Delphi中的XML解析》种作了详细说明。我将用MSXML.DLL库来做服务器端XML解析。你需要import这个Microsoft库到Delphi中。同样,在OnAction事件中加入代码:procedure TWebModule1.WebModule1WebActionItem1Action(Sender: TObject;
    Request: TWebRequest; Response: TWebResponse; var Handled: Boolean(;
    var
    doc : IXMLDOMdocument.
    ElemList: IXMLDOMNodeList;
    x, y:integer;
    begin
    Doc:= CreateOleObject('Microsoft.XMLDOM') as IXMLDOMdocument.
    Doc.loadXML (Request.ContentFields.Text );
    ElemList:= Doc.getElementsByTagName ('varX'):
    x:= StrtoIntDef(ElemList.item[0].text,0);
    ElemList:= Doc.getElementsByTagName ('varY);
    y:= StrtoIntDef(ElemList.item[0].text,0);
    Response.content:= #10+#13+InttoStr(x+y) ;
    end;可以用多种方法来读取XML文档。Microsoft XML SDK中有很好的文档。服务器做好了。XML被用来传递变量,而不只是x和y这么简单。
    DELPHI 5 与 SOAP 例子 不用等Delphi 6,我们可以马上开始用SOAP工作。可以下载SOAP Toolkit 2.0,在Delphi 5中创建Web service。在最后一个例子中,我们用它来实现Webcalculator。第一步,创建一个提供服务的COM对象。然后,构造一个WSDL(Web Service Description Language,Web服务描述语言)文件,用于Web services。幸运的是我们可以用SOAP Toolkit 2.0自动创建这些文件。最后一步,开发一个Delphi应用程序,它将使用服务。这样,我们要通过Delphi控制SOAP客户端。开始。第一个任务是创建简单的COM对象。它只有一个接口和一个方法:GetSum。ISummer = interface(Idispatch)
     function GetSum(const x: WideString; const y: WideString): WideString;
     safecall;function TSummer.GetSum(const x, y: WideString): WideString;
    begin
    Result:= InttoStr(SysUtils.StrtoInt(x)+ SysUtils.StrtoInt(y);
    end;{和前一个例子差不多,是吧?像做一个Active Server Object一样。用Delphi写简单ASP的方法。编译为ActiveX Dll,发布到ASP文件:}Set DelphiASPObj = Server.CreateObject("Project1.Summer")
    Response.Write ( DelphiASPObj.GetSum(Request.QueryString.Item("x"),
    Request.QueryString.Item("y")))
    Set DelphiASPObj = Nothing
    Response.End 
    图二 我们的COM Webcalculator,提供Web service如果不出意外的话,计算机可以开始工作了。在浏览器中输入http://localhost/scripts/webcalculator.asp?x=3&y=8之类的地址,应该返回答案了。接下来,安装SOAP Toolkit。下载地址:Microsoft - msdn-files/027/001/580/msdncompositedoc.xml。然后,从Toolkit菜单中选择WSDL生成器(generator)。输入服务名,ActiveX Dll的名称,还有生成WSDL、WSML的web目录。最后,用三行代码创建客户端:procedure TForm1.Button1Click(Sender: Tobject);var
    SoapClient: OleVariant;
    SoapClient := CreateOleObject('MSSOAP.SoapClient');
    begin
    SoapClient.mssoapinit('http://localhost/scripts/sumservice.wsdl','SumService','SummerSoapPort');
    showmessage(SoapClient.GetSum(Edit1.Text,Edit2.Text));
    end;搞掂啦。恭喜恭喜!我们拥有了自己的SOAP Webcalculator!
      

  2.   

    var txt: string; b: array[0..1024] of byte;i: integer;
    begin
     b :=Inet1.OpenURL(URL, 1);
     txt := '';
     for I:=0 to high(b) do
      txt := txt + chr(b(i));
      

  3.   

    用TIdHTTP控件行吗?在自定义函数中使用时,Memo1.Lines.Text := IdHTTP.Get(URL);
    为什么会提示[Error]Undeclared identifier: 'IdHTTP1'?
    还有在自定义函数中,连Memo1之类的控件都说是未定义那?
      

  4.   

    to:aiirii(ari-爱的眼睛)
    为什么在函数中不能正常地识别Inet1呀?老是说它未定义?
    谢谢你的帮助
      

  5.   

    在我的自定义函数中,为什么不能正常识别象Memo、Edit之类的控件和Inet之类的控件呀?
    应该怎么定义那?
    谢谢大家了
      

  6.   

    http://cache.baidu.com/c?word=msinet%3B%2E%3Bocx%2Cdelphi%2Cvar&url=http%3A//neweb%2Edhcn%2Enet/article/delphi/1585%2Eshtml&b=5&user=baidu
      

  7.   

    to:aiirii(ari-爱的眼睛) 
        high(b)不能正常地确定数组(动态和静态)的实际大小,有什么方法可以吗?
        另外b :=Inet1.OpenURL(URL, 1);这种方法好象提示有array和olevariant的不匹配问题耶,给数组赋值,是这样的吗?
        谢谢你们的关心和帮助
      

  8.   

    high(b)不能正常地确定数组(动态和静态)的实际大小,请问有什么函数可以实现吗?
        在b :=Inet1.OpenURL(URL, 1);中,提示有array和olevariant的不匹配问题,给数组赋值,是这样的吗?