Delphi下載指定網址(URL)的檔案,帶進度條顯示

一劍平江湖發表於2013-12-10

主要使用的是Delphi自帶的TIdhttp控制元件。

一、介面設定

在窗體上放置兩個TEdit控制元件,一個用於輸入要下載的檔案URL,一個用於輸入要儲存到本地的檔案路徑;放置兩個TLabel控制元件,一個顯示檔案總大小,一個顯示當前已下載大小;放置一個按鈕TButton,一個TIdhttp控制元件(在Indy Clients皮膚)和一個TIdAntiFreeze控制元件(放置該控制元件可避免下載過程中程式無響應,在Indy Misc皮膚)。

二、主要程式碼

//1. 位元組數轉換為KB或MB字串
function BytesToStr(iBytes: Integer): String;
var
  iKb: Integer;
begin
  iKb := Round(iBytes / 1024);
  if iKb > 1000 then
    Result := Format('%.2f MB', [iKb / 1024])
  else
    Result := Format('%d KB', [iKb]);
end;

//2.  Idhttp1控制元件的OnWorkBegin事件程式碼,用於獲取檔案總大小
procedure TForm1.IdHTTP1WorkBegin(Sender: TObject; AWorkMode: TWorkMode;
  const AWorkCountMax: Integer);
begin
  ProgressBar1.Max := aWorkCountMax;
  Label2.Caption := BytesToStr(iWorkCountMax);
  Update;
end;

//3. Idhttp1控制元件的OnWork事件響應程式碼,用於更新檔案下載進度
procedure TForm1.IdHTTP1Work(Sender: TObject; AWorkMode: TWorkMode;
  const AWorkCount: Integer);
begin
  Label1.Caption := BytesToStr(aWorkCount);
  ProgressBar1.Position := aWorkCount;
  Update;
end;

//4. 按鈕Button1的點選事件程式碼
procedure TForm1.Button1Click(Sender: TObject);
var 

  tStream: TMemoryStream;
begin
  tStream := TMemoryStream.Create;
  try
    IdHTTP1.Get(Edit1.Text, tStream); //儲存到記憶體流
    tStream.SaveToFile(Edit2.Text); //儲存為檔案
    ShowMessage('下載成功!');

  except
    ShowMessage('下載失敗!');
  end;
  tStream.Free;
  end;

以上程式碼在Delphi7編譯環境下測試通過。

相關文章