Создавайте обработчики событий вручную в ZipForge - PullRequest
1 голос
/ 03 августа 2011

Раньше я удалял компонент TZipForge в форме, чтобы я мог использовать его обработчики событий. Теперь я использую несколько рабочих потоков для извлечения некоторых zip-файлов, поэтому я создаю экземпляр класса TZipForge в качестве локальной переменной. Как сделать обработчики событий без вкладки «Событие» в Инспекторе объектов?

1 Ответ

3 голосов
/ 03 августа 2011

Чтобы создать обработчик событий вручную, вы должны создать процедуру, совпадающую с объявлением целевого события, а затем присвоить Адрес этой процедуры событию класса, например, если вы хотите создайте дескриптор события для события OnFileProgress, вы должны создать процедуру, подобную этой, внутри вашего класса.

procedure  FileProgress(Sender: TObject; FileName: string;
Progress: Double; Operation: TZFProcessOperation;
ProgressPhase: TZFProgressPhase; var Cancel: Boolean);

Проверьте этот образец

procedure TForm1.FileProgress(Sender: TObject; FileName: string;
  Progress: Double; Operation: TZFProcessOperation;
  ProgressPhase: TZFProgressPhase; var Cancel: Boolean);
begin
     //do your stuff here
end;

procedure TForm1.FormCreate(Sender: TObject);
var
  Archiver : TZipForge;
begin
  Archiver := TZipForge.Create(nil);
  try          
      Archiver.OnFileProgress:=FileProgress;//<- Here the event handler is assigned
      Archiver.FileName := 'compressedfile.zip';
      Archiver.OpenArchive(fmOpenRead);
      try
        Archiver.BaseDir := 'C\Foo';
        Archiver.ExtractFiles('*.*');
      finally
        Archiver.CloseArchive();
      end;
  finally
    Archiver.Free;
  end;
end;
...