Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  

Показать сообщение отдельно

Аватара для K.A.V.

Ленивый кусок мяса


Contributor


Сообщения: 1986
Благодарности: 723

Профиль | Сайт | Отправить PM | Цитировать


Цитата tony1990:
Похоже что определение видимости/невидимости секций работает только в .onInit »
Если пункт в элементе уже существует - его нельзя скрыть, можно только удалить
Если хотите именно скрывать пункты - вам нужно писать свою кастомную страничку, на ней уже будете обрабатывать, какой пункт выбрал пользователь (x32/x64) и в зависимости от выбора заполнять элемент нужными пунктами, очищая перед заполнением, всё это придётся прописывать вручную.
Набрасывать такой код не буду по одной простой причине - не знаю, какой вы хотите видеть кастомную страничку, такой же, как и дефолтная с выпадающим списком - или с выбором типа установки по принципу радиобаттонов и вообще, с помощью чего собираетесь делать кастомную страничку, IO или nsDialogs

Если не браться за кастомную страничку и попытаться реализовать это, то можно сделать с помощью костылей, т.е. код будет не очень красивый и удобный, вот пример этого ужасного кода (не пишите такой код никогда ):

Код: Выделить весь код
!define PRODUCT_NAME "Моя программа"

!include "MUI.nsh"    

page custom ClickNext ; автоматически жмём кнопку "Далее", чтобы список элементов перестроился автоматически в зависимости от выбора - нам нужно перезагрузить страничку с компонентами, нажав "Назад" и потом "Далее"
!define MUI_PAGE_CUSTOMFUNCTION_SHOW hideBackButton ; Скрываем кнопку "Назад" от пользователя
!insertmacro MUI_PAGE_COMPONENTS
!insertmacro MUI_PAGE_DIRECTORY   

!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_PAGE_FINISH

!insertmacro MUI_LANGUAGE "Russian"   

Name "${PRODUCT_NAME}"
OutFile "setup.exe"
InstallDir "$TEMP"
ShowInstDetails show

InstType /NOCUSTOM
InstType x32  
InstType x64  

Section /o "Эта секция для 32-bit ОС" SEC_32BIT 
SectionIn 1
SectionEnd   

Section /o "Эта секция для 64-bit ОС" SEC_64BIT 
SectionIn 2
SectionEnd  
             
Function ClickNext ; Жмём кнопку Далее
   GetDlgItem $0 $HWNDPARENT 1
   SendMessage $0 ${BM_CLICK} 0 0
FunctionEnd             
             
Function hideBackButton ; Скрываем кнопку Назад
   GetDlgItem $0 $HWNDPARENT 3
   ShowWindow $0 0 
FunctionEnd          
                          
Function .onSelChange   
   GetCurInstType $R0 ; Получаем статус выбранного типа установки
    ${If} $R0 == "0" ; Если первый (x32) - присваиваем текст секциям для x32 системы и скрываем секции с x64 системой
    SectionSetText ${SEC_32BIT} "SEC_32BIT"
    SectionSetText ${SEC_64BIT} ""
    ${ElseIf} $R0 == "1"
    SectionSetText ${SEC_32BIT} ""
    SectionSetText ${SEC_64BIT} "SEC_64BIT"
    ${EndIf} 
   GetDlgItem $0 $HWNDPARENT 3
   SendMessage $0 ${BM_CLICK} 0 0
FunctionEnd

Function .onInit
Var /Global IsWow64Process
  System::Call kernel32::GetCurrentProcess()i.s
  System::Call kernel32::IsWow64Process(is,*i.s)
  Pop $IsWow64Process ; 0 = 32-bit ОС, 1 = 64-bit ОС
  
 ${If} $IsWow64Process == "0" ; первоначальный выбор типа установки в зависимости от системы пользователя
   SetCurInstType 0
   SectionSetText ${SEC_32BIT} "SEC_32BIT"
   SectionSetText ${SEC_64BIT} ""
 ${Else}
   SetCurInstType 1
   SectionSetText ${SEC_32BIT} ""
   SectionSetText ${SEC_64BIT} "SEC_64BIT"
 ${EndIf}  
FunctionEnd

!insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN
  !insertmacro MUI_DESCRIPTION_TEXT ${SEC_64BIT} ""
  !insertmacro MUI_DESCRIPTION_TEXT ${SEC_32BIT} ""
!insertmacro MUI_FUNCTION_DESCRIPTION_END
И при всей своей конструкции - он будет работать только при условии, что до странички компонентов у вас ничего не отображается...
С кастомной страничкой это будет выглядеть красивее и удобнее, да и правильнее

-------
[Справочник по командам Windows] -- [Справочник по NSIS] -- [SFX Creator - для создания SFX архивов]

Это сообщение посчитали полезным следующие участники:

Отправлено: 06:07, 31-07-2015 | #1718