2017-08-17 85 views
0

我有一些不同的许可证页面,上面有复选框。如果未选中复选框,则应禁用Next按钮。如果复选框状态发生更改,是否有可以使用的事件?这是我的一个代码这个NSIS:StateChanged上的自定义页面

var Window 
var labelDescription 
var checkBoxIsUserAgree 

Function CreateCustomLicense1 
    nsDialogs::Create 1018 
    Pop $Window 

    GetDlgItem $0 $HWNDPARENT 
    EnableWindow $0 0 
    ${NSD_CreateLabel} 13u 22u 270u 96u "Description" 
    Pop $labelDescription 
    ${NSD_CreateCheckBox} 10u 110u 100u 15u "I Agree" 
    $checkBoxIsUserAgree 
FunctionEnd 

Function ShowCustomLicence1 
    Call CreateCustomLicense1 
    nsDialogs::Show 
Function 

Function .oncheckBoxIsUserAgreeStateChanged ; what event I can use for track checkbox state changing 
EnableWindow $0 1 
FunctionEnd 
+0

它可以帮助您发布实际编译的代码!首先阅读文档也可能是一个好主意...... – Anders

+0

@Anders我试图在文档中找到答案,但我看起来有什么问题。我认为它应该是像.onSelectedChanged的全局页面。我无法想象我可以使用$ {NSD _...}作为函数。谢谢! – user2455111

+1

NSD_是辅助宏,有些只是调用nsDialogs :: xyz ... – Anders

回答

1

内置NSIS许可证页面支持复选框,并可以多次使用,但如果你坚持创建自定义网页,你只需要添加一个on*处理程序:

!include nsDialogs.nsh 

Var checkBoxIsUserAgree 

Function ShowCustomLicence1 
    nsDialogs::Create 1018 
    Pop $1 

    GetDlgItem $0 $HWNDPARENT 1 
    EnableWindow $0 0 
    ${NSD_CreateLabel} 13u 22u 270u 90u "Description" 
    Pop $1 
    ${NSD_CreateCheckBox} 10u 110u 100u 15u "I Agree" 
    Pop $checkBoxIsUserAgree 
    ${NSD_OnClick} $checkBoxIsUserAgree oncheckBoxIsUserAgreeStateChanged1 

    nsDialogs::Show 
FunctionEnd 


Function oncheckBoxIsUserAgreeStateChanged1 
    Pop $1 ; Throw away parameter 
    ${NSD_GetState} $checkBoxIsUserAgree $1 
    EnableWindow $0 $1 
FunctionEnd 

Page Custom ShowCustomLicence1 
Page InstFiles