2013-08-23 4 views
0

Отключить две кнопки на той же странице Я пробовал несколько способов, но не стал ближе этот пример был неправильным [кнопка next = со временем] [кнопка назад = нет времени (только отключить)] помощи, чтобы найти ошибку связанногоInno setup отключить две кнопки на одной странице

[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; 

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

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

procedure DisableBackButton(Timeout: UINT); 
var 
TimerCallback: LongWord; 
begin 
WizardForm.BackButton.Enabled := False; 
TimerCallback := WrapTimerProc(@OnTimerTick, 4); 
TimerID := SetTimer(0, 0, Timeout, TimerCallback); 
end; 

procedure CurPageChanged5(CurPageID: Integer); 
begin 
    if CurPageID = wpSelectTasks then 
    DisableNextButton(10); 
end; 

procedure CurPageChanged6(CurPageID: Integer); 
begin 
    if CurPageID = wpSelectTasks then 
    DisableBackButton(5000); 
end; 
+0

Не могли бы вы уточнить, что вы собираетесь делать? Вы, очевидно, отключите обе кнопки: «Далее» и «Назад». Но у меня нет той части, в которой вы одновременно запускаете два таймера. Вы хотите отключить обе кнопки и просто нажать кнопку «Далее» для заголовка обратного отсчета? – TLama

+0

Тот же самый TLama отключил обе кнопки и позволил только кнопке Next нажать заголовок – Marcio

ответ

1

чтобы отключить обе кнопки, следующую кнопку и кнопку возврата в течение определенного времени, в то время как только следующая кнопка будет иметь заголовок таймера обратного отсчета, вы можете использовать следующий модифицированные сценарий на основе this post:

[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.BackButton.Enabled := True; 
    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 DisableNavigateButtons(Timeout: Integer); 
var 
    TimerCallback: LongWord; 
begin 
    Counter := Timeout; 
    WizardForm.BackButton.Enabled := False; 
    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 
    DisableNavigateButtons(5); 
end; 
+0

TLama Еще раз за вашу помощь и терпение решили объявить – Marcio

+0

Добро пожаловать! – TLama

Смежные вопросы