紧急!怎样在所有下载任务完成后给出提示?(20分)

A

asdqwe

Unregistered / Unconfirmed
GUEST, unregistred user!
在CheckListBox里有多项下载任务,我想在所有下载任务完成后弹出提示对话框,但现在的结果是
每完成一个下载任务就会弹出一个对话框,我只想要最终显示一次就行了。
procedure TForm1.CheckListBox1Click(Sender: TObject);
var
i:integer;
begin
n:=0;
//n为全局变量,存放了下载任务的个数
for i:=0 to CheckListBox1.Count-1do
if CheckListBox1.Checked then
inc(n);
end;

procedure TForm1.IdHTTP2WorkEnd(Sender: TObject;
AWorkMode: TWorkMode);
var
i: Integer;
begin
i:=0;
while i<>ndo
begin
inc(i);
end;
if i=n then
ShowMessage('ok');
end;

在idHttpWorkEnd里,每完成一个下载任务,i就加一次,当i等于n的个数时,就弹出对话框,
但现在代码有问题,每下载一个后就会显示对话框,请各位帮我改一下,谢谢!
 
你的代码当让有问题了!
IdHTTP2WorkEnd(Sender: TObject;
AWorkMode: TWorkMode);
在每一个下载完成后都会执行,
因而
while i<>ndo
begin
inc(i);
end;
每次都执行,这样while 执行完毕i肯定等于n;
if i=n then
ShowMessage('ok');
也会每次执行!
你只要声明一个全局变量
var compeltecount:integer;
procedure TForm1.IdHTTP2WorkEnd(Sender: TObject;
AWorkMode: TWorkMode);
begin
inc(compeltecount);
if compeltecount=n then
ShowMessage('ok');
end;
这样你要的功能就完成了

 
我试过了,还是不行啊!
procedure TForm1.IdHTTP1WorkEnd(Sender: TObject;
AWorkMode: TWorkMode);
begin
//Complete:=0;
//这句要不要都一样
inc(Complete);
if Complete=n then
ShowMessage('ok');
end;

Complete为全局变量,现在效果是一个提示对话框都没有了?怎么回事啊?
 
要两个全局变量,一个放总数,一个放累计数,
累计数 init=0;
WorkEnd中inc(累计数),当累计数=总数,showmessage;
 
我是这样做的啊,不行啊[:(]
 
怎么没人告诉我了?
 
谁来告诉我啊?!!![:(][:(][:(]
 
靠!
真的没人知道了吗?
要不要我重开贴,多上点分啊?!
 
请各位帮忙UP一下,问题解决了在这里拿分!
http://www.delphibbs.com/delphibbs/dispq.asp?lid=1488805
 
--> //Complete:=0;
//这句要不要都一样
这里就大有问题,怎么会要不要都一样?
告诉你了: 累计数 init=0;
就是要在程序初始化或进入下载任务时就令Complete:=0;
如果在这里Complete:=0;
再 inc(Complete);
你的 Complete永远=1, 这样除了n=1, 你就看不到对话框,
其实只要你跟踪下complete变量的值,应该很快就发现问题了。
不要跟我说你不会跟踪,不然要打屁股。

 
多人接受答案了。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
752
DelphiTeacher的专栏
D
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
2K
DelphiTeacher的专栏
D
顶部