2012-09-05 2 views
4

J'ai un script NSIS très simple qui permet à l'utilisateur de sélectionner le composant qu'il souhaite installer, mais j'ai besoin de dire "Veuillez sélectionner un composant" s'il n'a rien sélectionné .NSIS - Valider la sélection des boutons radio

est ici le script:

# Based on the one-section example 
# http://nsis.sourceforge.net/Examples/one-section.nsi 

!include "sections.nsh" 

Name "Humira & You" 
OutFile "Humira & You - September 2012.exe" 
RequestExecutionLevel user 

Page components 
Page instfiles 

Section /o "Rheumatoid Arthritis" P1 
    File "/oname=$pluginsdir\Setup.msi" "setupfiles\Humira and you - Rheumatoid Arthritis.msi" 
SectionEnd 

Section /o "Psoriatic Arthritis" P2 
    File "/oname=$pluginsdir\Setup.msi" "setupfiles\Humira and you - Psoriatic Arthritis.msi" 
SectionEnd 

Section /o "Ankylosing Spondylitis" P3 
    File "/oname=$pluginsdir\Setup.msi" "setupfiles\Humira and you - Ankylosing Spondylitis.msi" 
SectionEnd 

Section /o "Axial Spondyloarthritis" P4 
    File "/oname=$pluginsdir\Setup.msi" "setupfiles\Humira and you - Axial Spondyloarthritis.msi" 
SectionEnd 

Section ; Hidden section that runs the show 
    DetailPrint "Installing selected application..." 
    SetDetailsPrint none 
    ExecWait '"msiexec" /i "$pluginsdir\Setup.msi"' 
    SetDetailsPrint lastused 
SectionEnd 

Function .onInit 
    Initpluginsdir ; Make sure $pluginsdir exists 
    StrCpy $1 ${P2} ;The default 
FunctionEnd 

Function .onSelChange 
!insertmacro StartRadioButtons $1 
    !insertmacro RadioButton ${P1} 
    !insertmacro RadioButton ${P2} 
    !insertmacro RadioButton ${P3} 
    !insertmacro RadioButton ${P4} 
!insertmacro EndRadioButtons 
FunctionEnd 

J'ai eu un coup d'oeil autour et suis tombé sur cet exemple, http://nsis.sourceforge.net/Useful_InstallOptions_and_MUI_macros#Macro:_CHECKBOXCHECKER, mais il semble trop complexe pour ce que je veux. Y at-il aucun moyen de dire NSIS:

if ($1.selectedIndex > -1) { 
    // continue 
} else { 
    MessageBox.Show("Please select"); 
} 

Merci, Greg.

Répondre

3

Vous pouvez utiliser une fonction de rappel lorsque vous quittez la page des composants pour vérifier si l'on est sélectionné.

Voici un morceau de code que j'utilise dans une configuration. J'utilise une petite macro pour résumer dans une variable les composants sélectionnés. S'il n'y en a pas, la variable est nulle. J'utilise le bloc PageEx d'associer les fonctions de rappel sur la page du composant (tel que le rappel de congé est le troisième, j'utilise une fonction fictive pour les deux premières autres)

Remplacer

Page components 

par

PageEx components 
    PageCallbacks DummyFunc DummyFunc componentsLeave 
PageExEnd 

garder votre dos appel .onSelChange pour gérer la sélection exclusive, puis l'ajouter à la fin de votre script:

!define SECTIONCOUNT 3 ; total -1 
;SaveSections adds one bit to the given variable for each selected component 
!macro SaveSections VAR 
    StrCpy ${VAR} 0 
    ${ForEach} $R0 ${SECTIONCOUNT} 0 - 1 
     IntOp ${VAR} ${VAR} << 1 
     ${If} ${SectionIsSelected} $R0 
      ;${DEBUG} "Section $R0 checked" 
      IntOp ${VAR} ${VAR} + 1 
     ${EndIf} 
    ${Next} 
!macroend 

Function DummyFunc 
FunctionEnd 

Function componentsLeave 
    !insertmacro SaveSections $2 
    ${if} $2 = 0 
     MessageBox MB_OK|MB_ICONEXCLAMATION "Select something !" /sd IDOK 
     Abort 
    ${endif} 
FunctionEnd 
+0

Fonctionne comme un rêve, merci! – gfyans