2013-08-18 5 views
1

Друзья добавить время «кнопку Далее или Установить», чтобы выпустили на странице «Ready»Inno Setup добавить релиз времени на кнопку

15 второй 15,14,13,12,11,10,9 , 8,7,6,5,4 время после отпускания кнопки нажать пример

enter image description here

+0

Не могли бы вы уточнить ваш вопрос, пожалуйста? Это действительно сложно, о чем вы просите. Вы хотите отключить следующую кнопку и включить ее через 15 секунд? Если да, то когда? На странице мастера или где-то еще? Или что-то другое ? – TLama

+0

TLama отключает его на 15 секунд – Marcio

+0

Этот вопрос имеет отношение к моей проблеме, и принятый ответ - именно то, что я искал, поэтому я попросил, чтобы вопрос был вновь открыт, поскольку он достаточно ясен и очень полезен, как есть. –

ответ

1

Поскольку нет встроенного таймера в InnoSetup в это время, вы должны будете использовать Windows, API для этого. Кроме того, функция, которая будет использоваться здесь, нуждается в функции обратного вызова, которая должна быть завернута, например, InnoCallback, используемой следующим скриптом.

Показывает, как отключить следующую кнопку на странице выбора каталога в течение 5 секунд, но вы можете просто изменить параметр функции DisableNextButton, который представляет собой интервал в секундах для значения, которое вы хотите, а также можете изменить для какой страницы вы будете использовать его. Существует также значение оставшегося времени в следующей надписи кнопки:

[Setup] 
AppName=My Program 
AppVersion=1.5 
DefaultDirName={pf}\My Program 

[Files] 
Source: "InnoCallback.dll"; DestDir: "{tmp}"; Flags: dontcopy 

[Code] 
var 
    Counter: Integer; 
    TimerID: Integer; 

type 
    TTimerProc = procedure(Wnd: HWND; Msg: UINT; TimerID: UINT_PTR; 
    SysTime: DWORD); 

function WrapTimerProc(Callback: TTimerProc; ParamCount: Integer): LongWord; 
    external '[email protected]:InnoCallback.dll stdcall';  
function SetTimer(hWnd: HWND; nIDEvent, uElapse: UINT; 
    lpTimerFunc: UINT): UINT; external '[email protected] stdcall'; 
function KillTimer(hWnd: HWND; uIDEvent: UINT): BOOL; 
    external '[email protected] stdcall'; 

procedure OnTimerTick(Wnd: HWND; Msg: UINT; TimerID: UINT_PTR; 
    SysTime: DWORD); 
begin 
    Counter := Counter - 1; 

    if Counter <= 0 then 
    begin 
    WizardForm.NextButton.Enabled := True; 
    WizardForm.NextButton.Caption := SetupMessage(msgButtonNext); 
    if TimerID <> 0 then 
     KillTimer(0, TimerID); 
    end 
    else 
    WizardForm.NextButton.Caption := SetupMessage(msgButtonNext) + 
     IntToStr(Counter); 
end; 

procedure DisableNextButton(Timeout: Integer); 
var 
    TimerCallback: LongWord; 
begin 
    Counter := Timeout; 
    WizardForm.NextButton.Enabled := False; 
    WizardForm.NextButton.Caption := SetupMessage(msgButtonNext) + 
    IntToStr(Counter); 
    TimerCallback := WrapTimerProc(@OnTimerTick, 4); 
    TimerID := SetTimer(0, 0, 1000, TimerCallback); 
end; 

procedure CurPageChanged(CurPageID: Integer); 
begin 
    if CurPageID = wpSelectDir then 
    DisableNextButton(5); 
end; 

Вот скриншот:

enter image description here

+0

Perfect TLama это же Но вы можете поместить счетчик времени с изображением изображения , пока кнопка отключена – Marcio

+0

Я просил вас уточнить. Вы ответили * отключили его на 15 секунд *, поэтому не удивляйтесь :-) Ну, я обновил ответ, который теперь показывает скрипт, который будет иметь оставшийся счетчик секунд (времени до следующей кнопки включено) в следующей надписи кнопки. Надеюсь, у меня это получилось на этот раз ... – TLama

+0

TLama благодарит за помощь и терпение «разрешено». именно то, что я хотел использовать переводчик Google, очень сложно снова спасибо – Marcio