我正在使用开源缩写组件将一些文件存档到单个 Zip 中,同时我正在使用 TAbMeter Gauge 来显示进度。
不过,我更愿意为此目的使用 TProgressBar(保持与 Windows 的标准界面)。
我如何使用 TProgressBar 而不是 TAbMeter?我知道我可以自己编写进度代码,但是鉴于 Abbrevia 组件已经在 TAbMeter 中完成了这项工作,我认为重写它没有任何意义。
如果我什至可以访问 TAbMeter 的 Position 属性,我可以通过与 TAbMeter 同步来模拟 TProgressBar 的进度。
这是一个片段,FileNames 是一个包含要归档的文件名的 TStringList。
procedure ArchiveFiles(SaveAs: string; ProgressBar: TAbMeter);
var
AZipper: TAbZipper;
i: Integer;
begin
AZipper := TAbZipper.Create(nil);
try
AZipper.AutoSave := False;
AZipper.BaseDirectory := ExtractFilePath(SaveAs);
AZipper.ArchiveSaveProgressMeter := ProgressBar;
AZipper.FileName := SaveAs;
AZipper.StoreOptions := AZipper.StoreOptions + [soStripDrive, soRemoveDots]
- [soStripPath];
AZipper.TempDirectory := GetTempDirectory;
try
Screen.Cursor := crHourGlass;
ProgressBar.Visible := True;
for i := 0 to FileList.Count - 1 do
begin
AZipper.AddFiles(FileList.Strings[i], 0);
end;
finally
AZipper.Save;
AZipper.CloseArchive;
ProgressBar.Visible := False;
Screen.Cursor := crDefault;
end;
finally
AZipper.Free;
end;
end;