我把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;的呀?谢谢了
...
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;的呀?谢谢了
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!
begin
b :=Inet1.OpenURL(URL, 1);
txt := '';
for I:=0 to high(b) do
txt := txt + chr(b(i));
为什么会提示[Error]Undeclared identifier: 'IdHTTP1'?
还有在自定义函数中,连Memo1之类的控件都说是未定义那?
为什么在函数中不能正常地识别Inet1呀?老是说它未定义?
谢谢你的帮助
应该怎么定义那?
谢谢大家了
high(b)不能正常地确定数组(动态和静态)的实际大小,有什么方法可以吗?
另外b :=Inet1.OpenURL(URL, 1);这种方法好象提示有array和olevariant的不匹配问题耶,给数组赋值,是这样的吗?
谢谢你们的关心和帮助
在b :=Inet1.OpenURL(URL, 1);中,提示有array和olevariant的不匹配问题,给数组赋值,是这样的吗?