1. Уважаемые гости и пользователи форума.
    Администрация настоятельно рекомендует не регистрировать несколько аккаунтов для одного пользователя. При выявлении наличия мультиаккаунтов будут заблокированы все учетные записи данного пользователя.
    Аккаунты, зарегистрированные на временную почту будут также заблокированы.

DLL ISCopyFile 0.6

Плагин для копирования файлов через Inno Setup

  1. Он где то тут Администратор

    Регистрация:
    15 июн 2011
    Сообщения:
    745
    Симпатии:
    495
    Привычка :)
     
  2. Ветеран

    Регистрация:
    17 июн 2011
    Сообщения:
    471
    Симпатии:
    283
    Krinkels,
    если будет 1 возвращаться при успешном копировании, то так:
    Код (Text):
    [Code]
    var
    CopyInfoLabel, FileInfoLabel: TLabel;
    AllSize: Integer;
    callback: Longword;

    // PathOut - Откуда копировать. Можно указывать маски для копирования, или оставить звездочку и будет копироваться все
    // Для копирования отдельных файлов прописываем их в PathOut, и обязательно ставим bInnerFolders как false
    // PathIn - Куда копировать
    // bInnerFolders - Включать ли подпапки
    function isCopyFile(callback: Longword; PathOut, PathIn: String; bInnerFolders: bool): integer; external 'isCopyFile@files:ISCopyFile.dll stdcall';
    procedure BreakCopy(); external 'BreakCopy@files:ISCopyFile.dll stdcall';

    procedure Button1OnClick(Sender: TObject);
    begin
      BreakCopy();
    end;

    function MbOrTb(Float: Extended): String;
    begin
        if Float/1024 < 1024 then Result:= format('%.2n', [Float/1024])+' МБ' else
            Result:= format('%.2n', [Float/(1024*1024)])+' ГБ';
        StringChange(Result, ',', '.');
    end;

    function mCallback( what: PAnsiChar; int1: Longint; str: PAnsiChar): Boolean;
    begin
        if (string(what) = 'allsize') then
            AllSize:= int1;

        if(string(what) = 'filename') then
            FileInfoLabel.Caption:= MinimizePathName(str, WizardForm.StatusLabel.Font, WizardForm.StatusLabel.Width);

        if (string(what) = 'write') then begin
            CopyInfoLabel.Caption:= 'Скопировано '+MbOrTb(int1) + ' из ' + MbOrTb(AllSize);
            WizardForm.ProgressGauge.Position:= Round(int1);
            WizardForm.ProgressGauge.Max:= AllSize;
        end;
        Application.ProcessMessages;
    end;

    procedure InitializeWizard();
    begin
        CopyInfoLabel:= TLabel.Create(WizardForm);
      with CopyInfoLabel do begin
        Left:= WizardForm.ProgressGauge.Left;
        Top:= WizardForm.ProgressGauge.Top+WizardForm.ProgressGauge.Height+ScaleY(10);
        Width:= WizardForm.StatusLabel.Width;
        Height:= WizardForm.StatusLabel.Height;
        AutoSize:= False;
        Transparent:= True;
        Parent:= WizardForm.InstallingPage;
      end;

      FileInfoLabel:= TLabel.Create(WizardForm);
      with FileInfoLabel do begin
        Left:= WizardForm.ProgressGauge.Left;
        Top:= WizardForm.ProgressGauge.Top+WizardForm.ProgressGauge.Height+ScaleY(25);
        Width:= WizardForm.StatusLabel.Width;
        Height:= WizardForm.StatusLabel.Height;
        AutoSize:= False;
        Transparent:= True;
        Parent:= WizardForm.InstallingPage;
      end;
    end;

    procedure CurStepChanged(CurStep: TSetupStep);
    begin
        case CurStep of
            ssPostInstall: begin
          callback:= CallbackAddr('mCallback');
                WizardForm.ProgressGauge.Position:= 0;
          WizardForm.CancelButton.Enabled:=true;
          WizardForm.CancelButton.OnClick:= @Button1OnClick;

          repeat
          if isCopyFile(callback, {#PathOut}, {#PathIn}, false) <> 1 then break;
          if isCopyFile(callback, {#PathOut}, {#PathIn}, false) <> 1 then break;
          if isCopyFile(callback, {#PathOut}, {#PathIn}, false) <> 1 then break;
          until true;

            end;
      end;
    end;
     
  3. Он где то тут Администратор

    Регистрация:
    15 июн 2011
    Сообщения:
    745
    Симпатии:
    495
    Хм, можно и так. Сейчас обновлю
     
  4. Он где то тут Администратор

    Регистрация:
    15 июн 2011
    Сообщения:
    745
    Симпатии:
    495
    Infest нравится это.
  5. Ветеран

    Регистрация:
    3 сен 2015
    Сообщения:
    40
    Симпатии:
    2
    Пол:
    Мужской
    Ребят, прошу помощи. Как правильно сделать чекбокс, чтобы, в случае, допустим, если во время основной установки не надо копировать файлы, то при снятии флажка файлы не копируются.

    Пример.
    В инсталляторе есть:
    1. Основная установка (распаковка arc-архива + копирование).
    2. Установка компонентов.

    Так вот, если снимаем галку с пункта 1 и оставляем пункт 2, то при установке распаовка arc архива не происходит, но идёт копирование файлов. Копирование в таком случае тоже надо отменить, если снят флажок.

    Заранее спасибо!.
     

Поделиться этой страницей