|
Компьютерный форум OSzone.net » Автоматическая установка Windows » Автоматическая установка приложений » .: NSIS - все вопросы :. часть 2. |
|
.: NSIS - все вопросы :. часть 2.
|
Ветеран Сообщения: 1216 |
Профиль | Отправить PM | Цитировать
Данная тема предназначена для обсуждения вопросов, связанных с инсталлятором Nullsoft Scriptable Install System, или просто NSIS. Сайт приложения. Описание: Текущая версия: NSIS 3.05 от 15 декабря 2019 года Скачать | Архив сборок версии Первая часть этой темы Скачать первую часть этой темы одним архивом ВНИМАНИЕ! прежде, чем задать вопрос, почитайте, где Вы найдете ответы на большинство вопросов: Справочник по NSIS - создан силами нашего сообщества. Руководство пользователя. Перевод – Поляков А.В, зеркало Документация Утилиты разработчика Расширение функциональности Примеры скриптов на нашем форуме Скрипт NSIS для перепаковки AIMP2+Сборки Тема для Notepad++(пример парсинга XML) Достоинства Ещё немного полезной информации: |
|
------- Отправлено: 12:02, 09-12-2012 |
Ветеран Сообщения: 2358
|
Профиль | Отправить PM | Цитировать Цитата BuZzOFF:
!include "MUI2.nsh" !include "CommCtrl.nsh" ; из Спрвочника ! OutFile "LISTVIEW-CHECKBOXES.exe" RequestExecutionLevel user Page custom CreatePage !insertmacro MUI_LANGUAGE "English" Function CreatePage !insertmacro MUI_HEADER_TEXT "LISTVIEW-CHECKBOXES" "LISTVIEW-CHECKBOXES" nsDialogs::Create 1018 Pop $0 ${NSD_CreateListView} 0u 0u 300u 120u "ListView" Pop $1 SendMessage $1 ${LVM_SETBKCOLOR} 0 0xC7EDCC SendMessage $1 ${LVM_SETTEXTBKCOLOR} 0 0xC7EDCC ${NSD_LV_InsertColumn} $1 0 150 "Заголовок - Столбец 1" !define /math _LISTVIEW_TEMP_STYLE ${LVS_EX_CHECKBOXES} | ${LVS_EX_FULLROWSELECT} SendMessage $1 ${LVM_SETEXTENDEDLISTVIEWSTYLE} 0 ${_LISTVIEW_TEMP_STYLE} !undef _LISTVIEW_TEMP_STYLE ; ========================================================================= FileOpen $4 "$EXEDIR\myfile.txt" r loop: FileRead $4 $9 ; в $9 заносится содержимое строк из файла $4 ( построчно, с каждым циклом) IntOp $R3 $R3 + 1 ; счетчик Item_ов ${NSD_LV_InsertItem} $1 $R3 "$9" ; создание Item_ов в ListView IfErrors +1 loop FileClose $4 ; ================================================================= ; Установить состояние чекбоксов ${NSD_LV_SetCheckState} $1 0 1 ; отмечен ${NSD_LV_SetCheckState} $1 1 0 ; не отмечен ${NSD_LV_SetCheckState} $1 2 1 ; отмечен ; и т.д. ; кнопка контроля состояния чекбоксов ${NSD_CreateButton} 0u 124u 300u 15u "Проверка состояния чекбоксов" ; Pop $2 ${NSD_OnClick} $2 CheckItemState nsDialogs::Show System::Call `comctl32::ImageList_Destroy(iR0)` FunctionEnd Function CheckItemState ${NSD_LV_GetCheckState} $1 0 $R0 ${NSD_LV_GetCheckState} $1 1 $R1 ${NSD_LV_GetCheckState} $1 2 $R2 ; и т.д. IntCmp $R0 1 0 +2 StrCpy $R4 "$R4$\r$\n отмечен 0" IntCmp $R1 1 0 +2 StrCpy $R4 "$R4$\r$\n отмечен 1" IntCmp $R2 1 0 +2 StrCpy $R4 "$R4$\r$\n отмечен 2" ; и т.д. MessageBox MB_OK|MB_ICONINFORMATION "$R4" FunctionEnd Section SectionEnd |
|
Отправлено: 13:24, 17-07-2015 | #1681 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Новый участник Сообщения: 42
|
Профиль | Отправить PM | Цитировать Цитата MKN:
upd. Помогите, пожалуйста с CheckBox'ами. Как сделать проверку отметки универсальной, чтоб не руками вписывать, т.к. их количество будет каждый раз разное. |
|
Последний раз редактировалось BuZzOFF, 17-07-2015 в 15:07. Отправлено: 14:34, 17-07-2015 | #1682 |
Ветеран Сообщения: 2358
|
Профиль | Отправить PM | Цитировать Цитата BuZzOFF:
Можно такой вариант (если чисто для информации) - инфа об исходном, дефолтовом (до того, как пользователь их отметит или снимет отметку !) состоянии чекбоксов (можно по всякому сделать, в зависимости от цели) : Function CheckItemState StrCpy $R5 0 loop: IntOp $R5 $R5 + 1 ; счетчик номеров чекбоксов для GetCheckState ${NSD_LV_GetCheckState} $1 $R5 $R0 ; в $R0 - 1 или 0, в зависимости от исходной отметки чекбокса StrCmp $R5 "$R3" Done ; выход из цикла после опроса последнего чекбокса MessageBox MB_OK "Состояние чекбокса №$R5 - $R0" Goto Loop Done: FunctionEnd |
|
Последний раз редактировалось MKN, 17-07-2015 в 16:05. Отправлено: 15:58, 17-07-2015 | #1683 |
Новый участник Сообщения: 42
|
Профиль | Отправить PM | Цитировать Цитата MKN:
|
|
Отправлено: 16:09, 17-07-2015 | #1684 |
Ветеран Сообщения: 2358
|
Профиль | Отправить PM | Цитировать Цитата BuZzOFF:
Этой кнопкой будешь запускать инсталляцию после отметки чекбоксов, а родную кнопку Install - удаляешь со страницы Функция почти такая же : Function CheckItemState StrCpy $R5 -1 loop: IntOp $R5 $R5 + 1 ; счетчик номеров чекбоксов для GetCheckState ${NSD_LV_GetCheckState} $1 $R5 $R0 ; в $R0 - 1 или 0 , в зависимости от отметки чекбокса StrCmp $R5 "$R3" Done ; выход из цикла после опроса последнего чекбокса ;MessageBox MB_OK "Состояние чекбокса №$R5 - $R0" StrCpy $R8 "$R8 $R0" Goto Loop Done: StrCpy $R8 $R8 -1 ; отсекаем 1 последний символ строки MessageBox MB_OK "$R8" ; в $R8 - строка с последовательностью 1 и 0 , т.е. отмеченных или не отмеченных чекбоксов SendMessage $HWNDPARENT 0x408 1 0 FunctionEnd В итоге : в $R8 - строка с последовательностью 1 и 0 , т.е. отмеченных или не отмеченных всех чекбоксов А далее, в зависимости от того, который по счёту символ в строке будет 1, т.е. отмеченным чекбоксом, то простой логикой, если символ под номером таким то (а это номер точно известного компонента) равен 1 , то он и устанавливается. Конечно можно и по другому. Но так , как мне кажется, будет проще... |
|
Последний раз редактировалось MKN, 17-07-2015 в 17:52. Отправлено: 17:46, 17-07-2015 | #1685 |
Новый участник Сообщения: 42
|
Профиль | Отправить PM | Цитировать Цитата MKN:
Огромнейшее спасибо! Я про этот ListView вообще не знал... Буду дальше разбираться. |
|
Отправлено: 18:02, 17-07-2015 | #1686 |
Новый участник Сообщения: 42
|
Профиль | Отправить PM | Цитировать |
Отправлено: 19:41, 17-07-2015 | #1687 |
Ленивый кусок мяса Сообщения: 1986
|
Профиль | Сайт | Отправить PM | Цитировать Цитата BuZzOFF:
!include "MUI2.nsh" !include "CommCtrl_.nsh" ; из Спрвочника ! OutFile "LISTVIEW-CHECKBOXES.exe" RequestExecutionLevel user Page custom CreatePage !insertmacro MUI_LANGUAGE "English" Function CreatePage !insertmacro MUI_HEADER_TEXT "LISTVIEW-CHECKBOXES" "LISTVIEW-CHECKBOXES" nsDialogs::Create 1018 Pop $0 ${NSD_CreateListView} 0u 0u 300u 120u "ListView" Pop $1 SendMessage $1 ${LVM_SETBKCOLOR} 0 0xC7EDCC SendMessage $1 ${LVM_SETTEXTBKCOLOR} 0 0xC7EDCC ${NSD_LV_InsertColumn} $1 0 150 "Заголовок - Столбец 1" !define /math _LISTVIEW_TEMP_STYLE ${LVS_EX_CHECKBOXES} | ${LVS_EX_FULLROWSELECT} SendMessage $1 ${LVM_SETEXTENDEDLISTVIEWSTYLE} 0 ${_LISTVIEW_TEMP_STYLE} !undef _LISTVIEW_TEMP_STYLE ${NSD_OnNotify} $1 OnClickListView ; ========================================================================= FileOpen $4 "$EXEDIR\myfile.txt" r loop: FileRead $4 $9 ; в $9 заносится содержимое строк из файла $4 ( построчно, с каждым циклом) IntOp $R3 $R3 + 1 ; счетчик Item_ов ${NSD_LV_InsertItem} $1 $R3 "$9" ; создание Item_ов в ListView IfErrors +1 loop FileClose $4 ; ================================================================= ; Установить состояние чекбоксов ${NSD_LV_SetCheckState} $1 0 1 ; отмечен ${NSD_LV_SetCheckState} $1 1 0 ; не отмечен ${NSD_LV_SetCheckState} $1 2 1 ; отмечен ; и т.д. ; кнопка контроля состояния чекбоксов ${NSD_CreateButton} 0u 124u 300u 15u "Проверка состояния чекбоксов" ; Pop $2 ${NSD_OnClick} $2 CheckItemState nsDialogs::Show System::Call `comctl32::ImageList_Destroy(iR0)` FunctionEnd Function CheckItemState ${NSD_LV_GetCheckState} $1 0 $R0 ${NSD_LV_GetCheckState} $1 1 $R1 ${NSD_LV_GetCheckState} $1 2 $R2 ; и т.д. IntCmp $R0 1 0 +2 StrCpy $R4 "$R4$\r$\n отмечен 0" IntCmp $R1 1 0 +2 StrCpy $R4 "$R4$\r$\n отмечен 1" IntCmp $R2 1 0 +2 StrCpy $R4 "$R4$\r$\n отмечен 2" ; и т.д. MessageBox MB_OK|MB_ICONINFORMATION "$R4" FunctionEnd Function OnClickListView System::Store SR2R1R0 ${Select} $R1 ${Case} ${NM_CLICK} ; если событие - клик мыши SendMessage $R2 ${LVM_GETHOTITEM} 0 0 $0 ; узнаём, на какой элемент пользователь нажал ${NSD_LV_GetCheckState} $1 $0 $2 ; узнаём статус галочки - стоит или не стоит ${If} $2 == "1" ; если галочка стоит ${NSD_LV_SetCheckState} $1 $0 0 ; снимаем галочку ${Else} ${NSD_LV_SetCheckState} $1 $0 1 ; ставим галочку, если не стоит ${EndIf} ${EndSelect} System::Store L FunctionEnd Section SectionEnd |
|
------- Отправлено: 20:50, 17-07-2015 | #1688 |
Ветеран Сообщения: 2358
|
Профиль | Отправить PM | Цитировать Когда то kotkovets сотворил интересный и полезный код - кнопочный тулбар из bmp
Но к сожалению этот код нормально компилится только в версии NSIS 2.46. В NSIS 3 получаем ошибку... И дело похоже в CommCtrl.nsh. Даже откорректированная для NSIS 3 ( из справочника) - не работает. А не работает наверное потому , что в этом варианте CommCtrl.nsh нет макросов для Toolbar_а (__NSD_TB_ADDBUTTONS и сопутствующее добро... ) Как бы это дело подретушировать для NSIS 3 ? Я в сети находил вариант CommCtrl.nsh с нужными макросами, но подстановка их в CommCtrl.nsh всё равно приводит к ошибке... |
Последний раз редактировалось MKN, 27-05-2020 в 16:17. Отправлено: 11:30, 18-07-2015 | #1689 |
Ленивый кусок мяса Сообщения: 1986
|
Профиль | Сайт | Отправить PM | Цитировать Цитата MKN:
|
|
------- Отправлено: 12:09, 18-07-2015 | #1690 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Инфо - [ликбез] Помощь начинающим .:[все вопросы]:. часть 2 | dimadr | Наборы обновлений для Windows XP/2003/Windows 7 | 267 | 14-02-2020 08:25 | |
[архив].: NSIS - все вопросы :. | kotkovets | Автоматическая установка приложений | 3387 | 09-12-2012 11:56 | |
Инфо - [ликбез] Помощь начинающим .:[все вопросы]:. часть 1 | jameszero | Наборы обновлений для Windows XP/2003/Windows 7 | 1491 | 22-07-2011 22:42 | |
Выбор|модернизация процессора .:[все вопросы]:. Часть I | Myxa | Выбор отдельных компонентов компьютера и конфигурации в целом | 1845 | 01-01-2011 19:18 | |
Вопросы по создателю инсталляций NSIS | MaxDELETE | Программное обеспечение Windows | 14 | 04-07-2007 10:01 |
|