我想用下面代码实现下载文件(这已实行),问怎样显示下载进度! (100分)

  • 主题发起人 主题发起人 linjifan
  • 开始时间 开始时间
L

linjifan

Unregistered / Unconfirmed
GUEST, unregistred user!
procedure TForm1.Button1Click(Sender: TObject);
begin
if DownloadFile ('http://192.168.0.8/index.htm', 'c:/index.htm') then
begin
ShowMessage('下载成功。');
end
else
ShowMessage('下载不成功。')
end;
 
DownloadFile 应该是你自己定义的函数吧,在里面加进度显示。
 
在used 中加入urlmon

function DownloadFile(Source, Dest: string): Boolean;
begin
try
Result := UrlDownloadToFile(nil, PChar(source), PChar(Dest), 0, nil) = 0;
except
Result := False;
end;
end;

进度器怎么加! 我没有用过!
 
HRESULT URLDownloadToFile(
LPUNKNOWN pCaller,
LPCTSTR szURL,
LPCTSTR szFileName,
DWORD dwReserved,
LPBINDSTATUSCALLBACK lpfnCB
);
其中最后一个参数是CallBack函数啊,就是在这个函数里处理比如进度之类的控制的。
具体的使用还是看MSDN吧,里面有这个函数的介绍。
我没有用过这个函数,还得自己摸索吧
 
用这个东西不嫌麻烦,
要实现一个IBindStatusCallBack接口。 :(
 
//刚给birch2002作的,不知对你有没有用。
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ComCtrls, IdBaseComponent, IdComponent, IdTCPConnection,
IdTCPClient, IdHTTP, StdCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
IdHTTP1: TIdHTTP;
ProgressBar1: TProgressBar;
procedure Button1Click(Sender: TObject);
procedure IdHTTP1WorkBegin(Sender: TObject; AWorkMode: TWorkMode;
const AWorkCountMax: Integer);
procedure IdHTTP1WorkEnd(Sender: TObject; AWorkMode: TWorkMode);
procedure IdHTTP1Work(Sender: TObject; AWorkMode: TWorkMode;
const AWorkCount: Integer);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
tmpStream:TFileStream;
begin
tmpStream:=TFileStream.Create('c:/index.htm',fmCreate);
try
idhttp1.Get('http://192.168.0.8/index.htm',tmpStream);
finally
tmpStream.Free;
end;

end;

procedure TForm1.IdHTTP1WorkBegin(Sender: TObject; AWorkMode: TWorkMode;
const AWorkCountMax: Integer);
begin
ProgressBar1.Max:=AWorkCountMax;
end;

procedure TForm1.IdHTTP1WorkEnd(Sender: TObject; AWorkMode: TWorkMode);
begin
ProgressBar1.Position:=0;
end;

procedure TForm1.IdHTTP1Work(Sender: TObject; AWorkMode: TWorkMode;
const AWorkCount: Integer);
begin
ProgressBar1.Position:=AWorkCount;
end;

end.
 
iapollo
但你的这个程序,怎么判断文件是否下载完成阿!
并如果下载中网络段开了,一些出段代现怎么控制阿!
 
>>但你的这个程序,怎么判断文件是否下载完成阿!
下载完成触发IdHTTP1WorkEnd事件。
>>并如果下载中网络段开了,一些出段代现怎么控制阿!
以上代码没有考虑这个问题,要是这样的话你可以参考端点传续的例子。
 
后退
顶部