2016-10-14 2 views
0

Per the manual, je devrais être en mesure d'obtenir le texte d'un contrôle de texte avec le code comme ceci:

${NSD_GetText} $TextBox $0 
MessageBox MB_OK "You typed:$\n$\n$0" 

Je reçois toujours la chaîne vide de cet appel. Dans le code ci-dessous, la zone de texte affiche "correct" mais les détails indiquent toujours Contents:; si je commente l'appel à ${NSD_GetText}, j'obtiens Contents: wrong.

!include nsDialogs.nsh 
!include LogicLib.nsh 

Var Dialog 
Var TextBox 

Page custom nsDialogsPage nsDialogsPageLeave 
Page instfiles 

Function nsDialogsPage 
    StrCpy $0 "wrong" 

    nsDialogs::Create 1018 
    Pop $Dialog 

    ${If} $Dialog == error 
     Abort 
    ${EndIf} 

    ${NSD_CreateText} 0 12u 93% 12u "correct" 
    Pop $TextBox 

    nsDialogs::Show 
FunctionEnd 

Function nsDialogsPageLeave 
FunctionEnd 

Section 
    ${NSD_GetText} $TextBox $0 

    DetailPrint "Contents: $0" 
SectionEnd 

Je pensais que le contrôle n'existait pas quand je tentais d'imprimer son contenu, et avons essayé de mettre à jour le texte tel qu'il a été tapé dans le contrôle; ça n'a pas aidé. Il est invraisemblable que NSIS soit brisé de cette façon, donc qu'est-ce que je fais de mal?

!include nsDialogs.nsh 
!include LogicLib.nsh 

Var Dialog 
Var TextBox 
Var Text 

Page custom nsDialogsPage nsDialogsPageLeave 
Page instfiles 

Function nsDialogsPage 
    StrCpy $0 "wrong" 

    nsDialogs::Create 1018 
    Pop $Dialog 

    ${If} $Dialog == error 
     Abort 
    ${EndIf} 

    ${NSD_CreateText} 0 12u 93% 12u "correct" 
    Pop $TextBox 
    ${NSD_OnChange} $TextBox UpdateText 

    nsDialogs::Show 
FunctionEnd 

Function nsDialogsPageLeave 
FunctionEnd 

Function UpdateText 
    ${NSD_GetText} $TextBox $Text 
FunctionEnd 

Section 
    DetailPrint "Contents: $Text" 
SectionEnd 

Répondre

1

Vous avez raison, le contrôle n'existe pas dans la section de sorte que vous devez obtenir le contenu pendant que vous êtes sur la page personnalisée.

Votre deuxième exemple devrait fonctionner correctement si l'utilisateur change le texte mais pas si ce n'est pas le cas car l'événement change ne se déclencherait pas.

Normalement, vous venez de lire le contenu dans le rappel de congé de page:

Var Dialog 
Var TextBox 
Var Text 

!include LogicLib.nsh 
!include nsDialogs.nsh 
Page custom nsDialogsPage nsDialogsPageLeave 
Page instfiles 

Function nsDialogsPage 
    nsDialogs::Create 1018 
    Pop $Dialog 
    ${If} $Dialog == error 
     Abort 
    ${EndIf} 

    ${NSD_CreateText} 0 12u 93% 12u "correct" 
    Pop $TextBox 

    nsDialogs::Show 
FunctionEnd 

Function nsDialogsPageLeave 
${NSD_GetText} $TextBox $Text 
FunctionEnd 


Section 
    DetailPrint "Contents: $Text" 
SectionEnd 
+0

Dang, j'oublié de terminer ce test. Maintenant, j'ai deux autres raisons de me sentir bête. Merci pour l'aide. – Grault