Doch das Event wird bei jeder Datei aufgerufen.
Das ganze Event scheint irgendwie kaputt zu sein denn
ShowMessage((Sender as TJclCompressionArchive).CurrentItemIndex.ToString);
gibt auch immer 0 zurück.
Grundlage für das Event ist übrigens TNotifyEvent.
Ich würde die .Compress;-Routine ja selber gerne einbauen statt die fertige von JCLCompression.pas zu nutzen aber ich kann sie einfach in der Datei nicht finden.
Ich habe gerade eine erstaunliche Entdeckung gemacht. Mein alter Code funktioniert komischerweise und sämtliche Dateien werden erfasst. Aber nur wenn ich die ZIP-Methoden verwende statt 7z.
Meine aktuelle Berechnung im Event ist
Delphi-Quellcode:
if ((Sender as TJclCompressionArchive).ItemCount > _globals.CurrentFileIndex) then
begin
_globals.FileSizeTmp := (Sender as TJclCompressionArchive).Items[_globals.CurrentFileIndex].FileSize;
Inc(_globals.BytesCopied, Value - _globals.ValueOld);
if ((_globals.BytesCopied - _globals.BytesCopiedTmp) >= _globals.FileSizeTmp) then
Inc(_globals.CurrentFileIndex);
_globals.ValueOld := Value;
end;
Funktioniert bei TJcl
ZipCompressArchive wunderbar, bei TJcl
7zCompressArchive nicht.