Ru-Board.club
← Вернуться в раздел «Программы»

» NSIS (Nullsoft Scriptable Install System)

Автор: MKN
Дата сообщения: 21.07.2015 18:37
Victor_VG
http://rghost.ru/private/77Ybg8wmd/7b6fc98dd2d4d183a30fb6d89810f2ea
там же тест файл с командами
Автор: Victor_VG
Дата сообщения: 21.07.2015 19:08
MKN

О! Выручил. Воспользуюсь вечерком..
Автор: megane68
Дата сообщения: 21.07.2015 21:52

Цитата:
!include "MUI2.nsh"

Name "finish_test"
OutFile "finish_test.exe"

!define MUI_FINISHPAGE_RUN_TEXT "RunCheckBox"
!define MUI_FINISHPAGE_RUN "Setup.exe"

!define MUI_PAGE_CUSTOMFUNCTION_SHOW FinShow
!define MUI_PAGE_CUSTOMFUNCTION_LEAVE FinLeave
!insertmacro MUI_PAGE_FINISH

!insertmacro MUI_LANGUAGE "English"

Var CheckBox1
Var Check1

Function FinShow
${NSD_CreateCheckbox} 120u 102u 195u 10u "CustomCheckBox"
Pop $CheckBox1
${NSD_SetState} $CheckBox1 1
SetCtlColors $CheckBox1 "" "${MUI_BGCOLOR}"
FunctionEnd

Function FinLeave
${NSD_GetState} $CheckBox1 $Check1
StrCmp $Check1 1 0 +2
MessageBox MB_OK "CustomCheckBox = $Check1"
FunctionEnd

Section
Sectionend


BuZzOFF89
Проверил. Тестовая финишная страница работает.
А можно его сделать на модерновый интерфейс MIU.nsh? У меня на нём установщик прописан.
Ваш сценарий на нём выдаёт ошибку в строке ${NSD_CreateCheckbox} 120u 102u 195u 10u "CustomCheckBox"

Добавлено:
Victor_VG
Я кстати заметил, что у моего ProcessFunc.nsh и с portableapps.com есть разница.
Автор: Victor_VG
Дата сообщения: 21.07.2015 22:36
megane68

Я пока затею отложу - надо винты в нескольких машинах перекинуть, а к ним не так просто подлезть...
Автор: megane68
Дата сообщения: 21.07.2015 22:46
Victor_VG
Понятно. В принципе, если несколько лет ждали, можно и ещё подождать.

Что- то у меня проблемы с добавлением своей финишной страницы. Переделываю установщик на MUI2.nsh, а оно теперь ругается на:
LangString "MUI_BUTTONTEXT_FINISH" is not set in language table of language Russian
LangString "MUI_BUTTONTEXT_FINISH" is not set in language table of language English
И на финишной странице выдаёт такое: http://i70.fastpic.ru/big/2015/0721/2c/758d6ac0d3b4bb3b9abaeb9e88d54d2c.png
Автор: Victor_VG
Дата сообщения: 21.07.2015 22:52
megane68

Ну, с языками просто добавить дефайны добавить. Надо по докам этого плагина глянуть куда, похоже по этому образцу:

