2012-08-27 59 views
0

在我的MUI組件頁面上我在用戶試圖離開該頁面時調用一個函數。在這個函數中,我試圖看到至少有1個組件被檢查。如果沒有,那麼我將顯示一個MessageBox並中止(停止繼續到下一頁)。組件頁面離開功能:總是說組件被選中

我的問題:我的功能總是說,即使它沒有檢查組件。我究竟做錯了什麼?

由於某些原因,程序總是認爲第一個組件被選中/選擇時,它不是?

!include nsdialogs.nsh 
!include MUI2.nsh 

!define MUI_PAGE_CUSTOMFUNCTION_SHOW compshow 
!define MUI_PAGE_CUSTOMFUNCTION_LEAVE compleave 

!insertmacro MUI_PAGE_COMPONENTS 
!insertmacro MUI_LANGUAGE "English" 

OutFile "test.exe" 

Function compshow 

FunctionEnd 

Function compleave 

    !insertmacro SectionFlagIsSet ${section1} ${SF_SELECTED} +1 +2 
    MessageBox MB_OK "Component Selected" 
    MessageBox MB_OK "Component NOT Selected" 

FunctionEnd 


Section "Dummy1" 

SectionEnd 

Section "Dummy2" 

SectionEnd 

回答

1

你的問題是相對跳轉。您應該使用一些標籤,因爲宏可能包含許多命令,而不僅僅是一個。

此外,認爲執行將在第一次跳轉後繼續。不要忘記跳過測試的其他分支。

修改後的compleave回調可以作爲你想要的結果:

Function compleave 

    !insertmacro SectionFlagIsSet ${section1} ${SF_SELECTED} selected not_selected 
    selected: 
    MessageBox MB_OK "Component Selected" 
    goto end 
    not_selected: 
    MessageBox MB_OK "Component NOT Selected" 
    end: 

FunctionEnd