Вот код на основе sevezip.pas
Код:
uses
...sevenzip, ...
function ProgressCallback(sender: Pointer; total: boolean; value: int64): HRESULT; stdcall;
begin
if total then
Form1.sprgrsbr1.Max:= value
else
Form1.sprgrsbr1.Position:= value;
Result:= S_OK;
end;
function Decompress(FileName, DestDir, ArcFname: String; ArcDir: Boolean ): Boolean;
var
i: Integer;
ItP: string;
items: array[1..11] of Cardinal;
sprgrsbr1: TsProgressBar;
begin
Result:= False;
Application.ProcessMessages;
try
with CreateInArchive(CLSID_CFormat7z) do
begin
OpenFile(FileName);
SetProgressCallback(sprgrsbr1, ProgressCallback);
for i:= 1 to NumberOfItems - 1 do
if not ItemIsFolder[i] then
//ExtractItem(items[i], Steam, False); - как ей пользоваться в душе не понимаю...
ExtractTo(DestDir);
end;
finally
Result:= True;
end;
end;
Этот код идеально работает (
лучше чем JEDI) - распаковывает архив с прогрессбаром, но вопрос распаковки определённых файлов/папок всё равно есть...
Вот файлы: