На самом деле я пытаюсь изменить размер моего компонента MUI2 Components следующих страниц:
!insertmacro MUI_PAGE_LICENSE
!insertmacro MUI_PAGE_COMPONENTS
!insertmacro MUI_PAGE_DIRECTORY
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_PAGE_FINISH
Я также добавил пользовательскую функцию для изменения размера каждого окна с помощью подключаемого модуля nsResize. Теперь у меня проблема в том, что компоненты неуместны и слишком малы по ширине и высоте.
Я искал это и нашел несколько идей по своему вопросу. Но я не хочу использовать хакер ресурсов для создания нового пользовательского интерфейса по нескольким личным причинам. Я увидел, что могу использовать Системный плагин для внесения корректировок, но он перегружает меня источником информации.
Затем я попытался выполнить это самостоятельно и потерпел неудачу. Мое реальное решение:
Function .myGuiInt
System::Call "user32::GetClientRect(i #32770 , i r1)"
System::Call "user32::SetWindowPos(i 1000, i, i, i 15000, i, i)"
....
FunctionEnd
Я попытался изменить размер текстового поля, в котором я установил лицензию. Но у меня нет эффекта, как я могу сделать эти вызовы, чтобы повлиять на пользовательский интерфейс?
Я не хочу манипулировать им, потому что я буду использовать только стандартную библиотеку и только расширю ее. Это была моя причина, если мое реальное решение верное, и мне нужны несколько советов по этому поводу.
Простое решение для страницы компонентов - !define
MUI_COMPONENTSPAGE_SMALLDESC
или MUI_COMPONENTSPAGE_NODESC
, это увеличит список компонентов.
Если этого недостаточно, лучшим решением будет создание собственного пользовательского интерфейса. Для этого вам нужно будет использовать Resource Hacker или какой-либо другой редактор .EXE, но это одноразовая операция, вам не нужно распространять редактор, просто созданный файл пользовательского интерфейса вместе с вашим .NSI, если другим людям также нужно скомпилировать ваш установщик. Возьмите ...NSIS\Contrib\UIs\modern.exe
и отредактируйте его в соответствии с вашими потребностями, а затем примените его с помощью MUI_UI
(или ChangeUI
для классических установщиков).
Преимущество этого заключается в том, что вы будете работать с блоки диалога, а не с пикселями, и также не требуются навыки программирования.
Последний вариант - сделать это во время выполнения. Это означает, что большую часть времени вы будете работать в пикселях, поэтому вам не нужно жестко кодировать какие-либо размеры. Чтобы использовать Системный плагин, вы должны быть знакомы с программированием Win32. Также помогает знание C / C++ или другого низкоуровневого языка программирования.
!include MUI2.nsh
!insertmacro MUI_PAGE_WELCOME
!define MUI_COMPONENTSPAGE_NODESC
!define MUI_PAGE_CUSTOMFUNCTION_SHOW fullsize_tweak_components_page
!insertmacro MUI_PAGE_COMPONENTS
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_LANGUAGE "English"
!define /ifndef SWP_NOZORDER 4
!define /ifndef SWP_NOACTIVATE 0x10
Function fullsize_tweak_components_page
System::Call 'USER32::GetClientRect(p $mui.ComponentsPage, @ r0)' ; Get the size of the inner dialog
System::Call '*$0(i,i,i.r3,i.r4)' ; Extract the right and bottom members from RECT
System::Call 'USER32::SetWindowPos(p $mui.ComponentsPage.Components, p 0, i 0, i 0, i $3, i $4, i ${SWP_NOZORDER}|${SWP_NOACTIVATE})' ; Resize the components list
FunctionEnd
Ваше решение очень помогло мне решить мою проблему, я использовал для этого способ win32
Почему вы не можете использовать Resource Hacker? Вы хотите изменить только размер страницы компонентов или все страницы должны иметь больший размер? Вам необходимо знать программирование Win32, чтобы использовать Системный плагин ...