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