VIProductVersion "${PRODUCT_VERSION}.0.0"
VIAddVersionKey /LANG=${LANG_ENGLISH} "ProductName" "Nullsoft Scriptable Install System ${PRODUCT_VERSION}. Add-Ons Components Kit."
VIAddVersionKey /LANG=${LANG_ENGLISH} "Comments" "Install Add-Ons components for Nullsoft Scriptable Install System ${PRODUCT_VERSION}, include plugins, special compiler build for support 8192 byte string light and examples. Windows Vista compatible."
VIAddVersionKey /LANG=${LANG_ENGLISH} "CompanyName" "Nullsoft, Inc."
VIAddVersionKey /LANG=${LANG_ENGLISH} "LegalCopyright" "Copyright © 1999-2009 Nullsoft, Inc., VictorVG by © VikSoft.Ru, 1996 - 2010. All Right Reserved."
VIAddVersionKey /LANG=${LANG_ENGLISH} "FileDescription" "Install Add-Ons Components for NSIS ${PRODUCT_VERSION} or higest. Compiled at ${__DATE__} on ${__TIME__}."
VIAddVersionKey /LANG=${LANG_ENGLISH} "FileVersion" "${IMin}.${IMaj}.${IBld}.${IRev}-${IVar}"
VIAddVersionKey /LANG=${LANG_ENGLISH} "ProductVersion" "${PRODUCT_VERSION}"
VIAddVersionKey /LANG=${LANG_ENGLISH} "InternalName" "update"
VIAddVersionKey /LANG=${LANG_ENGLISH} "LegalTrademarks" "Nullsoft, Inc."
VIAddVersionKey /LANG=${LANG_ENGLISH} "OriginalFilename" "setup"
VIAddVersionKey /LANG=${LANG_RUSSIAN} "ProductName" "Nullsoft Scriptable Install System ${PRODUCT_VERSION} Add-Ons Components Kit."
VIAddVersionKey /LANG=${LANG_RUSSIAN} "Comments" "Установка дополнений для Nullsoft Scriptable Install System ${PRODUCT_VERSION} включая дополнения, специальную сборку компилятора с поддержкой строк длинной до 8192 байт и примеры. Совместимо с Windows Vista."
VIAddVersionKey /LANG=${LANG_RUSSIAN} "CompanyName" "Nullsoft, Inc."
VIAddVersionKey /LANG=${LANG_RUSSIAN} "LegalCopyright" "Копирайт © 1999 - 2009 Nullsoft, Inc., VictorVG by © VikSoft.Ru, 1996 - 2010. Все права защищены."
VIAddVersionKey /LANG=${LANG_RUSSIAN} "FileDescription" "Установка дополнительных компонент для NSIS ${PRODUCT_VERSION} и выше. Откомпилированно ${__DATE__} в ${__TIME__}."
VIAddVersionKey /LANG=${LANG_RUSSIAN} "FileVersion" "${IMin}.${IMaj}.${IBld}.${IRev}-${IVar}"
VIAddVersionKey /LANG=${LANG_RUSSIAN} "ProductVersion" "${PRODUCT_VERSION}"
VIAddVersionKey /LANG=${LANG_RUSSIAN} "InternalName" "update"
VIAddVersionKey /LANG=${LANG_RUSSIAN} "LegalTrademarks" "Nullsoft, Inc."
VIAddVersionKey /LANG=${LANG_RUSSIAN} "OriginalFilename" "setup"
Автор: megane68
Дата сообщения: 21.07.2015 23:03
Victor_VG
Самое главное, когда вначале сценария прописано !insertmacro MUI_PAGE_FINISH, то получаются две финишные страницы, на второй оба чекбокса, а на первой только кнопка Готово.
Если убираю вначала сценария !insertmacro MUI_PAGE_FINISH, то финишная страница как на скрине выше.
Короче, надо курить доки.

Добавлено:
Всё получилось!!!
http://i69.fastpic.ru/big/2015/0722/f2/11a69611c08592f78113e879f62cc1f2.png
Автор: megane68
Дата сообщения: 22.07.2015 01:15
BuZzOFF89
Спасибо Вам!!!
Автор: Victor_VG
Дата сообщения: 22.07.2015 01:20
megane68

Хорошо.
Автор: megane68
Дата сообщения: 22.07.2015 09:42
Victor_VG
Мне вот интересно, почему на классическом интерфейсе получается изменить стандартную финишную страницу, а на интерфейсе Модерн - нет.
У них настолько отличается функционал?
Автор: MKN
Дата сообщения: 22.07.2015 11:31
megane68

Цитата:
почему на классическом интерфейсе получается изменить стандартную финишную страницу, а на интерфейсе Модерн - нет.

