2 votes

Comment puis-je obtenir un bouton de fin après une page nsDialogs

Je tente de créer une page de configuration post-installation dans mon script NSIS en utilisant nsDialogs. Mon script pour recueillir les saisies et exécuter la configuration fonctionne, cependant je ne vois jamais de bouton de fin/fermeture/sortie après avoir terminé. Actuellement, ma déclaration des pages ressemble à ceci :

Page directory
Page instfiles
Page custom nsDialogsPage nsDialogsPageLeave

Comment puis-je faire apparaître un bouton de fin/sortie terminé après l'exécution de nsDialogsPageLeave ?

6voto

Anders Points 34448

L'interface utilisateur classique de NSIS n'a pas de page de fin, la page instfiles est généralement la dernière page et elle affichera un "bouton de fin" après l'exécution de toutes les sections. Vous pouvez définir le texte de n'importe quel bouton sur la même chaîne avec SendMessage $hwndButton ${WM_SETTEXT} 0 "STR:$(^CloseBtn)" si vous voulez fournir votre propre page de fin.

La plupart des installateurs demandent les informations requises avant la page instfiles, si vous ne pouvez pas le faire, vous voudrez peut-être utiliser l'interface Moderne, elle fournira une page de fin pour vous :

!insertmacro MUI_PAGE_DIRECTORY
!insertmacro MUI_PAGE_INSTFILES
Page custom nsDialogsPage nsDialogsPageLeave
!insertmacro MUI_PAGE_FINISH

J'étais un peu confus si vous vouliez deux pages ; une page d'entrée puis une page de fin ou une page d'entrée/fin combinée. Une page combinée est un peu étrange mais c'est possible:

!define AppName "Test"
Name "${AppName}"
Outfile "${AppName} setup.exe"
InstallDir $temp

!include LogicLib.nsh
!include WinMessages.nsh
!include nsDialogs.nsh

Var MyEndConfigPageStage

Page Directory
Page InstFiles
Page Custom MyEndConfigPageCreate MyEndConfigPageLeave /EnableCancel

Function MyEndConfigPageCreate
StrCpy $MyEndConfigPageStage 0
GetDlgItem $0 $hwndParent 1
SendMessage $0 ${WM_SETTEXT} 0 "STR:&Appliquer"
nsDialogs::Create 1018
Pop $0
${NSD_CreateCheckBox} 0 13u 100% -13u "FooBar"
Pop $1
nsDialogs::Show
FunctionEnd

Function MyEndConfigPageLeave
${If} $MyEndConfigPageStage > 0
    Return
${EndIf}
${NSD_GetState} $1 $2
ClearErrors
WriteIniStr "$instdir\settings.ini" Dummy "FooBar" $2
${If} ${Errors}
    MessageBox mb_iconstop "Impossible d'appliquer les paramètres !"
    Abort
${EndIf}
IntOp $MyEndConfigPageStage $MyEndConfigPageStage + 1
GetDlgItem $0 $hwndParent 1
SendMessage $0 ${WM_SETTEXT} 0 "STR:$(^CloseBtn)"
GetDlgItem $0 $hwndParent 2
EnableWindow $0 0 ;Désactiver annuler
EnableWindow $1 0 ;Désactiver la case à cocher
Abort
FunctionEnd

Section
SectionEnd

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X