如何打开服务器上的文件(80分)

  • 主题发起人 主题发起人 lig
  • 开始时间 开始时间
L

lig

Unregistered / Unconfirmed
GUEST, unregistred user!
同题.如何打开一个服务器上的文件,如打开一个网页.并将其装入到
TStringList类变量中.请给出实例.谢谢!
 
如果是网页,可以用 TNMHttp 控件
 
对不起,我对这个问题的描述出现了一些错误。我的本意是如何编程查看当前IE窗口
(不是程序内嵌的那种)的HTML文件源码(IE查看菜单下的源文件项那样的功能)。
 
你可以先得到 ie 当前地址栏中的 text (已经有讨论),
然后在程序中直接 loadfromfile..
 
有好的答复mail一份我
 
to SuperMMX:
直接打开如http://www.cmmail.com这样的网址网页可以吗?
 
这个问题我搞定了,但是具体的代码需要几天后再贴出来.
如果你的条件的话,那么可以看<DELPHI4.0从入门到精通>的第798页.
另外,请问大家如何向IE那样快速打开当前正在访问的网页源码?
 
要不然先存一个临时文件,再读取。
 
现在我知道的有两种方法,一种是使用Internet族函数来进行读写。
方法一:
unit Read;

interface

uses
Classes,Wininet,Windows,Messages,SysUtils,Forms;

type
TReadUrlFile = class(TThread)
private
{ Private declarations }
strRead:string;
procedure WriteToMemo;
protected
procedure Execute; override;
public
UrlName:String;
end;

implementation

uses ligwin2;

procedure TReadUrlFile.Execute;
label
lab;
var
hHttpSession, hReqUrl:HInternet;
Buffer:array [0..65536] of Char;
nRead:DWORD;
begin
strRead:='';
hHttpSession:=InternetOpen('FindWeb',0,nil,nil,0);
try
hReqUrl:=InternetOpenURL(hHttpSession,PChar(UrlName),nil,0,0,0);
if hReqUrl=nil then
begin
InternetCloseHandle(hHttpSession);
MessageBox(0,'查找主机时出错!','提示信息',MB_OK+MB_ICONERROR);
exit;
end;
try
lab:
InternetReadFile(hReqUrl,@Buffer,65536,nRead);
if nRead=65536 then
begin
strRead:=strRead+string(Buffer);
goto lab;
end
else
begin
Buffer[65535]:=Char(0);
strRead:=strRead+string(Buffer);
end;
Application.ProcessMessages;
finally
InternetCloseHandle(hReqUrl);
end;
finally
InternetCloseHandle(hHttpSession);
end;
if strRead<>'' then
Synchronize(WriteToMemo);
end;

procedure TReadUrlFile.WriteToMemo;
begin
Form1.Memo1.Lines.Text:=strRead;
end;

end.
以上是一个线程,之所以把其写成一个线程是为了防止从Internet上读取HTML源码时造成的程序无法响应界面更新和用户输入(像DOWNLOAD掉了一下)。
使用时方法如下:
procedure TForm1.Button1Click(Sender: TObject);
var
ReadUrlFile:TReadUrlFile;
begin
if Edit1.Text='' then
begin
MessageBox(Handle,'请您输入一个网址!','提示信息',MB_OK+MB_ICONERROR);
exit;
end;
ReadUrlFile:=TReadUrlFile.Create(true);
ReadUrlFile.FreeOnTerminate:=true;
ReadUrlFile.UrlName:=Edit1.Text;
ReadUrlFile.Resume;
end;
方法二:
著名的ICS组件包中有一个HTTP组件,使用其可以同样实现在INTERNET上读取HTML源
码的功能,它所使用的是WINSOCK的方法,有具体的例子可以参考。但是具体原理我
还尚待研究。
以上两种方法仅供参考。如果您有更好的办法也欢迎您拿出来与大家共享。
 
后退
顶部