Обсждение примеров для пользователей
AVMan, я извиняюсь, конечно, но
Код:
procedure TForm1.Timer1Timer(Sender: TObject); var ArcSize, MaxSize: Integer;
begin
///////////////////////////////////////////////////////
ArcSize:= GetSizeFile(Edit1.Text);
MaxSize:= Round(GetSizeFile(Edit1.Text)-GetSizePath(Edit2.Text));
ProgressBar1.Max:= Round((ArcSize+MaxSize)*1.1);
ProgressBar1.Position:= GetSizePath(Edit2.Text);
///////////////////////////////////////////////////////
end;
это бред.
MaxSize:= Round(GetSizeFile(Edit1.Text)-GetSizePath(Edit2.Text));
ближе к концу распаковки второе значение всегда больше первого (распакованные данные больше размера архива). Соответственно MaxSize будет отрицательным.
Максимум в прогрессбаре достигнет при выравнивании размера архива размеру распакованных данных, дальше начинается бред.
Приведу пример: архив 1гб, текущий размер распакованных данных 3гб, а еще реально остается распаковать 2гб (в данном случае энтропия упакованных данных довольно низка). Так вот в этих расчетах получается
MaxSize:= 1гб-3гб=-2гб
ProgressBar1.Max:= (1гб-2гб)*1.1=-1.1гб
ProgressBar1.Position:=3гб
не очень красиво.
Добавлено через 2 минуты
Да и при паре десятков тысяч мелких файлов - измерение текущего размера каталога превращается в ад.