2016-10-14 5 views
0

Per the manual, я должен быть в состоянии получить текст управления текстом с кодом, как это:

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

Я всегда получаю пустую строку из этого вызова. В приведенном ниже коде текстовое поле показывает «правильный», но в деталях всегда отображается Contents:; если я прокомментирую звонок ${NSD_GetText}, я получаю 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 

Так что я подумал, что контроль не существует, когда я пытался напечатать его содержимое, и пытались обновить текст, был напечатан в контроле; это не помогло. Неправдоподобно, что NSIS нарушается таким образом, поэтому что я делаю неправильно?

!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 

ответ

1

Вы правильно, этот элемент управления не существует в разделе, так что вы должны получить содержимое в то время как вы находитесь на пользовательской странице.

Ваш второй пример должен работать правильно, если пользователь меняет текст, но если нет, потому что событие изменения не срабатывает.

Вы обычно только читать содержимое на странице отпуска обратного вызова:

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 это, я забыл закончить этот тест. Теперь у меня есть еще две причины, чтобы чувствовать себя глупо. Спасибо за помощь. – Grault

Смежные вопросы