с помощью установщика nsis, добавления пользовательских радиокнопок, вызова секций в соответствии с выбранной радиокнопкой - PullRequest
3 голосов
/ 28 апреля 2011

enter image description here

Я хочу, чтобы, если ни одна из RadioButtons не была выбрана, то, когда нажата кнопка Next, то она должна выдать предупреждение, что ПОЖАЛУЙСТА ВЫБЕРИТЕ ПО-ОДНОМУ ПУНКТУ, и оно не должно идтик следующему диалогу.

Кроме того, я хочу, чтобы, если пользователь выбрал опцию: ОБНОВИТЬ СУЩЕСТВУЮЩЕЕ ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ, то копируются только некоторые файлы, а если выбрана другая радиопереключатель, то все файлы копируются,

Возможно ли это с помощью использования секций или функций?Могу ли я вызвать раздел, например, если выбрана RadioButton 1, то вызывается SECTION CREATEALLFILES, иначе вызывается SECTION CREATEONLYTWOFILES?

По моему мнению, я хочу, чтобы код содержал как удерживать идентификаторы этих двух кнопок RadioButton и использовать их соответственно для вызова различных разделов или функций.Какой будет код?Пожалуйста, помогите?

Кроме того, после нажатия кнопки NEXT на этой странице появится следующее диалоговое окно, как показано на рисунке ниже: я хочу показать LABEL, независимо от того, выполняется ли DEMO или выполняется UPDATE, для этого я добавлюМетка с использованием Resource Hacker, но как отобразить эту Метку и скрыть ее в соответствии с выбором пользователя RadioButton enter image description here

1 Ответ

2 голосов
/ 28 апреля 2011

Вы можете выбрать / отменить выбор разделов или просто поместить логику в один раздел, этот пример делает оба:

!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" и ShowWindow внутриблок if, который проверяет $ InstallType (этот код должен быть в обратном вызове функции show (MUI_PAGE_CUSTOMFUNCTION_SHOW) для этой страницы)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...