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
4

1 に答える 1

1

あなたの問題は相対的なジャンプにあります。マクロには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
于 2012-08-27T11:55:08.940 に答える