utilizzando installazione NSIS, aggiungendo radiobuttons personalizzati, chiamando le sezioni in base alla scelta radiobutton

StackOverflow https://stackoverflow.com/questions/5815486

Domanda

entrare descrizione dell'immagine qui

Voglio che se nessuno dei componenti RadioButton sono selezionati, poi, quando si preme il pulsante Avanti, allora dovrebbe dare un avviso che ha scelto prego almeno uno ITEM, e non dovrebbe andare al prossimo dialogo.

Inoltre, voglio che se l'utente seleziona l'opzione: Aggiornare il SOFTWARE, quindi solo alcuni file vengono copiati, e se si seleziona l'altro radiobutton, quindi tutti i file vengono copiati,

Questo è possibile utilizzando le sezioni o funzioni devono essere utilizzati? Posso chiamare una sezione, come se RadioButton 1 è scelto, quindi SEZIONE CREATEALLFILES si chiama, CREATEONLYTWOFILES SEZIONE altro si chiama?

Secondo me, penso che voglio il codice per come tenere gli ID di queste due componenti RadioButton e li usa di conseguenza, per richiamare sezioni o funzioni diverse. Quale sarebbe il codice? Si prega di aiuto?

Inoltre, dopo aver premuto AVANTI in questa pagina, la finestra di dialogo successiva verrà come nell'immagine qui sotto: voglio mostrare un'etichetta, se DEMO è fatto, o UPDATE è in esecuzione, per questo vorrei aggiungere un'etichetta utilizzando Resource Hacker, ma come visualizzare quella etichetta e nasconderlo in base alla scelta dell'utente di RadioButton entrare descrizione dell'immagine qui

È stato utile?

Soluzione

E 'possibile selezionare / deselezionare le sezioni o semplicemente mettere la logica in una singola sezione, questo esempio fa entrambe le cose:

!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

Per impostare il testo nella pagina successiva, basta usare ${NSD_SetText} $hwndYourLabel "Text" e ShowWindow all'interno di un blocco if che mette alla prova $ InstallType (ha bisogno di questo codice da in mostra funzione di callback (MUI_PAGE_CUSTOMFUNCTION_SHOW) per quella pagina)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top