Как я могу отключить кнопку в NSIS во время установки? - PullRequest
3 голосов
/ 27 августа 2010

Я создаю установщик, в котором нужно установить несколько компонентов (для выбора необходимого компонента предусмотрены флажки).Теперь предположим, что пользователь не выбрал никакой опции, даже тогда кнопка «Далее» на странице компонента активирована. Здесь я хочу отключить эту следующую кнопку, когда ни одна опция не выбрана.Кто-нибудь может сказать мне, как я могу это сделать?Пожалуйста, помогите мне

1 Ответ

1 голос
/ 27 августа 2010

Ваша проблема действительно трудно решить, если вы используете стандартные окна сбора в качестве MUI или XPUI, если вы используете Modern UI (MUI), то следующий код может помочь вам закодировать необходимую вам функциональность (в случае XPUI это делаетне работает вообще)

ПРЕДУПРЕЖДЕНИЕ : я НЕ проверил следующие процедуры (только что скомпилированные), потому что в настоящее время я использую XPUI и устарел MUIБолее того, в моем инсталляторе я предоставил без логики для повторного включения кнопки «Далее» в функции OnChange_Service.

  1. обрабатывает изменение события в целевой секции, я не знаю, работает ли он, но я предлагаю использовать процедуру NSD_OnChange (определенную в nsdialogs)

    ! include 'nsdialogs.nsh'

    Function <...>
    
    ${NSD_OnChange} <... name of the target section ...> OnChange_Service
    
    FunctionEnd
    
  2. В функции обработчика событий поместите код для отключения вашей кнопки

    Функция OnChange_Service

    var / GLOBAL NextButton

    GetDlgItem $ NextButton $ HWNDPARENT1

    SectionGetFlags <... имя целевого раздела ...> $ 0

    IntOp $ 0 $ 0 & $ {SECTION_OFF}

    StrCmp $ 0 "1" DISABLENEXT GOTOENDONCHANGE

    DISABLENEXT:

    EnableWindow $ NextButton 0

    GOTOENDONCHANGE:

    functionend

Везде, где я думаю, лучше использовать пользовательское окноесли вам нужно выполнить некоторые манипуляции с состоянием элемента управления окном.

Сообщите мне, работает ли оно в вашем проекте

(Если вы хотите использовать логический оператор в своем коде, используйте LogicLibплагин)

...