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

Вопрос Как добавить время установки приложения

Тема в разделе "Inno Setup", создана пользователем Lil Pup, 15 фев 2017.

  1. Новичок

    Регистрация:
    15 фев 2017
    Сообщения:
    18
    Симпатии:
    1
    Компклектую через inno ultra,не использую isdone,обычный инстоллятор,помогите установить проценты установки и сколько прошло времени установки и остаток времени до конца установки,искал у вас на сайте но через inno ultra код на время не видит,так-как этот код , для боле свежих версий
     
  2. Новичок

    Регистрация:
    15 фев 2017
    Сообщения:
    18
    Симпатии:
    1
    неужели никто не знает ?
     
  3. Ветеран Модератор

    Регистрация:
    5 мар 2016
    Сообщения:
    292
    Симпатии:
    330
    Пол:
    Мужской
    Лучше использовать IS Done конечно:

    Код (Text):
    [Setup]
    AppName=My Application
    AppVersion=1.5
    DefaultDirName={pf}\My Application

    [Files]
    Source: CallbackCtrl.dll; Flags: dontcopy

    [Code]
    type
      TPBProc = function (h:hWnd;Msg,wParam,lParam:Longint):Longint;

    var
      TimeLeftLabel, Progress : TLabel;
      PBOldProc               : Longint;
      WFCaption               : string;
      eTime, sTime            : DWORD;

    function SetWindowLong(hWnd: HWND; nIndex: Integer; dwNewLong: Longint): Longint; external 'SetWindowLongA@user32.dll stdcall';
    function CallBackProc(P:TPBProc;ParamCount:integer):LongWord; external 'wrapcallbackaddr@files:CallbackCtrl.dll stdcall';
    function CallWindowProc(lpPrevWndFunc: Longint; hWnd: HWND; Msg: UINT; wParam, lParam: Longint): Longint; external 'CallWindowProcA@user32.dll stdcall';
    function GetTickCount: DWORD; external 'GetTickCount@kernel32.dll stdcall';

    function LongintToStringTime(t:Longint):string;
    var
      h,m,s:integer;
    begin
      h:=t div 3600;
      t:=t-h*3600;
      m:=t div 60;
      s:=t-m*60;
      Result:='';
      if h>0 then Result:=Result+IntToStr(h)+' ч. ';
      if (m>0) or (h>0) then Result:=Result+IntToStr(m)+' мин. ';
      if (m>0) or (h>0) or (s>0) then Result:=Result+IntToStr(s)+' сек.';
    end;

    function PBProc(h:hWnd;Msg,wParam,lParam:Longint):Longint;
    var
      lt:Longint;
      dt,at,pr,i1,i2:Extended;
      p:string;
      tc:DWORD;
    begin
      Result:=CallWindowProc(PBOldProc,h,Msg,wParam,lParam);
      if (Msg=$402) and (WizardForm.ProgressGauge.Position>WizardForm.ProgressGauge.Min) then begin
        i1:=WizardForm.ProgressGauge.Position-WizardForm.ProgressGauge.Min;
        i2:=WizardForm.ProgressGauge.Max-WizardForm.ProgressGauge.Min;

      tc:=GetTickCount;
      if (tc-eTime)>=1000 then begin
        dt:=(tc-sTime)/1000;
        at:=i2*dt/i1;
        lt:=Round(at-dt)
        TimeLeftLabel.Caption:='Осталось - '+LongintToStringTime(lt);
        eTime:=tc;
    end;

      pr:=i1*100/i2;
      p:='Прогресс - '+Format('%f',[pr])+'%';
      StringChange(p,',','.');
      Progress.Caption:=p;
    end;
    end;

    procedure AllCancel;
    begin
      SetWindowLong(WizardForm.ProgressGauge.Handle,-4,PBOldProc);
      TimeLeftLabel.Free;
      WizardForm.Caption:=WFCaption;
    end;

    procedure CurStepChanged(CurStep: TSetupStep);
    begin
    case CurStep of
      ssInstall: begin

    WFCaption:=WizardForm.Caption;

    TimeLeftLabel:=TLabel.Create(nil);
    with TimeLeftLabel do begin
      Parent:=WizardForm.InstallingPage;
      AutoSize:=False;
      SetBounds(0,70,417,21);
    end;

    Progress:=TLabel.Create(nil);
    with Progress do begin
      Parent:=WizardForm.InstallingPage;
      AutoSize:=False;
      SetBounds(0,90,417,21);
    end;

      sTime:=GetTickCount;
      eTime:=sTime;

      PBOldProc:=SetWindowLong(WizardForm.ProgressGauge.Handle,-4,CallBackProc(@PBProc,4));
    end;
      ssPostInstall: AllCancel;
    end;
    end;

    P.S.: Уважаемый пользователь, при создании новой темы на форуме, старайтесь описать суть проблемы в заголовке чуть более информативно, а то у тут тем с названием "Прошу помощи" будет очень много. Спасибо.
     
    Последнее редактирование: 17 фев 2017
    Ramiro Cruzo и Timick нравится это.
  4. Новичок

    Регистрация:
    15 фев 2017
    Сообщения:
    18
    Симпатии:
    1
    Первый раз здесь и не знал как правильно, надо писать здесь .Я просто не пользуюсь сжатием.Спасибо большое,а можно добавить, сколько прошло времени?
     
    Последнее редактирование: 19 фев 2017
    Nemko нравится это.
  5. Новичок

    Регистрация:
    15 фев 2017
    Сообщения:
    18
    Симпатии:
    1
    Вы тут ?.
     
  6. Новичок

    Регистрация:
    15 фев 2017
    Сообщения:
    18
    Симпатии:
    1
    ответьте кто нибудь,пожалуйста...
     
  7. Ветеран Модератор

    Регистрация:
    5 мар 2016
    Сообщения:
    292
    Симпатии:
    330
    Пол:
    Мужской
    Lil Pup, основная масса пользователей пользуется модулем IS Done (потому что это проще и сжатие лучше), поэтому не думаю что у них есть под рукой какой-нибудь пример или желание. В моем арсенале я знаю только Time Left от South, но есть идея почитайте здесь (http://krinkels.org/threads/kak-dobavit-vremja-ustanovki-na-stranicu-installjacii.3236/), ибо спрашивали уже. Установите нужную версию Inno и пользуйтесь.
     
    Последнее редактирование: 20 фев 2017
  8. Новичок

    Регистрация:
    15 фев 2017
    Сообщения:
    18
    Симпатии:
    1
    А я, не умею, пользоваться is done
     

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