123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299 |
- Name "nsDialogs Example"
- OutFile "nsDialogs Example.exe"
- Caption "$(^Name)"
- Unicode True
- XPStyle on
- RequestExecutionLevel user
- !include nsDialogs.nsh
- !include LogicLib.nsh
- !include WinCore.nsh ; MAKELONG
- LicenseText "All the action takes place on the next page..." "Start"
- SubCaption 0 ": Ready?"
- Page license
- Page custom nsDialogsPage
- Page custom LBPage
- Page custom RangesPage
- Page custom NotifyPage
- Page custom RadioPage RadioLeave
- !pragma warning disable 8000 ; "Page instfiles not used, no sections will be executed!"
- Var BUTTON
- Var EDIT
- Var CHECKBOX
- Function nsDialogsPage
- nsDialogs::Create 1018
- Pop $0
- GetFunctionAddress $0 OnBack
- nsDialogs::OnBack $0
- ${NSD_CreateButton} 0 0 100% 12u Test
- Pop $BUTTON
- GetFunctionAddress $0 OnClick
- nsDialogs::OnClick $BUTTON $0
- ${NSD_CreateText} 0 35 100% 12u hello
- Pop $EDIT
- GetFunctionAddress $0 OnChange
- nsDialogs::OnChange $EDIT $0
- ${NSD_Edit_SetCueBannerText} $EDIT 0 "Type 'hello there' and get a free surprise"
- ${NSD_CreateCheckbox} 0 -50 100% 8u Test
- Pop $CHECKBOX
- GetFunctionAddress $0 OnCheckbox
- nsDialogs::OnClick $CHECKBOX $0
- ${NSD_CreateLabel} 0 40u 75% 40u "* Type `hello there` above.$\n* Click the button.$\n* Check the checkbox.$\n* Hit the Back button."
- Pop $0
- nsDialogs::Show
- FunctionEnd
- Function OnClick
- Pop $0 # HWND
- MessageBox MB_OK clicky
- FunctionEnd
- Function OnChange
- Pop $0 # HWND
- System::Call user32::GetWindowText(p$EDIT,t.r0,i${NSIS_MAX_STRLEN})
- ${If} $0 == "hello there"
- MessageBox MB_OK "right back at ya"
- ${EndIf}
- FunctionEnd
- Function OnBack
- MessageBox MB_YESNO "are you sure?" IDYES +2
- Abort
- FunctionEnd
- Function OnCheckbox
- Pop $0 # HWND
- MessageBox MB_OK "checkbox clicked"
- FunctionEnd
- !macro BeginControlsTestPage title
- nsDialogs::Create 1018
- Pop $0
- ${NSD_SetText} $hWndParent "$(^Name): ${title}"
- !macroend
- !macro CreateButton x y w h txt var handler data
- ${NSD_CreateButton} ${x} ${y} ${w} ${h} "${txt}"
- Pop ${var}
- nsDialogs::SetUserData ${var} ${data}
- ${NSD_OnClick} ${var} ${handler}
- !macroend
- Function LBPage
- !insertmacro BeginControlsTestPage "ListBox"
- ${NSD_CreateSortedListBox} 1u 0 -2u 70u ""
- Pop $1
- ${NSD_LB_AddString} $1 "Foo"
- ${NSD_LB_AddString} $1 "Bar"
- StrCpy $9 1
- ${NSD_CreateText} 1u 75u -2u 12u "New item #$9"
- Pop $EDIT
- !insertmacro CreateButton 1u 90u 50u 12u "Add (&Sorted)" $0 LBAction Add
- !insertmacro CreateButton 53u 90u 50u 12u "&Prepend" $0 LBAction Prepend
- !insertmacro CreateButton 105u 90u 50u 12u "&Append" $0 LBAction Append
- !insertmacro CreateButton 160u 90u 50u 12u "&Delete Last" $0 LBAction DL
- !insertmacro CreateButton 215u 90u 50u 12u "&Clear" $0 LBAction Clear
- nsDialogs::Show
- FunctionEnd
- Function LBAction
- Pop $0
- nsDialogs::GetUserData $0
- Pop $0
- ${NSD_GetText} $EDIT $8
- ${Select} $0
- ${Case} "Add"
- ${NSD_LB_AddString} $1 $8
- ${Case} "Prepend"
- ${NSD_LB_PrependString} $1 $8
- ${Case} "Append"
- ${NSD_LB_AppendString} $1 $8
- ${Case} "DL"
- ${NSD_LB_GetCount} $1 $8
- ${If} $8 U> 0
- IntOp $8 $8 - 1
- ${NSD_LB_DelItem} $1 $8
- ${EndIf}
- Return
- ${Case} "Clear"
- ${NSD_LB_Clear} $1
- Return
- ${EndSelect}
- IntOp $9 $9 + 1
- ${NSD_SetText} $EDIT "New item #$9"
- FunctionEnd
- Function RangesPage
- !insertmacro BeginControlsTestPage "Ranges"
- ${NSD_CreateHTrackBar} 1 0 -2 20u ""
- Pop $1
- ${NSD_TrackBar_SetRangeMax} $1 10
- ${NSD_TrackBar_SetTicFreq} $1 1
- ${NSD_TrackBar_SetPos} $1 3
- StrCpy $9 20 ; Progress pos
- ${NSD_CreateProgressBar} 1 25u -2 8u ""
- Pop $2
- ${NSD_CreateTimer} RangesTimer 1000
- ${NSD_CreateNumber} 1 40u 50u 12u "42"
- Pop $3
- ${NSD_CreateUpDown} 0 0 0 0 ""
- Pop $4
- ${NSD_UD_SetBuddy} $4 $3
- ${MAKELONG} $5 $0 50 0 ; 0..50
- ${NSD_UD_SetPackedRange} $4 $5
- nsDialogs::Show
- FunctionEnd
- Function RangesTimer
- IntOp $9 $9 + 5
- ${IfThen} $9 > 100 ${|} StrCpy $9 0 ${|}
- ${NSD_ProgressBar_SetPos} $2 $9
- FunctionEnd
- Function NotifyPage
- !insertmacro BeginControlsTestPage "WM_NOTIFY"
- nsDialogs::CreateControl "${__NSD_RichEdit_CLASS_20A}" "${__NSD_RichEdit_STYLE}" "${__NSD_RichEdit_EXSTYLE}" 1 1 -2 50u "" ; Forcing ANSI control, see forums.winamp.com/showthread.php?p=3169999
- Pop $9
- ${NSD_OnNotify} $9 OnNotify
- IntOp $8 ${ENM_LINK} | ${ENM_KEYEVENTS}
- ${NSD_RichEd_SetEventMask} $9 $8
- SendMessage $9 ${EM_AUTOURLDETECT} 1 0
- ${NSD_SetText} $9 "{\rtf1\ansi{\fonttbl\f0\fswiss Helvetica;}\f0\pard http://nsis.sf.net\par {\b Click the link!}\par\par Type something and I will block every other character...}"
- ${NSD_InitCommonControlsEx} ${ICC_DATE_CLASSES}
- ${NSD_CreateDatePicker} 1% 55u 48% 12u ""
- Pop $1
- ${NSD_OnNotify} $1 onDateTimeNotify
- ${NSD_CreateLabel} 51% 56u 48% 12u "Change the date..."
- Pop $9
- /*
- ${NSD_CreateCalendar} 1% 23% 150u 90u ""
- Pop $1
- ${NSD_AddStyle} $1 ${MCS_NOTODAY}
- System::Call 'USER32::SendMessage(p$1, i${MCM_GETMINREQRECT}, p0, @r2)'
- System::Call '*$2(i,i,i.r2,i.r3)'
- #System::Call 'USER32::SendMessage(p$1, i${MCM_GETMAXTODAYWIDTH}, p0, *i0r4)'
- #${IfThen} $4 > $2 ${|} StrCpy $2 $4 ${|}
- System::Call 'USER32::SetWindowPos(p$1,p0,i,i,ir2,ir3,i0x16)'
- */
- nsDialogs::Show
- FunctionEnd
- Function OnNotify
- Pop $1 ; HWND
- Pop $2 ; Code
- Pop $3 ; NMHDR*
- ${If} $2 = ${EN_LINK}
- System::Call '*$3(p,p,p,p.r2,p,p,i.r4,i.r5)' ; Extract from ENLINK*
- ${IfThen} $2 <> ${WM_LBUTTONDOWN} ${|} Return ${|}
- IntOp $2 $5 - $4
- System::Call '*(ir4,ir5,l,&t$2,i)p.r2' ; Create TEXTRANGE and a text buffer
- ${If} $2 P<> 0
- IntPtrOp $3 $2 + 16 ; Find buffer
- System::Call '*$2(i,i,p$3)' ; Set buffer in TEXTRANGE
- SendMessage $1 ${EM_GETTEXTRANGE} "" $2 $4
- ${If} $4 <> 0
- System::Call 'SHELL32::ShellExecute(p$hWndParent, p0, pr3, p0, p0, i 1)'
- ${EndIf}
- System::Free $2
- ${EndIf}
- ${ElseIf} $2 = ${EN_MSGFILTER}
- Var /Global Toggle
- System::Call '*$3(p,i,i,i.r4)' ; MSGFILTER->msg
- ${If} $4 = ${WM_CHAR}
- IntOp $Toggle $Toggle ^ 1
- ${If} $Toggle & 1
- ${NSD_Return} 1
- ${EndIf}
- ${EndIf}
- ${EndIf}
- FunctionEnd
- Function onDateTimeNotify
- Pop $1 ; HWND
- Pop $2 ; Code
- Pop $3 ; NMHDR*
- ${If} $2 = ${DTN_DATETIMECHANGE}
- System::Call 'USER32::SendMessage(p$1, i${DTM_GETSYSTEMTIME}, p0, @r3)i.r0'
- ${If} $0 = ${GDT_VALID}
- System::Call '*$3(&i2.R1, &i2.R2, &i2, &i2.R3, &i2, &i2, &i2, &i2)' ; SYSTEMTIME
- StrCpy $0 "$R1/$R2/$R3"
- ${Else}
- StrCpy $0 "N/A"
- ${EndIf}
- ${NSD_SetText} $9 $0
- ${EndIf}
- FunctionEnd
- Function RadioPage
- !insertmacro BeginControlsTestPage "Radio buttons"
- ; Group 1
- ${NSD_CreateFirstRadioButton} 4u 0 40% 6% "NPR"
- Pop $1
- ${NSD_OnClick} $1 onStationChanged
- ${NSD_CreateAdditionalRadioButton} 4u 12% 40% 6% "BBC"
- Pop $2
- ${NSD_OnClick} $2 onStationChanged
- ${NSD_CreateLabel} 4u 30u 80% 12u ""
- Pop $3
- ; Group 2
- ${NSD_CreateFirstRadioButton} 4u 50u 50% 12u "FM"
- Pop $4
- ${NSD_CreateAdditionalRadioButton} 4u 64u 50% 12u "AM"
- Pop $5
- SendMessage $4 ${BM_CLICK} "" "" ; Must select a default
- SendMessage $2 ${BM_CLICK} "" "" ; Must select a default
- nsDialogs::Show
- FunctionEnd
- Function onStationChanged
- Pop $0
- ${NSD_GetText} $0 $0
- ${If} $0 == "NPR"
- ${NSD_SetText} $3 "America, f*(# yeah!"
- ${Else}
- ${NSD_SetText} $3 "Keep Calm and Carry On"
- ${EndIf}
- FunctionEnd
- Function RadioLeave
- ${NSD_GetChecked} $5 $0
- ${If} $0 <> 0
- MessageBox MB_YESNO "Are you sure you want to keep living in the past?" IDYES +2
- Abort
- ${EndIf}
- FunctionEnd
- Section
- SectionEnd
|