加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

在Delphi的线程中从Internet下载文件

发布时间:2020-12-15 09:16:38 所属栏目:大数据 来源:网络整理
导读:如何在不使用Indy组件的情况下使用Delphi 2009/10中的线程从进度条下载带有进度条的文件? 解决方法 这使用聪明的互联网套件来处理下载,我没有在IDE中检查它,所以我不希望它编译,毫无疑问它充满了错误,但它应该足以让你开始. 我不知道为什么你不想使用Indy,
如何在不使用Indy组件的情况下使用Delphi 2009/10中的线程从进度条下载带有进度条的文件?

解决方法

这使用聪明的互联网套件来处理下载,我没有在IDE中检查它,所以我不希望它编译,毫无疑问它充满了错误,但它应该足以让你开始.

我不知道为什么你不想使用Indy,但我强烈建议让一些组件来帮助Http下载…真的没有必要重新发明轮子.

interface
type
    TMyDownloadThread= Class(TThread)
    private
        FUrl: String;
        FFileName: String;
        FProgressHandle: HWND;
        procedure GetFile (Url: String; Stream: TStream; ReceiveProgress: TclSocketProgressEvent);
        procedure OnReceiveProgress(Sender: TObject; ABytesProceed,ATotalBytes: Integer);
        procedure SetPercent(Percent: Double);
    protected
        Procedure Execute; Override;
    public
        Constructor Create(Url,FileName: String; PrograssHandle: HWND);
    End;

implementation

constructor TMyDownloadThread.Create(Url,FileName: String; PrograssHandle: HWND);
begin
    Inherited Create(True);
    FUrl:= Url;
    FFileName:= FileName;
    FProgressHandle:= PrograssHandle;
    Resume;
end;


procedure TMyDownloadThread.GetFile(Url: String; Stream: TStream; ReceiveProgress: TclSocketProgressEvent);
var
    Http: TclHttp;
begin
    Http := TclHTTP.Create(nil);
    try
        try
            Http.OnReceiveProgress := ReceiveProgress;
            Http.Get(Url,Stream);
        except
        end;
    finally
        Http.Free;
    end;
end;

procedure TMyDownloadThread.OnReceiveProgress(Sender: TObject; ABytesProceed,ATotalBytes: Integer);
begin
    SetPercent((ABytesProceed / ATotalBytes) * 100);
end;

procedure TMyDownloadThread.SetPercent(Percent: Double);
begin
    PostMessage(FProgressHandle,AM_DownloadPercent,LowBytes(Percent),HighBytes(Percent));
end;

procedure TMyDownloadThread.Execute;
var
    FileStream: TFileStream;
begin
    FileStream := TFileStream.Create(FFileName,fmCreate);
    try
        GetFile(FUrl,FileStream,OnReceiveProgress);
    finally
        FileStream.Free;
    end;        
end;

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读