Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在现有的Delphi代码中修改进度条的简单方法?_Delphi_Progress Bar - Fatal编程技术网

在现有的Delphi代码中修改进度条的简单方法?

在现有的Delphi代码中修改进度条的简单方法?,delphi,progress-bar,Delphi,Progress Bar,我使用的演示代码压缩文件夹中的所有文件。但是,它的进度条显示的不是总进度,而是每个文件的进度 有没有简单的方法来修改代码,使进度条显示总进度,而不是每个文件的进度 procedure DoProgress(Sender: TObject; Position, Total: Integer); procedure DoCompressFile(Sender: TObject; const Filename: string); 一种简单的方法是使用Findfirst和Findnext对目录中的文

我使用的演示代码压缩文件夹中的所有文件。但是,它的进度条显示的不是总进度,而是每个文件的进度

有没有简单的方法来修改代码,使进度条显示总进度,而不是每个文件的进度

procedure DoProgress(Sender: TObject; Position, Total: Integer);
procedure DoCompressFile(Sender: TObject; const Filename: string);


一种简单的方法是使用Findfirst和Findnext对目录中的文件进行计数,然后将pbProgress.Max设置为该值,然后在DoCompressFile中将pcProgress.Position增加1。

或者更好,根据处理的字节数,将文件大小相加到总大小和增量位置。

完全取决于TJVZLIBMULITY.CompressDirectory的实现。查看源代码或文档,看看是否有办法实现您想要的功能。根据每个文件所需的时间,用户可能希望显示双进度条-保留您在此处看到的实现的进度条,并添加一个进度条,通过随每个完成的文件递增来显示总体进度。
procedure TJvZLibMultipleMainForm.DoCompressFile(Sender:TObject;const Filename:string);
begin
  lblFilename.Caption := Filename;
  Update;
end;

    procedure TJvZLibMultipleMainForm.btnCompressClick(Sender: TObject);
var
  z : TJvZlibMultiple;
begin
  ForceDirectories(ExtractFilePath(edFilename.Text));
  z := TJvZlibMultiple.Create(nil);
  Screen.Cursor := crHourGlass;
  try
    lblFilename.Caption := '';
    pbProgress.Position := 0;
    z.OnProgress := DoProgress;
    z.OnCompressingFile := DoCompressFile;
    z.CompressDirectory(edSrcFolder.Text,true,edFilename.Text);
  finally
    z.Free;
    Screen.Cursor := crDefault;
  end;
  pbProgress.Position := 0;
  lblFilename.Caption := 'Ready';
end;


procedure TJvZLibMultipleMainForm.DoProgress(Sender: TObject; Position, Total: Integer);
begin
  pbProgress.Max := Total;
  pbProgress.Position := Position;
  Update;
end;