2013-10-17 91 views
1

在我的自定義頁面中,我在頁面加載時禁用了下一個按鈕...因爲有一些後臺進程需要完成,直到我們無法進入下一頁。所以我使用下面的代碼禁用了下一個按鈕。如何在NSIS中啓用禁用的「下一步」按鈕?

GetDlgItem $1 $HWNDPARENT 1 
EnableWindow $1 0 

但是我想在後臺進程完成後啓用下一個按鈕。我已經使用了follwoing代碼,以便

GetDlgItem $1 $HWNDPARENT 1 
EnableWindow $1 1 

,但它不是工作... CLDü請提出由我做了錯誤或NSIS如何實現這一目標?

以下是我的代碼

Function StartProgressPage 
    ; Set dialog text: 
    !insertmacro MUI_HEADER_TEXT "$(STARTPRGDIA_TITLE)" "$(STARTPRGDIA_SUBTITLE)" 

    ; Display the page: 
    !insertmacro MUI_INSTALLOPTIONS_DISPLAY "StartPrgDia" 

    ;Disable Next Button 
    GetDlgItem $0 $HWNDPARENT 1 
    EnableWindow $0 0 

    nsDialogs::Create 1018 
    Pop $dialog 
    nsDialogs::CreateControl "msctls_progress32" \ 
     ${DEFAULT_STYLES}|${PBS_SMOOTH} \ 
     ${PB_EXSTYLE} \ 
     0 30 100% 10% \ 
     "Test" \ 

    Pop $hwnd 
    ${NSD_CreateTimer} NSD_Timer.CallStop 10 
    nsDialogs::Show 
FunctionEnd 

Function NSD_Timer.CallStop 
    ${NSD_KillTimer} NSD_Timer.CallStop ; Kill the timer 
    SendMessage $hwnd ${PBM_SETRANGE32} 0 100 

    SendMessage $hwnd ${PBM_SETPOS} 25 0 
    Call <Some Process> 
    SendMessage $hwnd ${PBM_SETPOS} 50 0 
    Call ConfPropertyChanges 
    SendMessage $hwnd ${PBM_SETPOS} 100 0 
    ${NSD_CreateLabel} 0 10 20% 10u Completed 

    ;Enable Next Button 
    GetDlgItem $0 $HWNDPARENT 1 
    EnableWindow $0 1 
FunctionEnd 
+0

它應該工作。它爲我做。你如何啓動這個後臺進程?我使用'ThreadTimer :: Start'。 –

+0

我用我的代碼編輯了我的問題..請看看那個和cld你請更新我正確的方式... –

+0

你的函數NSD_Timer.CallStop從來沒有被調用過。設置進度條位置對你有用嗎?也許問題是EnableWindow是從不同於主GUI線程的線程調用的。 – Slappy

回答

0

據我所知,安裝程序將等待這裏面的代碼:

!insertmacro MUI_INSTALLOPTIONS_DISPLAY "StartPrgDia" 

,直到用戶進入到下一個頁面。 您是否確定在顯示自定義頁面時執行此行的代碼?

你應該叫

!insertmacro MUI_INSTALLOPTIONS_DISPLAY "StartPrgDia" 
畢竟你的代碼

或使用該(MUI2版)

Function CustomPage 
    !insertmacro INSTALLOPTIONS_INITDIALOG "page.ini" 

    # your code here 

    !insertmacro INSTALLOPTIONS_SHOW 

FunctionEnd