Наверное ты имел виду наоборот.
В обычном MUI не применима CUSTOMFUNCTION_SHOW
Но можно просто сделать перед PAGE_FINISH ( хотя PAGE_FINISH - вообще не нужна в этом случае) свою финишную страничку с чекбоксами или ещё с чем то. Ессно внешне, эту страничку можно сделать один в один, как и стандартную.


Код:
outfile "test_FINISHPAGE.exe"
!include MUI.nsh
!include nsDialogs.nsh

!insertmacro MUI_PAGE_INSTFILES
Page custom CustomFinish FinishLeave
; !insertmacro MUI_PAGE_FINISH
!insertmacro MUI_LANGUAGE "English"

var Checkbox
var Checkbox2
var Checkbox3

Function CustomFinish
nsDialogs::Create 1018
Pop $1
${NSD_CreateCheckbox} 50u 30u 100% 10u " чекбокс1"
Pop $Checkbox

${NSD_CreateCheckbox} 50u 50u 100% 10u " чекбокс2"
Pop $Checkbox2

${NSD_CreateCheckbox} 50u 70u 100% 10u " чекбокс3"
Pop $Checkbox3

nsDialogs::Show
FunctionEnd

Function FinishLeave
${NSD_GetState} $Checkbox $0
${If} $0 <> 0
MessageBox mb_ok "чекбокс1 отмечен"
${EndIf}

${NSD_GetState} $Checkbox2 $0
${If} $0 <> 0
MessageBox mb_ok "чекбокс2 отмечен"
${EndIf}

${NSD_GetState} $Checkbox3 $0
${If} $0 <> 0
MessageBox mb_ok "чекбокс3 отмечен"
${EndIf}
FunctionEnd

Section
SectionEnd

Автор: megane68
Дата сообщения: 22.07.2015 18:23
MKN
Спасибо, пригодится.
Другой вопрос. Можно убрать текст в стандартной странице компонентов, а вместо неё сделать чекбокс ярлыка на рабочем столе?
А то он у меня как компонент сейчас, а надпись аж три раза дублируется - в заголовке и рядом и над компонентами.
На скрине текст отмечен красным:
http://i69.fastpic.ru/big/2015/0722/1d/820cb096b45b520a2077ccdfaad3a71d.png
Автор: Victor_VG
Дата сообщения: 22.07.2015 19:34
megane68

Делал я сей номер и делаю, но чуток иначе - через допсекцию где только семафор ставлю, а вот он после определяет переход. Это решение проще других реализуется и выбор происходит на странице компонент.
Автор: megane68
Дата сообщения: 22.07.2015 20:11
Victor_VG
Просто интересно как вариант. Сейчас четыре чекбокса забульбенил на финишной странице. Вроде как нормальное решение.
http://i72.fastpic.ru/big/2015/0722/a0/68a6bdbfb4c3f6e28692664cda4ef0a0.png
Через доп секцию не представляю как?
Но сейчас главное понять как на двух языках, на инглише и русском, сделать надписи на чекбоксах и в секции Description на странице компонентов.
Автор: Victor_VG
Дата сообщения: 22.07.2015 20:23
megane68

Ладно, в ПМ, но просьба не раздавать мои исходники школярам - достанут "гениальными советами"...

Добавлено:
megane68

В дескрипторах можно, но если делать две ветки кода с разными наборами страниц. Я с этим возится не стал ибо высока вероятность дров наломать - и так у меня свыше 2200 строк кода...
Автор: megane68
Дата сообщения: 22.07.2015 21:14
Victor_VG
Понял, спасибо огромное!
Автор: Victor_VG
Дата сообщения: 23.07.2015 05:37
megane68

Небольшая подсказка - зайдите на https://github.com/lordmulder/stdutils и возьмите stdutils-master (v1.0.6.9) - много полезного.
Автор: MKN
Дата сообщения: 23.07.2015 13:14
megane68

Цитата:
Можно убрать текст в стандартной странице компонентов, а вместо неё сделать чекбокс ярлыка на рабочем столе?

Можно, но совершенно не нужно...

Достаточно или изменить не нужный текст :

