delphi 7中使用idhttp抓取網頁 解決假死現象(使用TIdAntiFreezeControl控件)


在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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM