Skip to content
⌘ NSIS Forum Archive

NSDialogs GetText problems

6 posts

ascTim#

NSDialogs GetText problems

Hey there.

It looks like I'm too confused after reading the manual to use the NSD_GetText function.

I want to create a custom page that asks for a Text input. And this text should be written into the registry.
The MessageBox on the last line gives an empty box, so it seems like it's not working.

Can anybody help me out?

Var Dialog
Var Label
Var Text
Var DB
Function SETTINGS
    nsDialogs::Create 1018
    Pop $Dialog
    ${If} $Dialog == error
        Abort
    ${EndIf}
    ${NSD_CreateLabel} 0 0 110% 12u "What's the name of your database?"
    Pop $Label
    ${NSD_CreateText} 0 13u 25% 12u "database_name"
    Pop $Text
    nsDialogs::Show
    
    ${NSD_GetText} 1018 $DB
    
    MessageBox MB_OK "$DB" #my test if it works
FunctionEnd 
Coby#
# INFO #
Name `Test`
OutFile Test.exe
InstallDir $PROGRAMFILES\Test
# COMPRESSOR #
SetCompressor /SOLID /FINAL lzma
# RUNTIME #
RequestExecutionLevel "USER"
# HIDE # SHOW #
ShowInstDetails nevershow
ShowUninstDetails NeverShow
# INCLUDES #
!include "MUI2.nsh"
!include "LogicLib.nsh"
!include "nsDialogs.nsh"
!Include "WinMessages.nsh"
!include "WordFunc.nsh"
!include "FileFunc.nsh"
# STYLE & ICON #
BrandingText ` `
# PAGE #
!define MUI_CUSTOMFUNCTION_GUIINIT onGUIInit
Page custom "Page.Test" "Page.Test.Leave" 
Page instfiles "" "InstFilesPageShow"
Page custom "Page.Complete"
# LANGUAGE #
!insertmacro MUI_LANGUAGE English
# INIT #
Function .onInit
  InitPluginsDir
  SetOverwrite try
  AllowSkipFiles off
FunctionEnd
# GUI #
Function onGUIInit
  MoveAnywhere::Hook
  System::Call user32::SetWindowLong(i$HWNDPARENT,i-16,0x9480084C)i.R0
  GetDlgItem $0 $HWNDPARENT 1034
  ShowWindow $0 ${SW_HIDE}
  GetDlgItem $0 $HWNDPARENT 1035
  ShowWindow $0 ${SW_HIDE}
  GetDlgItem $0 $HWNDPARENT 1036
  ShowWindow $0 ${SW_HIDE}
  GetDlgItem $0 $HWNDPARENT 1037
  ShowWindow $0 ${SW_HIDE}
  GetDlgItem $0 $HWNDPARENT 1038
  ShowWindow $0 ${SW_HIDE}
  GetDlgItem $0 $HWNDPARENT 1039
  ShowWindow $0 ${SW_HIDE}
  GetDlgItem $0 $HWNDPARENT 1256
  ShowWindow $0 ${SW_HIDE}
  GetDlgItem $0 $HWNDPARENT 1028
  ShowWindow $0 ${SW_HIDE}
  System::Call user32::GetSystemMetrics(i0)i.r1
  System::Call user32::GetSystemMetrics(i1)i.r2
  IntOp $1 $1 - 656
  IntOp $1 $1 / 2
  IntOp $2 $2 - 495
  IntOp $2 $2 / 2
  System::Call user32::MoveWindow(i$HWNDPARENT,i$1,i$2,i656,i495,1)
  System::Alloc 16
  System::Call user32::GetWindowRect(i$HWNDPARENT,isR0)
  System::Call *$R0(i.R1,i.R2,i.R3,i.R4)
  IntOp $R3 $R3 - $R1
  IntOp $R4 $R4 - $R2
  System::Call gdi32::CreateRoundRectRgn(i0,i0,iR3,iR4,i9,i9)i.r0
  System::Call user32::SetWindowRgn(i$HWNDPARENT,ir0,i1)
  System::Free $R0
  System::Call User32::GetDesktopWindow()i.R0
  SetCtlColors $HWNDPARENT "0xFFFFFF" "0xFF8C00"