Цитата:
!define MUI_COMPONENTSPAGE_TEXT_TOP "Текст в верхней части страницы"

или скрыть

Цитата:
!define MUI_COMPONENTSPAGE_TEXT_TOP " "


Чекбокс ярлыка лучше просто добавить к списку компонентов.

( Если этот чекбокс делать, как дополнительный, то придётся добавить несколько десятков строк кода, + будут некоторые ограничения на расположение(координаты) этого чекбокса. Надо ли ?... )
Автор: megane68
Дата сообщения: 23.07.2015 13:41

Цитата:
Надо ли ?...

Да чисто из- за любознательности.
В принципе меня устраивает создание ярлыка и на финишной странице.

Я вот тут с RadioButton борюсь. Решил кастомную страницу замутить. Кнопки сделал, работают, но вот беда - по умолчанию они обе в не нажатом состоянии.
Как сделать, чтобы одна первая по умолчанию была нажатой?
Переворошил примеры из справочника, там везде они в отжатом состоянии.
Автор: MKN
Дата сообщения: 23.07.2015 13:46
megane68

Цитата:
Кнопки сделал, работают, но вот беда - по умолчанию они обе в не нажатом состоянии.

В смысле, радиокнопки ? - SetState
Автор: megane68
Дата сообщения: 23.07.2015 13:50
MKN
Я хочу сделать копию установщика плеера foobar2000 для своей сборки.
Там после страницы приветствия выбор типов установки Стандартная и Порбативная, реализованная с помощью RadioButton.
По умолчания выбрана кнопка Стандартной установки. Далее идет страница указания директории.
RadioButton я сделал, но они обе не отмечены по умолчанию.
Как то так.... Понятно?

Добавлено:
http://i71.fastpic.ru/big/2015/0723/a4/29efe62b3365b53fca345292422128a4.png
http://i71.fastpic.ru/big/2015/0723/a8/26bcf61a8ad7c1c633060e90741f44a8.png

И надпись на кнопке не пойму как жирной сделать.
P.S. Сборка не содержит самого дистрибутива плеера, чисто конфигурация.

Добавлено:
Я так понимаю, что на стандартной странице, когда RadioButton реализованы через чекбоксы, отметка реализована так:
Function .onInit
StrCpy $1 ${g1o1} ; Group 1 - Option 1 is selected by default
FunctionEnd

А вот как это будет на кастомной странице?
Автор: Sanch8
Дата сообщения: 23.07.2015 14:46
megane68
Примерно вот-так будет выглядеть:

Код: !include "MUI2.nsh"

Page custom TEST
!insertmacro MUI_LANGUAGE "Russian"

Caption "TEST.exe"
OutFile "TEST.exe"
XPStyle on

Var dlg
Var RadioButton1
Var RadioButton2
Var Font1
Var Font2

Function TEST
CreateFont $Font1 "Comic Sans MS" "10" "700"
CreateFont $Font2 "Comic Sans MS" "14" "700"

nsDialogs::Create 1018
Pop $dlg

; тестовые радиобутоны
${NSD_CreateRadioButton} 15u 7u 100u 13u "радиобутон1"
Pop $RadioButton1
   SendMessage $RadioButton1 ${BM_SETCHECK} 1 0 ; Отмечен
   SendMessage $RadioButton1 ${WM_SETFONT} $Font1 1

${NSD_CreateRadioButton} 15u 25u 100u 13u "радиобутон2"
Pop $RadioButton2
SendMessage $RadioButton2 ${WM_SETFONT} $Font2 1
                                            
nsDialogs::Show
FunctionEnd

Section main
SectionEnd
Автор: MKN
Дата сообщения: 23.07.2015 15:15
megane68

Цитата:
но они обе не отмечены по умолчанию.

отмечаешь, как я уже говорил - ${NSD_SetState} $RadioButton1 1
или, как предложил Sanch8 - SendMessage $RadioButton1 ${BM_SETCHECK} 1 0
Результат - одинаковый. Первый вариант - короче
Автор: megane68
Дата сообщения: 23.07.2015 15:35
Sanch8
У ты.... Так получилось.
Спасибо!!!
Теперь буду выяснять какой шрифт используется в NSIS по умолчанию.

