Тема: 7z архивы
Показать сообщение отдельно
  #11  
Старый 28.10.2013, 03:24
Deep88 Deep88 вне форума
Прохожий
 
Регистрация: 27.10.2013
Сообщения: 8
Версия Delphi: xe4
Репутация: 10
По умолчанию

эмм, это где смотреть?)
на форме всего то только прогрессбар и кнопка.
на всякий случай вот весь код

Код:
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;
теперь не пойму, толи прогрессбар заполняется быстрее распаковки второго архива, толи всё равно тока первый показывает. потому как когда он уже полный файлы в папке назначения продолжают создаваться и приложение немного подвисает. завтра попробую с архивами побольше.
Ответить с цитированием