FunctionEnd
# WELCOME #
Function "Page.Test"
  var /GLOBAL Dialog
  var /GLOBAL Lbl.Welcome
  var /GLOBAL Btn_Close
  var /GLOBAL Btn_Next
  var /GLOBAL Lbl.Database
  var /GLOBAL PATH_DATABASE 
  var /GLOBAL DATABASE
  var /GLOBAL Lbl.Show.Database
  var /GLOBAL GroupBox
  GetDlgItem $0 $HWNDPARENT 1
  ShowWindow $0 ${SW_HIDE}
  GetDlgItem $0 $HWNDPARENT 2
  ShowWindow $0 ${SW_HIDE}
  GetDlgItem $0 $HWNDPARENT 3
  ShowWindow $0 ${SW_HIDE}
  GetDlgItem $0 $HWNDPARENT 1990
  ShowWindow $0 ${SW_HIDE}
  GetDlgItem $0 $HWNDPARENT 1991
  ShowWindow $0 ${SW_HIDE}
  GetDlgItem $0 $HWNDPARENT 1992
  ShowWindow $0 ${SW_HIDE}
  System::Call "user32::SetWindowPos(i$HWNDPARENT,i,i,i,i 656,i 495,i 0x16)"
  nsDialogs::Create /NOUNLOAD 1044
  Pop $Dialog 
  ${If} $Dialog == error 
    Abort 
  ${EndIf} 
  System::Call "user32::MoveWindow(i$Dialog,i0,i0,i 656,i 495,i0)"
  SetCtlColors $Dialog "0xFFFFFF" "0xFF8C00"
  # WELCOME #
  nsDialogs::CreateControl /NOUNLOAD STATIC 0x40000000|0x10000000|0x04000000|0x00000100 0x00000020 2% 1% 60% 4% "Welcome!" 
  Pop $Lbl.Welcome
  CreateFont $0 "$(^Font)" 14 300
  SendMessage $Lbl.Welcome ${WM_SETFONT} $0 0
  SetCtlColors $Lbl.Welcome "0xFFFFFF" "0xFF8C00"
  # CLOSE #
  nsDialogs::CreateControl /NOUNLOAD BUTTON 0x40000000|0x10000000|0x04000000|0x00010000 0 95% 1% 4% 4% "x"
  Pop $Btn_Close
  StrCpy $1 $Btn_Close
  GetFunctionAddress $3 ".onClick.Close"
  nsDialogs::onClick /NOUNLOAD $1 $3
  SetCtlColors $Btn_Close "0xFFFFFF" "0xFF8C00"
  # DATABASE #
  nsDialogs::CreateControl /NOUNLOAD STATIC 0x40000000|0x10000000|0x04000000|0x00000100 0x00000020 4% 15% 60% 3% "What's the name of your database?" 
  Pop $Lbl.Database 
  SetCtlColors $Lbl.Database "0xFFFFFF" "0xFF8C00"
  nsDialogs::CreateControl /NOUNLOAD EDIT 0x40000000|0x10000000|0x04000000|0x00010000|0x00000080 0 4% 20% 60% 5% "" 
  Pop $PATH_DATABASE 
  Strcpy $1 $PATH_DATABASE
  GetFunctionAddress $3 ".onChange.Database"
  nsDialogs::OnChange $1 $3
  SendMessage $PATH_DATABASE ${WM_SETTEXT} 0 "STR:Please type here your name of database ..."
  CreateFont $0 "$(^Font)" 14 300
  SendMessage $PATH_DATABASE ${WM_SETFONT} $0 0
  SetCtlColors $PATH_DATABASE "0xFFFFFF" "0xffa332"
  nsDialogs::CreateControl /NOUNLOAD STATIC 0x40000000|0x10000000|0x04000000|0x00000100 0x00000020 65% 21% 30% 3% "" 
  Pop $Lbl.Show.Database 
  SetCtlColors $Lbl.Show.Database "0xFFFFFF" "0xFF8C00"
  # NEXT #
  nsDialogs::CreateControl /NOUNLOAD BUTTON 0x40000000|0x10000000|0x04000000|0x00010000 0 35% 92% 25% 6% "$(^NextBtn)"
  Pop $Btn_Next
  StrCpy $1 $Btn_Next
  GetFunctionAddress $3 ".onClick.Next"
  nsDialogs::onClick /NOUNLOAD $1 $3
  EnableWindow $Btn_Next 0
  SetCtlColors $Btn_Next "0xFFFFFF" "0xFF8C00"
  # Groupbox #
  nsDialogs::CreateControl /NOUNLOAD BUTTON 0x40000000|0x10000000|0x04000000|0x00000007 0x00000080 2% 8% 96% 80% ""
  Pop $GroupBox
  SetCtlColors $GroupBox "0xFFFFFF" "0xFF8C00"
  nsDialogs::Show 
FunctionEnd
# DATABASE #
Function ".onChange.Database"
  Pop $PATH_DATABASE
  ${NSD_GetText} $PATH_DATABASE $0
  StrCpy $DATABASE "$0"
    SendMessage $Lbl.Show.Database ${WM_SETTEXT} 0 "STR:Database: $DATABASE"
  ${If} $DATABASE != "1"
    EnableWindow $Btn_Next 1
  ${Else}
    EnableWindow $Btn_Next 0
  ${EndIf}
