Unit1:
uses Unit2;
//功能:要求设置大小,进度.需要用以Unit2中事件FHTTPClientWork中的AWorkCount,我应该怎么做?
procedure SetProgress(); Unit2:
属性
FHTTPClient: TIdHTTP;
事件
FHTTPClientWork(Sender: TObject; AWorkMode: TWorkMode;
const AWorkCount: Integer); //触发时间长短不一定{
我的想法:
1.在FHTTPClient中把AWorkCount传给Unit1处理;
2.在Unit2弄个变量记录AWorkCount,再在Unit1中用个Timer,每隔一段时间读取变量值;
3.能不能使程序调用FHTTPClientWork事件时调用SetProgress();上次你说的托管;
我想听听如果你来实现会怎么去实现这功能.
}

解决方案 »

  1.   

    procedure TDownloadThread.IdHTTPWork(Sender: TObject; AWorkMode: TWorkMode;
      const AWorkCount: Integer);
    begin
      FPosition := AWorkCount;
      Synchronize(ShowProgress);
    end;procedure TDownloadThread.ShowProgress;
      function SizeToStr(Size : Int64) : String;
      begin
        if Abs(Size) >= 1024*1024*1024 then
          Result := Format('%0.2f', [Size/1024/1024/1024]) + 'GB'
        else if Abs(Size) >= 1024*1024 then
          Result := Format('%0.2f', [Size / 1024/1024]) + 'MB'
        else if Abs(Size) >= 1024 then
          Result := Format('%0.2f', [Size/1024]) + 'KB'
        else
          Result := IntToStr(Size) + 'B';
      end;
    begin
      FForm.StateText := '正在下载升级程序('
        + SizeToStr(FPosition) + '/' + SizeToStr(FMax) + ')..';
      FForm.ProgressBar1.Position := FPosition;
    end;
      

  2.   

    谢谢: fengqingwanzhong(风情万种) 
    你说的应该是我的第一个想法:
    1.在FHTTPClient中把AWorkCount传给Unit1处理;