Пример использования Delphi Toyko для создания Zip-файла в процессе

Я пытаюсь создать zip-файл с Delphi Tokyo, используя команду ZipDirectoryContents, которая имеет 4 параметра. Они есть

ZipDirectoryContents(const ZipFileName: string; const Path: string;
  Compression: TZipCompression = zcDeflate; 
  ZipProgress: TZipProgressEvent = nil); static;

Есть ли кто-нибудь, кто может сказать мне, как использовать эти параметры, особенно TZipProgressEvent, чтобы показать ход выполнения zip-файла при добавлении файлов из каталога. Спасибо


person LGreen    schedule 28.07.2017    source источник
comment
Пожалуйста, предоставьте точный пример кода и определите вашу проблему оттуда.   -  person Fabien    schedule 29.07.2017
comment
Образец Виктории, представленный ниже, лучше, чем я мог бы сделать, но, похоже, он по-прежнему не запускает прогресс для обновления индикатора выполнения. Кто-нибудь знает, почему? Спасибо   -  person LGreen    schedule 30.07.2017


Ответы (1)


Вот ответ, предоставленный Embarcadero

unit Unit16;

interface

uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls,System.Zip, Vcl.ComCtrls;

type
  TForm16 = class(TForm)
    Button1: TButton;
    ProgressBar1: TProgressBar;
    StaticText1: TStaticText;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
    PreviousFilename : string;
  public
    { Public declarations }

    procedure OnZipProgressEvent (Sender: TObject; FileName: string; Header: TZipHeader; Position: Int64);
  end;

var
  Form16: TForm16;

implementation

{$R *.dfm}


procedure TForm16.Button1Click(Sender: TObject);
begin
    TZipFile.ZipDirectoryContents('C:\temp\Test.zip','c:\temp\zipTest',zcDeflate,OnZipProgressEvent);
end;

procedure TForm16.OnZipProgressEvent(Sender: TObject; FileName: string;
  Header: TZipHeader; Position: Int64);
begin
  if PreviousFilename <> FileName then
  begin
    StaticText1.Caption := ExtractFileName(FileName);
    PreviousFilename := FileName;
    ProgressBar1.Position := 0;
  end
  else
    ProgressBar1.Position := (Position * 100) div Header.UncompressedSize ;
  Application.ProcessMessages;
end;

end.
person LGreen    schedule 11.08.2017