FunctionEnd
# NEXT #
Function ".onClick.Next"
  StrCpy $R9 1
  SendMessage $HWNDPARENT 0x408 1 0
  Abort
FunctionEnd
# LEAVE #
Function "Page.Test.Leave" 
  ${NSD_GetText} $PATH_DATABASE $0
  ${If} $0 != "$DATABASE"
     MessageBox MB_OK "The database $DATABASE has been added successfully!"
  ${EndIf}
FunctionEnd
# CLOSE #
Function ".onClick.Close"
  SendMessage $HWNDPARENT ${WM_CLOSE} 0 0
FunctionEnd
Function "InstFilesPageShow"
    FindWindow $R2 "#32770" "" $HWNDPARENT
    ShowWindow $0 ${SW_HIDE}
    GetDlgItem $1 $R2 1027
    ShowWindow $1 ${SW_HIDE}
    GetDlgItem $0 $HWNDPARENT 1
    EnableWindow $0 0
    ShowWindow $0 ${SW_HIDE}
    GetDlgItem $0 $HWNDPARENT 2
    EnableWindow $0 0
    ShowWindow $0 ${SW_HIDE}
    GetDlgItem $0 $HWNDPARENT 3
    EnableWindow $0 0
    ShowWindow $0 ${SW_HIDE}
    # ...:: SIZE WINDOW ::... #
    StrCpy $R0 $R2
    System::Call "user32::MoveWindow(i R0, i 0, i 0, i 656, i 495) i r2"
    # ...:: SHOW DETAILS ::... #
    GetDlgItem $1 $R2 1027
    StrCpy $0 $1
    System::Call user32::SetWindowPos(i$1,i0,i620,i6,i0,i0,i0x0001)
    System::Call user32::SetWindowPos(i$1,i0,i0,i0,i22,i22,i0x0002)
    System::Call "user32::SetWindowText(i $1, t $\"x")"
    ShowWindow $1 ${SW_SHOW}
    EnableWindow $1 1
    SetCtlColors $1 "0xFFFFFF" "0xFF8C00"
    # ...:: PROGRESSBAR ::... #
    GetDlgItem $R0 $R2 1004
    SetCtlColors $R2 "0xFFFFFF" "0xFF8C00"
    System::Call "user32::MoveWindow(i R0, i 25, i 400, i 605, i 6) i r2"
    # ...:: DETAILPRINT ::... #
    GetDlgItem $R1 $R2 1006
    SetCtlColors $R1 "0xFFFFFF" "0xFF8C00"
    System::Call "user32::MoveWindow(i R1, i 25, i 370, i 605, i 20) i r2"
    CreateFont $1 "$(^Font)" "$(^FontSize)"
    SendMessage $R1 ${WM_SETFONT} $1 0
    # ...:: SHOW DETAIL::... #
    GetDlgItem $R8 $R2 1016
    SetCtlColors $R8 "0xFFFFFF" "0xFF8C00"
    System::Call "user32::MoveWindow(i R8, i 25, i 80, i 605, i 250) i r2"
    # ...:: SKIN PROGRESS ::... #
    FindWindow $R2 "#32770" "" $HWNDPARENT
    GetDlgItem $5 $R2 1004
    # ...:: TITLE ::... #
    FindWindow $R0 "#32770" "" $HWNDPARENT
    System::Call 'User32::CreateWindowEx(i 0, t "STATIC", t "Welcome!", i ${WS_CHILD}|${WS_VISIBLE}|${WS_EX_TRANSPARENT}, i 10, i 8, i 580, i 35, i R0, i 0, i 0, i 0) i.R1'
    CreateFont $1 "$(^Font)" "18" "500"
    SendMessage $R1 ${WM_SETFONT} $1 0
    SetCtlColors $R1 "0xFFFFFF" "0xFF8C00"
    # ...:: GROUPBOX ::... #
    FindWindow $R0 "#32770" "" $HWNDPARENT
    System::Call 'User32::CreateWindowEx(i0,t"BUTTON",t"",i${BS_GROUPBOX}|${WS_CHILD}|${WS_VISIBLE},i10,i40,i635,i400,i$R0,i0X1042,i0,i0) i.R4'
    SetCtlColors $R4 "0xFFFFFF" "0xFF8C00"
