feat: NSIS 中文安装器(年糕历险记-Setup-v0.1.0.exe 实际构建+静默安装验证)、菜单鼠标可见性修复、首页 UI 原版复刻(土质背景/原版按钮/splash/版本角标)、全 goroutine 崩溃兜底
This commit is contained in:
299
tools/nsis/nsis-3.10/Examples/nsDialogs/example.nsi
Normal file
299
tools/nsis/nsis-3.10/Examples/nsDialogs/example.nsi
Normal file
@@ -0,0 +1,299 @@
|
||||
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
|
||||
Reference in New Issue
Block a user