эмм, это где смотреть?)
на форме всего то только прогрессбар и кнопка.
на всякий случай вот весь код
Код:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls,SevenZip, Vcl.ComCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
ProgressBar1: TProgressBar;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
end;
var
Form1: TForm1;
ArcNum : Integer;
ArcLen : Integer;
implementation
{$R *.dfm}
function ProgressCallback(sender: Pointer; total: boolean; value: int64): HRESULT; stdcall;
begin
if total then ArcLen := value
else form1.ProgressBar1.Position :=trunc (ArcNum*100 + 100*value/ArcLen);
Result := S_OK;
// Даем отрисоваться обновлению
Application.ProcessMessages;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
i:integer; archives := TStringList.Create;
begin
archives.create;
archives.add('test.7z');
archives.add('test2.7z');
ArcNum := 0;
ArcLen := 0;
with CreateInArchive(CLSID_CFormat7z) do
for i:=0 to archives.count-1 do
begin
OpenFile(archives[i]);
SetProgressCallback(nil, ProgressCallback);
ExtractTo('c:\1');
Inc(ArcNum);
end;
// инициализируем прогресс бар
ProgressBar1.Position := 0;
ProgressBar1.Max := archives.count*100;
end;
end.
хмм, если archives.create и add поставить в процедуру при создании формы, ошибка вылазит сразу при запуске.
всё, заработало, неправильно стринглист создавал. нужно было archives := TStringList.Create;
теперь не пойму, толи прогрессбар заполняется быстрее распаковки второго архива, толи всё равно тока первый показывает. потому как когда он уже полный файлы в папке назначения продолжают создаваться и приложение немного подвисает. завтра попробую с архивами побольше.