2013-08-23 51 views
0

禁用同一頁面上的兩個按鈕 我嘗試了幾種方法,但沒有更接近這個例子不正確 [button next = with time] [button back = no time(只禁用)] 幫助查找錯誤的約束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

你能詳細說明你要做什麼嗎?你顯然禁用了Next和Back兩個按鈕。但是我沒有得到同時啓動兩個定時器的部分。你想禁用這兩個按鈕,並讓下一步按鈕有倒計時標題? – TLama

+0

同樣的TLama禁用這兩個按鈕,並讓下一個按鈕具有倒計時標題 – 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

相關問題