FunctionEnd
# SECTION #
Section "MAIN" SEC01
 DetailPrint `Installing ... Please wait ...`
 Sleep 500
 Sleep 500
 Sleep 500
 Sleep 500
 Sleep 1000
 Sleep 500
 Sleep 500
 Sleep 500
 Sleep 500
 Sleep 500
 Sleep 500
 Sleep 500
 Sleep 500
 Sleep 1000
 Sleep 500
 Sleep 500
 Sleep 500
 Sleep 500
 Setautoclose "True"
SectionEnd
#...:: FINISH ::... #
Function "Page.Complete"
  var /GLOBAL Lbl.Finish
  var /GLOBAL Btn_Exit
  GetDlgItem $0 $HWNDPARENT 1
  ShowWindow $0 ${SW_HIDE}
  GetDlgItem $0 $HWNDPARENT 2
  ShowWindow $0 ${SW_HIDE}
  GetDlgItem $0 $HWNDPARENT 3
  ShowWindow $0 ${SW_HIDE}
  GetDlgItem $0 $HWNDPARENT 1990
  ShowWindow $0 ${SW_HIDE}
  GetDlgItem $0 $HWNDPARENT 1991
  ShowWindow $0 ${SW_HIDE}
  GetDlgItem $0 $HWNDPARENT 1992
  ShowWindow $0 ${SW_HIDE}
  System::Call "user32::SetWindowPos(i$HWNDPARENT,i,i,i,i 656,i 495,i 0x16)"
  nsDialogs::Create /NOUNLOAD 1044
  Pop $Dialog 
  ${If} $Dialog == error 
    Abort 
  ${EndIf} 
  System::Call "user32::MoveWindow(i$Dialog,i0,i0,i 656,i 495,i0)"
  SetCtlColors $Dialog "0xFFFFFF" "0xFF8C00"
  # FINISH #
  nsDialogs::CreateControl /NOUNLOAD STATIC 0x40000000|0x10000000|0x04000000|0x00000100 0x00000020 2% 1% 60% 4% "Completed!" 
  Pop $Lbl.Finish
  CreateFont $0 "$(^Font)" 14 300
  SendMessage $Lbl.Finish ${WM_SETFONT} $0 0
  SetCtlColors $Lbl.Finish "0xFFFFFF" "0xFF8C00"
  # CLOSE #
  nsDialogs::CreateControl /NOUNLOAD BUTTON 0x40000000|0x10000000|0x04000000|0x00010000 0 95% 1% 4% 4% "x"
  Pop $Btn_Close
  StrCpy $1 $Btn_Close
  GetFunctionAddress $3 ".OnClick.Finish"
  nsDialogs::onClick /NOUNLOAD $1 $3
  SetCtlColors $Btn_Close "0xFFFFFF" "0xFF8C00"
  # EXIT #
  nsDialogs::CreateControl /NOUNLOAD BUTTON 0x40000000|0x10000000|0x04000000|0x00010000 0 35% 92% 25% 6% "$(^CloseBtn)"
  Pop $Btn_Exit
  StrCpy $1 $Btn_Exit
  GetFunctionAddress $3 ".OnClick.Finish"
  nsDialogs::onClick /NOUNLOAD $1 $3
  SetCtlColors $Btn_Exit "0xFFFFFF" "0xFF8C00"
  # Groupbox #
  nsDialogs::CreateControl /NOUNLOAD BUTTON 0x40000000|0x10000000|0x04000000|0x00000007 0x00000080 2% 8% 96% 80% ""
  Pop $GroupBox
  SetCtlColors $GroupBox "0xFFFFFF" "0xFF8C00"
  nsDialogs::Show
FunctionEnd
# ...:: Finish ::... #
Function ".OnClick.Finish"
  SendMessage $HWNDPARENT 0x408 1 0
FunctionEnd
# END #
Function .onGUIEnd
FunctionEnd 
Anders#
Var Dialog 
Var Label 
Var Text 
Var DB 
Function .onInit
StrCpy $DB "database_name"  ; initial value
FunctionEnd
!include nsDialogs.nsh
Function SETTINGS 
    nsDialogs::Create 1018 
    Pop $Dialog 
    ${If} $Dialog == error 
        Abort 
    ${EndIf} 
    ${NSD_CreateLabel} 0 0 110% 12u "What's the name of your database?" 
    Pop $Label 
    ${NSD_CreateText} 0 13u 25% 12u "$DB" 
    Pop $Text 
    nsDialogs::Show 
    MessageBox MB_OK "$DB" #my test if it works 
FunctionEnd  
Function SETTINGS_Leave
    ${NSD_GetText} $Text $DB 
FunctionEnd
Page Custom SETTINGS SETTINGS_Leave
Page Components
Page InstFiles 
---

Why do you always make things complicated Coby? This is your final warning, post relevant and minimal code or get banned.