代码之家  ›  专栏  ›  技术社区  ›  Suneel Yadav

NSIS:如何删除nsDialogs中可用的标签或任何其他控件?

  •  0
  • Suneel Yadav  · 技术社区  · 7 年前

    脚本: 我有一个复选框,使用${NSD\u CreateCheckBox}创建。使用中给出的方法 http://nsis.sourceforge.net/Docs/nsDialogs/Readme.html#step-notify ,对于${NSD\u OnClick},我使用${NSD\u CreateLabel}在复选框下方创建一个标签,每当它被选中时。

    现在,当我取消选中复选框控件时,如何删除我在复选框下方创建的标签。

    是否有类似${NSD\u Delete*}的内容?

    1 回复  |  直到 7 年前
        1
  •  2
  •   Anders    7 年前

    没有删除宏,但如果确实需要,可以实现自己的宏,但通常只显示/隐藏控件。

    !include nsDialogs.nsh
    !include LogicLib.nsh
    
    !ifndef NSD_DestroyControl
    !define NSD_DestroyControl "!insertmacro NSD_DestroyControl "
    !macro NSD_DestroyControl h
    System::Call 'USER32::DestroyWindow(i${h})'
    #Could also use: SendMessage ${h} ${WM_CLOSE} 0 0
    !macroend
    !endif
    
    Page Custom MyPage
    Page InstFiles
    
    Var CheckShowHide
    Var Lbl1
    Var CheckDestroy
    Var Lbl2
    
    Function MyPage
    nsDialogs::Create 1018
    Pop $0
    
    ${NSD_CreateCheckbox} 0 30u 100% 10u "Show/Hide"
    Pop $CheckShowHide
    ${NSD_CreateLabel} 0 50u 100% 12u "Hello"
    Pop $Lbl1
    ${NSD_OnClick} $CheckShowHide ShowHide
    ${NSD_Check} $CheckShowHide
    
    ${NSD_CreateCheckbox} 0 70u 100% 10u "Create/Destroy"
    Pop $CheckDestroy
    ${NSD_OnClick} $CheckDestroy CreateDestroy
    
    nsDialogs::Show
    FunctionEnd
    
    Function ShowHide
    Pop $0
    ${NSD_GetState} $CheckShowHide $0
    ${If} $0 = ${BST_UNCHECKED}
      ShowWindow $Lbl1 0
    ${Else}
      ShowWindow $Lbl1 1
    ${EndIF}
    FunctionEnd
    
    Function CreateDestroy
    Pop $0
    ${NSD_GetState} $CheckDestroy $0
    ${If} $0 = ${BST_UNCHECKED}
      ${NSD_DestroyControl} $Lbl2
    ${Else}
      ${NSD_CreateLabel} 0 90u 100% 12u "World"
      Pop $Lbl2
    ${EndIF}
    FunctionEnd