Einzelnen Beitrag anzeigen

a.def
(Gast)

n/a Beiträge
 
#1

Schwierigkeiten mit 7-zip und Events

  Alt 5. Dez 2016, 14:31
Ich habe vor Kurzem die SevenZIPVCL-Komponente (http://www.yard2usb.de/joomla/index....i-tsevenzipvcl) entdeckt und auch gleich ein Mini-Demo geschrieben.

Ich benutze die Version 0.7.6 und so sieht mein Button der Demo aus
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
 aSevenZip: TSevenZip;
begin
 Caption := 'Compressing ...';

 aSevenZip := TSevenZip.Create(Self);

 try
  // aSevenZip.OnProgress := SevenZipOnProgress;
  // aSevenZip.OnAddfile := SevenZipOnAddFile;

  aSevenZip.AddRootDir := 'E:\7ztest\';
  aSevenZip.SZFileName := ExtractFilePath(Application.ExeName) + 'Test.7z';
  // aSevenZip.Password := '123456';

  aSevenZip.LZMACompressType := LZMA; // LZMA, PPMD
  aSevenZip.LZMACompressStrength := NORMAL; // SAVE, FAST, NORMAL, MAXIMUM, ULTRA
  aSevenZip.AddOptions := []; // AddRecurseDirs, AddSolid, AddStoreOnlyFilename, AddIncludeDriveLetter, AddEncryptFilename

  aSevenZip.Files.Clear;
  aSevenZip.Files.AddString('E:\7ztest\249MB.123');
  aSevenZip.Files.AddString('E:\7ztest\123\456.txt');
  aSevenZip.Files.AddString('E:\7ztest\456');

  // aSevenZip.SevenZipComment := 'Comment!';

  aSevenZip.add;
 finally
  aSevenZip.Free;
 end;

 Caption := 'Done';
end;
Das funktioniert einwandfrei.
Nur sobald ich OnProgress, OnAddfile oder beides verwende, scheint mein Demo-Programm (welches nur diesen Button und eine ProgressBar hat) zu hängen.

Die Event-Prozeduren sehen so aus
Delphi-Quellcode:
procedure TForm1.SevenZipOnProgress(Sender: TObject; Filename: WideString; FilePosArc, FilePosFile: Int64);
begin
 ProgressBar1.Position := FilePosArc;
 Application.ProcessMessages;
end;

procedure TForm1.SevenZipOnAddFile(Sender: TObject; Filename: WideString; Filesize: Int64);
begin
 Caption := Filename;
 ProgressBar1.Position := 0;
 ProgressBar1.Max := Filesize;
end;
Ist das ein Bug? Denn egal was in den Event-Prozeduren steht, es führt immer zum Stillstand der Demo.
Es scheint so, als ob die Demo nur hängt, wenn in den Events irgendwas steht was mit der VCL zu tun hat. Wenn ich dort reinschreibe i:=123; hängt sich nichts auf.
  Mit Zitat antworten Zitat