在按下後退按鈕(當安裝程序正在運行時)時,將NSIS腳本中的自定義頁面保存爲由用戶保留輸入的數據的方式?當按下後退按鈕時保留自定義頁面上的數據
回答
您可以將數據存儲在一個全局變量,或在$ PLUGINSDIR一個的.ini
有幾個方法可以做到這一點。無論哪種方式,你需要將數據存儲在全局變量中。
1)使用「離開」功能。
Page custom EnterCustom LeaveCustom
; Create two variables for each value/widget pair
Var Text
Var TextWidget
Var Check
Var CheckWidget
Function EnterCustom
nsDialogs::Create 1018
Pop $0
${NSD_CreateText} 0 0 80u 12u $Text
Pop $TextWidget
${NSD_CreateCheckBox} 0 26u 80u 12u "Check this box"
Pop $CheckWidget
${NSD_SetState} $CheckWidget $Check
nsDialogs::Show
FunctionEnd
Function LeaveCustom
${NSD_GetText} $TextWidget $Text
${NSD_GetState} $CheckWidget $Check
FunctionEnd
此方法唯一的問題是隻有在您點擊下一個按鈕時纔會調用LeaveCustom。所以如果你編輯字段,然後點擊返回按鈕,你的改變就會丟失。然而,如果你繼續前進然後回來,這些變化就會得到保存。
2)使用OnChange回調。
這有點複雜,但解決了以前的方法的問題。
Page custom EnterCustom
Var Initialized
; Create two variables for each value/widget pair
Var Text
Var TextWidget
Var Check
Var CheckWidget
Function EnterCustom
nsDialogs::Create 1018
Pop $0
${If} $Initialized != "True"
; Set defaults for all your values here
StrCpy $Text "Initial Value"
StrCpy $Check ${BST_UNCHECKED}
StrCpy $Initialized "True"
${EndIf}
; Create and configure all of your widgets
${NSD_CreateText} 0 0 80u 12u $Text
Pop $TextWidget
${NSD_OnChange} $TextWidget OnTextChange
${NSD_CreateCheckBox} 0 26u 80u 12u "Check this box"
Pop $CheckWidget
${NSD_SetState} $CheckWidget $Check
${NSD_OnClick} $CheckWidget OnCheckClick
nsDialogs::Show
FunctionEnd
; Create a callback function for each Widget
Function OnTextChange
Pop $0 ; Widget handle is on stack
${NSD_GetText} $TextWidget $Text
FunctionEnd
Function OnCheckClick
Pop $0 ; Widget handle is on stack
${NSD_GetState} $CheckWidget $Check
FunctionEnd
一些小部件,例如, RadioButtons和CheckBoxes,而是使用OnClick函數。此外ComboBox不能很好地使用這種方法。但是,似乎沒有記錄的DropList通常可以替代它並且工作正常。
單選按鈕也有點棘手,因爲只調用所選按鈕的點擊回調。我通過更新每個單選按鈕單擊回調中的所有單選按鈕值來解決此問題。
凌亂/繁瑣,但它的作品。
我知道這是一個古老的問題,但我已經從我的谷歌搜索降落在這裏。
您可以使用NSD_OnBack
(或直接撥打nsDialogs::OnBack
)設置OnBack
回撥。
下面是一小段代碼片段:
Function portsSelectionPage
nsDialogs::Create 1018
Pop $0
${NSD_CreateNumber} 70u 0 40u 12u $TomcatPort
Pop $TomcatPortHWND
${NSD_CreateNumber} 70u 14u 40u 12u $PostgresPort
Pop $PostgresPortHWND
nsDialogs::Show
${NSD_OnBack} "portsSelectionPageLeave"
FunctionEnd
Function portsSelectionPageLeave
${NSD_GetText} $TomcatPortHWND $TomcatPort
${NSD_GetText} $PostgresPortHWND $PostgresPort
FunctionEnd
!include nsDialogs.nsh
!include LogicLib.nsh
Name nsDialogs
OutFile nsDialogs.exe
XPStyle on
Var Dialog
Var Label
Var Text
Var Text_State
Var Checkbox
Var Checkbox_State
Page custom nsDialogsPage nsDialogsPageLeave
Page license
Page instfiles
Function .onInit
StrCpy $Text_State "Type something here..."
FunctionEnd
Function nsDialogsPage
nsDialogs::Create 1018
Pop $Dialog
${If} $Dialog == error
Abort
${EndIf}
${NSD_CreateLabel} 0 0 100% 12u "Hello, welcome to nsDialogs!"
Pop $Label
${NSD_CreateText} 0 13u 100% 12u $Text_State
Pop $Text
${NSD_CreateCheckbox} 0 30u 100% 10u "&Something"
Pop $Checkbox
${If} $Checkbox_State == ${BST_CHECKED}
${NSD_Check} $Checkbox
${EndIf}
# alternative for the above ${If}:
#${NSD_SetState} $Checkbox_State
nsDialogs::Show
FunctionEnd
Function nsDialogsPageLeave
${NSD_GetText} $Text $Text_State
${NSD_GetState} $Checkbox $Checkbox_State
FunctionEnd
Section
DetailPrint "hello world"
SectionEnd
更多信息http://nsis.sourceforge.net/Docs/nsDialogs/Readme.html#step-memory
這並沒有提供一個問題的答案。一旦你有足夠的[聲譽](https://stackoverflow.com/help/whats-reputation),你將可以[對任何帖子發表評論](https://stackoverflow.com/help/privileges/comment);相反,[提供不需要提問者澄清的答案](https://meta.stackexchange.com/questions/214173/why-do-i-need-50-reputation-to-comment-what-can- I-DO-代替)。 - [來自評論](/ review/low-quality-posts/17824389) – 2017-11-03 10:44:27
如果您有新問題,請點擊[Ask Question](問問題)(https://stackoverflow.com/questions/ask)按鈕。如果有助於提供上下文,請包含此問題的鏈接。 - [來自評論](/ review/low-quality-posts/17824389) – 2017-11-03 10:55:01
- 1. 當後退按鈕被按下時轉到特定頁面
- 2. 當按下後退按鈕時localStorage參數未定義
- 3. 當按下後退按鈕時跳過一個頁面,WP7
- 4. 自定義操作當按UINavigationController上的'後退按鈕'
- 5. 自定義後退按鈕
- 6. 按下後退按鈕時的自定義動畫 - iOS
- 7. 應用按後退按鈕當按下後退按鈕
- 8. 當按下後退按鈕訪問時自動重新加載頁面
- 9. 如何刪除「後退」按鈕/如何保留後退按鈕
- 10. 自定義按鈕欄與自定義後退導航按鈕
- 11. 按下後退按鈕後導航欄圖像保留
- 12. 在按下後退/前進按鈕時保留DOM上的更改
- 13. 瀏覽器後退按鈕頁面狀態的自定義按鈕點擊
- 14. 後退按鈕刷新當前頁面
- 15. 當我按下後退按鈕時,如何保持CountDownTimer運行
- 16. 單擊「後退」按鈕時如何保留表單數據
- 17. 使用自定義javascript後退按鈕時刪除POST數據
- 18. 當JSF(Richfaces)按下後退按鈕時,網頁過期提交
- 19. UINavigationController中的自定義後退按鈕
- 20. UINavigation bar的自定義後退按鈕
- 21. iphone - 後退按鈕的自定義UIBarButtonItem
- 22. 自定義後退按鈕的方法
- 23. UINavigationItem留下的UIBarButtonItem自定義按鈕
- 24. 保存按下後退按鈕
- 25. AngularJS當用戶按下後退按鈕
- 26. 回到上一頁點擊自定義後退按鈕
- 27. Backbone.js - 在後退按鈕後保留數據
- 28. 點擊後退按鈕後,保留搜索數據
- 29. 使用後退按鈕時保留自動完成結果
- 30. UINavigationController「後退按鈕」自定義文本?
你能更詳細?當我運行由NSIS創建的安裝文件並在自定義頁面的文本框中輸入一些數據時,單擊下一步,然後單擊後退按鈕,我剛剛輸入的數據不會保留。所以,即使我只需要更改前一頁中的幾個值,我也必須在頁面重置時再次將所有這些值全部寫入。 – Pia 2010-01-15 08:34:43
沒有數據的自動存儲,你必須自己做這一切 – Anders 2010-01-15 10:02:51