|
Внимание, важное сообщение: Дорогие Друзья!
В ноябре далекого 2001 года мы решили создать сайт и форум, которые смогут помочь как начинающим, так и продвинутым пользователям разобраться в операционных системах. В 2004-2006г наш проект был одним из самых крупных ИТ ресурсов в рунете, на пике нас посещало более 300 000 человек в день! Наша документация по службам Windows и автоматической установке помогла огромному количеству пользователей и сисадминов. Мы с уверенностью можем сказать, что внесли большой вклад в развитие ИТ сообщества рунета. Но... время меняются, приоритеты тоже. И, к сожалению, пришло время сказать До встречи! После долгих дискуссий было принято решение закрыть наш проект. 1 августа форум переводится в режим Только чтение, а в начале сентября мы переведем рубильник в положение Выключен Огромное спасибо за эти 24 года, это было незабываемое приключение. Сказать спасибо и поделиться своей историей можно в данной теме. С уважением, ваш призрачный админ, BigMac... |
|
| Компьютерный форум OSzone.net » Автоматическая установка Windows » Автоматическая установка приложений » .: NSIS - все вопросы :. часть 2. |
|
|
.: NSIS - все вопросы :. часть 2.
|
|
Ветеран Сообщения: 1216 |
![]() Данная тема предназначена для обсуждения вопросов, связанных с инсталлятором Nullsoft Scriptable Install System, или просто NSIS. Сайт приложения. Описание: Текущая версия: NSIS 3.05 от 15 декабря 2019 года Скачать | Архив сборок версии Первая часть этой темы Скачать первую часть этой темы одним архивом ВНИМАНИЕ! прежде, чем задать вопрос, почитайте, где Вы найдете ответы на большинство вопросов: Справочник по NSIS - создан силами нашего сообщества. Руководство пользователя. Перевод – Поляков А.В, зеркало Документация Утилиты разработчика Расширение функциональности Примеры скриптов на нашем форуме Скрипт NSIS для перепаковки AIMP2+Сборки Тема для Notepad++(пример парсинга XML) Достоинства Ещё немного полезной информации: |
|
|
------- Отправлено: 12:02, 09-12-2012 |
|
Ветеран Сообщения: 2398
|
Профиль | Отправить 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 |
|
Ветеран Сообщения: 2398
|
Профиль | Отправить 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 |
|
Ветеран Сообщения: 2398
|
Профиль | Отправить 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 |
|
Ветеран Сообщения: 2398
|
Профиль | Отправить 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 | |
|