これは Delphi Advent Calendar 補欠の記事です。
#落とし穴を埋める
落とし穴1と落とし穴2を、まとめて何とかするクラス TDownloadThread を作りました。
これを使うと簡単にダウンローダーが実装できます。
たとえば、こんな感じです。
procedure TDownloadManager.Start;
begin
FListener.StartDownload;
// 作成と同時にダウンロード開始(FreeOnTerminate = True なので自動解放)
FDownloader :=
TDownloadThread.Create(
FFileName,
FURL,
FPort,
False,
DownloadProgress,
DownloadComplete);
end;
procedure TDownloadManager.DownloadComplete(
Sender: TObject;
const iSuccess: Boolean);
begin
// ダウンロード完了
FListener.EndDownload;
end;
procedure TDownloadManager.DownloadProgress(
Sender: TObject;
const iRead, iTotal: Integer;
var ioAbort: Boolean);
begin
// 進捗イベント
FListener.DownloadProgress(iRead, iTotal);
end;
実際に使うためには、もっと汎用化して Basic 認証などにも対応したり、非ビジュアルコンポーネント化してあげたら良いと思います。
(と、いいつつ、僕はほぼこのままのクラスを使っていますが)