Другой вопрос.
Как на привере этого сценария сделать, чтобы одна группа выполнялась от админа, а вторая с правами пользователя?

Добавлено:

Цитата:
отмечаешь, как я уже говорил - ${NSD_SetState} $RadioButton1 1

Ага, так тоже подходит.

Добавлено:
Прописано две кнопки и две группы.
Как выполнить первую группу при выборе первой кнопки, а при выборе второй кнопки - вторую группу?

Цитата:

Function TEST
nsDialogs::Create 1018
Pop $Dialog

${NSD_CreateRadioButton} 0 25u 100u 10u "Standart installation"
Pop $RadioButton1
${NSD_SetState} $RadioButton1 1

${NSD_CreateLabel} 20 40u 300u 10u ""
Pop $Label

${NSD_CreateRadioButton} 0 75u 100u 10u "All users or portable"
Pop $RadioButton2

${NSD_CreateLabel} 20 90u 300u 10u "."
Pop $Label

nsDialogs::Show
FunctionEnd

Section "Standart" SEC01
SectionEnd

Section "All users" SEC02
SectionEnd
Автор: Victor_VG
Дата сообщения: 23.07.2015 18:06
megane68

MS Sans Serif
Автор: megane68
Дата сообщения: 23.07.2015 18:16

Цитата:
MS Sans Serif

Не... Какой то другой.

Добавлено:
Victor_VG
А кроме Bold есть пожирнее?
Нужно, чтобы такой как в заголовке был, с такой же жирностью.
Автор: Victor_VG
Дата сообщения: 23.07.2015 18:54
megane68

Нет, Bold самый жирный который может сформировать шрифтовой генератор. Я когда-то разбирался что такое шрифт и как он работает и если кратко это комбинация из двух частей: программы формирования символа - шрифтового генератора и базы элементов шрифта зависящей от его природы - у векторных (TTF, OTF, Type 1 - Type 3) шрифтов это набор правил аппроксимации контура отрезками прямых, а у матричных (растровых) шрифтов база это набор битовых матриц с точками образующими контур символа в пределах знакоместа.

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

И если векторные шрифты легко могут содержать всю таблицу UNICODE (65535 языковых таблиц) в одной базе правил, то для матричных (растровых) шрифтов есть вынужденные ограничения на размер этой базы связанные с тем, что:

1) контур их символа обычно аппаратно формируется видеоплатой т.к. их шрифтовые базы хранятся в её прошивке размер которой ограничен ёмкостью её ПЗУ;
2) аппаратная поддержка шрифтового генератора реализованная в видеоплате исторически рассчитана на 8-битную таблицу символов (это идёт ещё со времён первых мэйнфреймов с алфавитно-цифровыми дисплеями - с начала 50-х годов 20-го века) и в архитектуру IBM PC перекочевала оттуда без изменения принципа офсетного отображения "символ строится по точкам матрицы знакоместа N*M".
Автор: 820815
Дата сообщения: 23.07.2015 19:05
megane68
Tahoma?
Автор: megane68
Дата сообщения: 23.07.2015 19:10
Victor_VG
Понял.
Ну вот смотрите какая разница.
http://i71.fastpic.ru/big/2015/0723/48/82dff5b3078900c8fa60f96d3a1a2148.png

Добавлено:
Блин, всё мучаюсь. Нашёл несколько примеров с радиобаттонами, но ни один не подходит.
Хоть тресни, не понимаю как к кнопкам RadioButton привязать группы?
Смысл такой - при стандартной установке некоторые файлы распаковываются в Program Files, а некоторые в AppData, а при Portable - все в директорию установки.
Автор: Victor_VG
Дата сообщения: 23.07.2015 19:38
megane68

Очень похоже на Tahoma.

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364

Предыдущая тема: The Bat!


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.