NSIS: вызвать MUI_PAGE_LICENSE из функции, но получить ошибку «XPStyle not valid» - PullRequest
1 голос
/ 12 марта 2019

У меня есть настраиваемый диалог с «Условиями лицензии». флажок, в котором флажок Текст на самом деле является ссылкой, которая должна отображать диалоговое окно с лицензией.

; === LicenseLink (type: Link) ===
${NSD_CreateLink} 132.96u 100.92u 107.29u 14.15u "License terms and conditions."
Pop $hCtl_welcome_LicenseLink
${NSD_OnClick} $hCtl_welcome_LicenseLink ShowLicense

Теперь в функции «ShowLicense» я пытался вызвать

!insertmacro MUI_PAGE_LICENSE

но получите ошибку: Ошибка: команда XPStyle недопустима в функции

очевидно, я подхожу к этому неправильно и не могу интерпретировать ошибку. Был бы рад любым идеям о том, как решить эту проблему.

Спасибо!

1 Ответ

0 голосов
/ 12 марта 2019

Вы не можете вызвать !insertmacro MUI_PAGE_LICENSE динамически, количество страниц определяется во время компиляции.

Однако вы можете пропустить страницы, чтобы добиться этого:

InstallDir "$Temp\Test"

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

!define MUI_PAGE_CUSTOMFUNCTION_PRE SkipLicensePage
!insertmacro MUI_PAGE_LICENSE "${__FILE__}"
Page Custom InfoPageCreate InfoPageValidate
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_LANGUAGE English


Var ShowLicensePage
Function SkipLicensePage
${IfThen} $ShowLicensePage = 0 ${|} Abort ${|} ; Skip it the first time
FunctionEnd

Function OnShowLicense
SendMessage $hWndParent ${WM_COMMAND} 3 "" ; Click the (hidden) back button
FunctionEnd

Var InstDirCtl
Function InfoPageCreate
StrCpy $ShowLicensePage 1
GetDlgItem $0 $hWndParent 3
ShowWindow $0 0 ; Hide the back button
!insertmacro MUI_HEADER_TEXT "Blah blah" "blah blah blah"
nsDialogs::Create 1018
Pop $0

${NSD_CreateText} 0 13u 100% 12u "$InstDir"
Pop $InstDirCtl

${NSD_CreateLink} 2u 40u -4u 12u "License"
Pop $0
${NSD_OnClick} $0 OnShowLicense

nsDialogs::Show
FunctionEnd

Function InfoPageValidate
${NSD_GetText} $InstDirCtl $InstDir
FunctionEnd
...