用已经接受的文件长度除以文件总长度,然后乘以进度条的最大长度。最后设置进度条的当前位置为这个数。
—————————————————————————————————
MaximStr := '宠辱不惊,看庭前花开花落,去留无意;
             毁誉由人,望天上云卷云舒,聚散任风。';
if Not Assigned(I) then
  I := TI.Create(Nil);
I.Maxim := MaximStr;
I.Explain := '假如上述代码中出现“OA”、“3D”等字样,改为“=”等';
I.Desire := '加不加分随你';
—————————————————————————————————
       

解决方案 »

  1.   

    现在我知道onwork事件里的aworkcount其实是已发送的字节数,但是总的字节数不知如何获得?在ONWORKBEGIN里有一个aworkcountmax本来应该是总字节,可是这个值始终为0。
    另外关于进度条我知道如何设置,只是不知道如何获得max值而已。各位看清楚再回答,解决我另外给50分
      

  2.   

    我分析过源代码,不过我迷失了方向。TIdSMTP = class(TIdMessageClient)
    TIdMessageClient = class(TIdTCPClient)
    TIdTCPClient = class(TIdTCPConnection)
    TIdTCPConnection = class(TIdComponent)
    TIdComponent = class(TIdBaseComponent)OnWork,OnWorkBegin是TIdBaseComponent的东西procedure TIdComponent.BeginWork(AWorkMode: TWorkMode; const ASize: Integer =
      0);
    begin
      Inc(FWorkInfos[AWorkMode].Level);
      if FWorkInfos[AWorkMode].Level = 1 then
      begin
        FWorkInfos[AWorkMode].Max := ASize;
        FWorkInfos[AWorkMode].Current := 0;
        if assigned(OnWorkBegin) then
        begin
          OnWorkBegin(Self, AWorkMode, ASize);
        end;
      end;
    end;procedure TIdComponent.DoWork(AWorkMode: TWorkMode; const ACount: Integer);
    begin
      if FWorkInfos[AWorkMode].Level > 0 then
      begin
        Inc(FWorkInfos[AWorkMode].Current, ACount);
        if assigned(OnWork) then
        begin
          OnWork(Self, AWorkMode, FWorkInfos[AWorkMode].Current);
        end;
      end;
    end;如果OnWordBegin的AWorkCountMax不是总字节数和OnWord的AWorkCount不是
    发送的字节数的话,那就没办法了。
      

  3.   

    INDY问题多多,我已解决,大部分分数收回