Как отключить только раздел в определенном InstType, но принудительно включить его (даже в «Custom» InstType)? - PullRequest
0 голосов
/ 06 января 2012

У меня есть Section, который установлен на RO и встречается во всех InstType с, за исключением специального.

Когда пользователь сначала выбирает специальный InstType, а затем выбирает «Пользовательский» в качестве InstType, раздел не проверяется и не может быть снова проверен в «Пользовательском» InstType.

Так что все в порядке, за исключением того, что когда пользователь выбирает «Пользовательский» InstType, Section всегда должен проверяться снова.

Только в специальном случае InstType его следует отключить.

Как мне этого добиться?

1 Ответ

1 голос
/ 06 января 2012

Вы можете использовать любую логику в .onSelChange:

!include WinMessages.nsh
!include LogicLib.nsh
!include Sections.nsh

Page Components
Page InstFiles

InstType "Normal1"
!define CIT_Special 1
InstType "Special"
InstType "Normal2"

Section Foo
SectionIn 1 2 3
SectionEnd

Section Bar SEC_Special
SectionIn 1 3
SectionIn RO
SectionEnd

Section Baz
SectionIn 1 2 ;3 << Not the same as Foo just to have some sort of difference
SectionEnd

Function .onSelChange
;Normally you would call GetCurInstType here, but it seems we need a little hack to detect the custom section
FindWindow $1 "#32770" "" $HWNDPARENT
GetDlgItem $1 $1 0x3F9
SendMessage $1 ${CB_GETCURSEL} 0 0 $2
SendMessage $1 ${CB_GETITEMDATA} $2 0 $2
${If} $2 = ${CIT_Special}
    !insertmacro UnselectSection ${SEC_Special}
${Else}
    !insertmacro SelectSection ${SEC_Special}
${EndIf}
FunctionEnd
...