utilizzando installazione NSIS, aggiungendo radiobuttons personalizzati, chiamando le sezioni in base alla scelta radiobutton
-
26-10-2019 - |
Domanda
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
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)