#nsis
#nsis
Вопрос:
Согласно руководству, я должен иметь возможность получить текст текстового элемента управления с помощью такого кода:
${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
Комментарии:
1. Черт возьми, я забыл завершить этот тест. Теперь у меня есть еще две причины чувствовать себя глупо. Спасибо за помощь.