因为TIdHttp是阻塞式的,所以,如果传输的文件比较大的时候,整个界面都动弹不得,和死了一样。

解决方法有两个:

1. 把对IdHttp的处理,放入线程内。搞个线程也很简单,就是一旦数据交互起来,麻烦一些。

2. 好久没用delphi了,不想写太复杂的代码了,这个简单的应用里,只要界面不僵死就可以了。所以不想用线程。第二个方法就是,往界面里放入一个TIdAntiFreeze控件,(真怀念delphi的方便)。不要高兴的太早,可能界面还是动不了的。因为默认情况下idAntiFreeze的OnlyWhenIdle属性是true,改为false,才会真正的antiFreeze。

BTW,键盘的F11键坏掉好久了,都没有什么感觉 (用delphi没有这个键,会死人的)

Posted in 未分类 at 02月 28th, 2009. 1 Comment.

用indy上传下载文件时,可以先在IdHTTP1WorkBegin中获得总大小,然后在IdHTTP1Work中实时得到当前的传输量,一遍算出整体的传输进度。

procedure TForm1.IdHTTP1WorkBegin(Sender:TObject; AWorkMode:TWorkMode;
  const AWorkCountMax:Integer);
begin
  ShowMessage(IntToStr(AWorkCountMax));
end;

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

Posted in 未分类 at 02月 28th, 2009. No Comments.