3

ここに画像の説明を入力してください

ラジオボタンが選択されていない場合、[次へ]ボタンを押すと、[少なくとも1つのアイテムを選択してください]というアラートが表示され、次のダイアログに移動しないようにする必要があります。

また、ユーザーが[既存のソフトウェアの更新]オプションを選択した場合は一部のファイルのみがコピーされ、他のラジオボタンが選択された場合はすべてのファイルがコピーされるようにします。

これは、セクションを使用して可能ですか、または関数を使用する必要がありますか?RadioButton 1が選択されている場合のように、SECTIONを呼び出すことはできますか?それ以外の場合はSECTION CREATEALLFILESが呼び出されますか?

私によると、これら2つのラジオボタンのIDを保持し、それに応じてそれらを使用して、さまざまなセクションや関数を呼び出す方法をコードに記述したいと思います。コードは何でしょうか?助けてください?

また、このページで[次へ]を押すと、次のダイアログが次の画像のように表示されます。DEMOが実行されているか、UPDATEが実行されているかを問わず、LABELを表示したいので、ResourceHackerを使用してラベルを追加します。そのラベルを表示し、RadioButtonのユーザー選択に従って非表示にします ここに画像の説明を入力してください

4

1 に答える 1

2

セクションを選択/選択解除するか、ロジックを1つのセクションに配置することができます。この例では、次の両方を実行します。

!include nsDialogs.nsh
!include Sections.nsh

var InstallType

Section 
#Install common files...
${If} $InstallType == DEMO
    #Do demo specific stuff
${Else}
    #Do update specific stuff
${EndIf}
SectionEnd

Section "" SEC_DEMO
#Install demo..
SectionEnd

Section "" SEC_UPDATE
#Do update..
SectionEnd

Page custom InstTypePageCreate InstTypePageLeave

Function InstTypePageCreate
nsDialogs::Create 1018
pop $0
${NSD_CreateRadioButton} 0 50u 100% 10u "Demo"
pop $1
${IfThen} $InstallType == DEMO ${|} ${NSD_Check} $1 ${|}
${NSD_CreateRadioButton} 0 70u 100% 10u "Update"
pop $2
${IfThen} $InstallType == UPDATE ${|} ${NSD_Check} $2 ${|}
nsDialogs::Show
FunctionEnd

Function InstTypePageLeave
${NSD_GetState} $1 $0
${If} $0 = ${BST_CHECKED}
    StrCpy $InstallType DEMO
    !insertmacro UnselectSection ${SEC_UPDATE}
    !insertmacro SelectSection ${SEC_DEMO}
${Else}
    ${NSD_GetState} $2 $0
    ${If} $0 = ${BST_CHECKED}
        StrCpy $InstallType UPDATE
        !insertmacro UnselectSection ${SEC_DEMO}
        !insertmacro SelectSection ${SEC_UPDATE}
    ${Else}
        MessageBox MB_ICONSTOP "You must select something!"
        Abort
    ${EndIf}
${EndIf}
FunctionEnd

次のページにテキストを設定するには、${NSD_SetText} $hwndYourLabel "Text"$ InstallTypeをテストするifブロック内でShowWindowを使用します(このコードは、そのページのshow functionコールバック(MUI_PAGE_CUSTOMFUNCTION_SHOW)に含まれている必要があります)

于 2011-04-28T10:47:55.933 に答える