簡體   English   中英

nsDialogs頁面后如何獲得完成按鈕

[英]How can I get a finish button after a nsDialogs page

我正在嘗試使用nsDialogs在nsis腳本中創建安裝后配置頁面。 我的用於收集輸入和執行配置的腳本可以運行,但是完成后再也不會顯示完成/關閉/退出按鈕。 目前,我的頁面聲明看起來像:

Page directory
Page instfiles
Page custom nsDialogsPage nsDialogsPageLeave

nsDialogsPageLeave執行后,如何顯示完成/退出/完成按鈕?

經典的NSIS UI沒有完成頁面,instfiles頁面通常是最后一頁,並且在所有部分執行完后將顯示“完成按鈕”。 如果要提供自己的完成頁面,則可以使用SendMessage $hwndButton ${WM_SETTEXT} 0 "STR:$(^CloseBtn)"將任何按鈕的文本設置為相同的字符串。

大多數安裝程序會在instfiles頁面之前請求所需的信息,如果您無法執行此操作,則可能要使用Modern UI ,它將為您提供一個完成頁面:

!insertmacro MUI_PAGE_DIRECTORY
!insertmacro MUI_PAGE_INSTFILES
Page custom nsDialogsPage nsDialogsPageLeave
!insertmacro MUI_PAGE_FINISH

如果您要兩頁,對我來說還不太清楚。 輸入頁面,然后是完成頁面或組合的輸入/完成頁面。 合並的頁面有點奇怪,但是可能:

!define AppName "Test"
Name "${AppName}"
Outfile "${AppName} setup.exe"
InstallDir $temp

!include LogicLib.nsh
!include WinMessages.nsh
!include nsDialogs.nsh

Var MyEndConfigPageStage

Page Directory
Page InstFiles
Page Custom MyEndConfigPageCreate MyEndConfigPageLeave /EnableCancel

Function MyEndConfigPageCreate
StrCpy $MyEndConfigPageStage 0
GetDlgItem $0 $hwndparent 1
SendMessage $0 ${WM_SETTEXT} 0 "STR:&Apply"
nsDialogs::Create 1018
Pop $0
${NSD_CreateCheckBox} 0 13u 100% -13u "FooBar"
Pop $1
nsDialogs::Show
FunctionEnd

Function MyEndConfigPageLeave
${If} $MyEndConfigPageStage > 0
    Return
${EndIf}
${NSD_GetState} $1 $2
ClearErrors
WriteIniStr "$instdir\settings.ini" Dummy "FooBar" $2
${If} ${Errors}
    MessageBox mb_iconstop "Unable to apply settings!"
    Abort
${EndIf}
IntOp $MyEndConfigPageStage $MyEndConfigPageStage + 1
GetDlgItem $0 $hwndparent 1
SendMessage $0 ${WM_SETTEXT} 0 "STR:$(^CloseBtn)"
GetDlgItem $0 $hwndparent 2
EnableWindow $0 0 ;Disable cancel
EnableWindow $1 0 ;Disable the checkbox
Abort
FunctionEnd

Section
SectionEnd

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM