FTP控件的相关属性和事件都设置好了。不知什么原因,上传文件时进度条工作正常,而下载文件时,进度条没有动静。帮助我看看。从网上查询说要设置AWorkMode,以确定是处于接收数据状态还是发送数据状态,是不是这个原因?怎么设置?//联用这几个事件: 
//注意要判断一下AWorkMode,确定是处于接收数据状态还是发送数据状态。 
OnWorkBegin //   ProgressBar1.Max:=AWorkCountMax; 
OnWork      //   ProgressBar1.Position:=AWorkCount; 
OnWorkEnd   //   ProgressBar1.Position:=0;//上载
stepIT := 1;
ProgressBar1.StepBy(1);
ProgressBar1.Step:=1;
ProgressBar1.Visible:=true;
with IdFTP1 do
begin
  Host := '130.140.40.201';
  User := 'my_ftp';
  Password := 'my_pass';
  if Connected then Disconnect;
    Connect();
    Put(本地文件名,服务器文件名);
    if Connected then Disconnect;
end;
ProgressBar1.Visible:=false;
  
  
//下载
if CheckBox1.Checked=true then
begin
  begin
    with IdFTP1 do
    begin
      Host := '130.140.40.201';
      User := 'my_ftp';
      Password := 'my_pass';
      if Connected then Disconnect;
      Connect();
      stepIT := 1;
      ProgressBar1.StepBy(1);
      ProgressBar1.Step:=1;
      ProgressBar1.Visible:=true;      Get(服务器文件名,本地文件名,True);
      ProgressBar1.Visible:=false;

解决方案 »

  1.   

    使用idftp下载文件时,进度条ProgressBar1不会更新,谁能帮忙一下?
      

  2.   

    恩?好像应该是
    OnWorkBegin //  ProgressBar1.Position:=0; 
    OnWork // ProgressBar1.Position:=AWorkCount;  
    OnWorkEnd // ProgressBar1.Max:=AWorkCountMax;
      

  3.   


    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, IdAntiFreezeBase, IdAntiFreeze, IdBaseComponent,
      IdComponent, IdTCPConnection, IdTCPClient, IdFTP, ComCtrls, IdFTPCommon;type
      TForm1 = class(TForm)
        IdFTP1: TIdFTP;
        IdAntiFreeze1: TIdAntiFreeze;
        Edit1: TEdit;
        Button1: TButton;
        ProgressBar1: TProgressBar;
        OpenDialog1: TOpenDialog;
        Button2: TButton;
        procedure IdFTP1WorkBegin(Sender: TObject; AWorkMode: TWorkMode;
          const AWorkCountMax: Integer);
        procedure IdFTP1Work(Sender: TObject; AWorkMode: TWorkMode;
          const AWorkCount: Integer);
        procedure IdFTP1WorkEnd(Sender: TObject; AWorkMode: TWorkMode);
        procedure Button1Click(Sender: TObject);
        procedure Button2Click(Sender: TObject);
      private
        { Private declarations }
        AbortTransfer: Boolean;
        TransferrignData: Boolean;
        BytesToTransfer: LongWord;
        STime: TDateTime;
      public
        { Public declarations }
      end;var
      Form1: TForm1;
      AverageSpeed: Double = 0;
    implementation{$R *.dfm}procedure TForm1.IdFTP1WorkBegin(Sender: TObject; AWorkMode: TWorkMode;
      const AWorkCountMax: Integer);
    begin
      TransferrignData := true;
      AbortTransfer := false;
      STime := Now;
      if AWorkCountMax > 0 then
      begin
        ProgressBar1.Max := AWorkCountMax;
      end else
      begin
        ProgressBar1.Max := BytesToTransfer;
      end;
      AverageSpeed := 0;
    end;procedure TForm1.IdFTP1Work(Sender: TObject; AWorkMode: TWorkMode;
      const AWorkCount: Integer);
    Var
      S: String;
      TotalTime: TDateTime;
      H, M, Sec, MS: Word;
      DLTime: Double;
    begin
      TotalTime :=  Now - STime;
      DecodeTime(TotalTime, H, M, Sec, MS);
      Sec := Sec + M * 60 + H * 3600;
      DLTime := Sec + MS / 1000;
      if DLTime > 0 then
      AverageSpeed := (AWorkCount/1024)/DLTime;  S := FormatFloat('0.00 KB/s', AverageSpeed);  if AbortTransfer then IdFTP1.Abort;
      ProgressBar1.Position := AWorkCount;
      //tvPlanets.DataController.Values[DownloadID,2] := FormatFloat('#,##0',AWorkCount/1024)+'/'+FormatFloat('#,##0',BytesToTransfer/1024);
      AbortTransfer := false;
      application.ProcessMessages;
    end;procedure TForm1.IdFTP1WorkEnd(Sender: TObject; AWorkMode: TWorkMode);
    begin
      BytesToTransfer := 0;
      TransferrignData := false;
      ProgressBar1.Position := 0;
      AverageSpeed := 0;
    end;procedure TForm1.Button1Click(Sender: TObject);
    begin
      if opendialog1.Execute then
      begin
        Edit1.Text := opendialog1.FileName;
        if Trim(Edit1.Text)='' then
        begin
          MessageBox(Handle,'请选择要上传的文本文件','提示',MB_ICONINFORMATION);
          Exit;
        end;
        if not IdFTP1.Connected then
        begin
          IdFTP1.Username := 'ftpuser';
          IdFTP1.Password := 'ftpuser01';
          IdFTP1.Host := '192.168.27.102';
          IdFTP1.Connect;
          //IdFTP1.ChangeDir('/orasource/zbdoc');
        end;
        IdFTP1.TransferType := ftBinary;
        BytesToTransfer := IdFTP1.Size(trim(edit1.Text));
        try
          IdFTP1.put(trim(edit1.Text),ExtractFileName(Edit1.text), true);
        finally
          IdFTP1.Disconnect;
        end;
      end;
    end;procedure TForm1.Button2Click(Sender: TObject);
    begin
      if not IdFTP1.Connected then
      begin
        IdFTP1.Username := 'ftpuser';
        IdFTP1.Password := 'ftpuser01';
        IdFTP1.Host := '192.168.27.102';
        IdFTP1.Connect;
        //IdFTP1.ChangeDir('/orasource/zbdoc');
      end;
      IdFTP1.TransferType := ftBinary;  BytesToTransfer := IdFTP1.Size('OA报销模块操作手册.doc');
      try
        IdFTP1.Get('OA报销模块操作手册.doc','c:\OA报销模块操作手册.doc', True);
      finally
        IdFTP1.Disconnect;
      end;
    end;end.