Добавить флажок и радио кнопку на странице лицензии - PullRequest
3 голосов
/ 12 августа 2011

Я пишу скрипты в Nsis, и мне нужно иметь опцию radiobutton на моей странице лицензии И флажок для другого подтверждения.Возможно ли это сделать, потому что, если я пытаюсь вставить оба, более высокий приоритет - флажок, и я пропускаю переключатели.Желательно, чтобы я просто изменил страницу лицензии, не создавая пользовательскую страницу!

Спасибо за вашу помощь!

1 Ответ

7 голосов
/ 13 августа 2011

Вариант A:

Используйте измененную (Resource Hacker) страницу лицензии и примените ее с ChangeUI (или MUI_UI), а затем используйте SendMessage для получения состояния во время выполнения.

Вариант B:

Создать новый флажок во время выполнения с помощью системного плагина:

!include nsdialogs.nsh
!include MUI2.nsh
!define MUI_LICENSEPAGE_RADIOBUTTONS
!define MUI_PAGE_CUSTOMFUNCTION_SHOW licshow
!define MUI_PAGE_CUSTOMFUNCTION_LEAVE licleave
!insertmacro MUI_PAGE_LICENSE "${__FILE__}"
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_LANGUAGE "English"

Function licshow
System::Call '*(i,i,i,i)i.r1'
FindWindow $0 "#32770" "" $HWNDPARENT
GetDlgItem $2 $0 0x40A
System::Call 'USER32::GetWindowRect(ir2,ir1)'
System::Call 'USER32::MapWindowPoints(i0,ir0,ir1,i1)'
System::Call '*$1(i.r6,i.r7)'
System::Call 'USER32::GetClientRect(ir2,ir1)'
System::Call '*$1(i,i,i.r8,i.r9)'
IntOp $9 $9 + 3 ;padding
IntOp $7 $7 - $9
GetDlgItem $2 $0 0x3EE
System::Call 'USER32::GetClientRect(ir2,ir1)'
System::Call '*$1(i,i,i.r3,i.r4)'
System::Free $1
IntOp $4 $4 - $9 ;reduce size of label
System::Call 'USER32::SetWindowPos(ir2,i,i,i,ir3,ir4,i6)'
System::Call 'USER32::CreateWindowEx(i0,t "Button",t "Some option",i ${__NSD_CheckBox_STYLE},ir6,ir7,ir8,ir9,ir0,i666,i0,i0)i.r2'
SendMessage $0 ${WM_GETFONT} 0 0 $0
SendMessage $2 ${WM_SETFONT} $0 1
${NSD_SetState} $2 1 ;check it
FunctionEnd

Function licleave
FindWindow $0 "#32770" "" $HWNDPARENT
GetDlgItem $0 $0 666
${NSD_GetState} $0 $1
MessageBox mb_ok "Checkbox=$1"
FunctionEnd

Screenshot

...