在delphi 7中使用idhttp抓取網頁,造成窗口無反應的假死狀態。通過搜索獲得兩種方法。
1.寫在線程中,但是調用比較麻煩
2.使用delphi 提供的idantifreeze(必須安裝indy)。在indy misc中將idfreeantifreeze放入程序中,
將OnlyWhenIdle狀態修改為False即可。方便簡單。
=====================================
直接采用Delphi自帶Control控件
INDY組件為例.新建個工程,放上個TIdHTTPControl控件,一個TIdAntiFreezeControl控件,一個TProgressBar用於顯示下載進度.最后放上一個TButton用於開始執行我們
命令.代碼如下:
procedure TForm1.Button1Click(Sender: TObject);//點擊按鈕時候開始下載我們
文件
var
MyStream:TMemoryStream;
begin
IdAntiFreeze1.OnlyWhenIdle:=False;//設置使有反應.
MyStream:=TMemoryStream.Create;
try
IdHTTP1.Get('http://www.138soft.com/download/Mp3ToExe.zip',MyStream);//下載我站點一個ZIP文件
except//INDYControl控件一般要使用這種try..except結構.
Showmessage('網絡出錯!');
MyStream.Free;
Exit;
end;
MyStream.SaveToFile('c:\Mp3ToExe.zip');
MyStream.Free;
Showmessage('OK');
end;
procedure TForm1.IdHTTP1WorkBegin(Sender: TObject; AWorkMode: TWorkMode;
const AWorkCountMax: Integer);//開始下載前,將ProgressBar1最大值設置為需要接收
數據大小.
begin
ProgressBar1.Max:=AWorkCountMax;
ProgressBar1.Min:=0;
ProgressBar1.Position:=0;
end;
procedure TForm1.IdHTTP1Work(Sender: TObject; AWorkMode: TWorkMode;
const AWorkCount: Integer);//接收數據時候,進度將在ProgressBar1顯示出來.
begin
ProgressBar1.Position:=ProgressBar1.Position+AWorkCount;
end;
IdHTTP1Get還有一種形式就是獲取
串:例如,上面
可以改寫成:
procedure TForm1.Button1Click(Sender: TObject);
var
MyStr:String;
begin
IdAntiFreeze1.OnlyWhenIdle:=False;//設置使有反應.
try
MyStr:=IdHTTP1.Get('http://www.138soft.com/default.htm');
except
Showmessage('網絡出錯!');
Exit;
end;
Showmessage(MyStr);
end;
出處:http://hi.baidu.com/yuqingtan/blog/item/a9771c3d793cb6f73c6d9737.html
http://www.vckbase.com/module/articleContent.php?id=4385
http://www.cnblogs.com/key-ok/p/3533379.html