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.