Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Автоматическая установка Windows » Автоматическая установка приложений » [архив].: NSIS - все вопросы :.

Закрытая тема
Настройки темы
[архив].: NSIS - все вопросы :.

Аватара для kotkovets

Ветеран


Сообщения: 1216
Благодарности: 486


Конфигурация

Профиль | Отправить PM | Цитировать


Изменения
Автор: volk1234
Дата: 09-12-2012
Описание: перевод темы в архив.
Тема закрыта!
Лимит страниц.
Продолжение тут:
.: NSIS - все вопросы :. часть 2.
Старая шапка:
читать дальше »

Данная тема предназначена для обсуждения вопросов, связанных с инсталлятором Nullsoft Scriptable Install System, или просто NSIS. Сайт приложения.

Описание:
читать дальше »
NSIS (Nullsoft Scriptable Install System) - профессиональная система для создания инсталляторов в среде Windows с октрытым исходным кодом. При своем малом размере система очень гибкая, и при с широкими возможностями. Генерируемый ею инсталлятор также имеет очень маленький размер и идеально подходит для распространения продукта через Интернет.


Текущая версия: 2.46 от 6 декабря 2009 года
Скачать | Архив сборок версии 2 | Архив сборок версии 1

ВНИМАНИЕ! Созданный в NSIS инсталлятор является ANSI-приложением. Есть возможность использовать UNICODE-сборку системы, но при этом ваши дистрибутивы не будут работать в ANSI-системах, таких, как Windows 9x. Для загрузки UNICODE-сборки системы посетите сайт: http://www.scratchpaper.com/

ВНИМАНИЕ! прежде, чем задать вопрос, почитайте, где Вы найдете ответы на большинство вопросов:
Справочник по NSIS - создан силами нашего сообщества.
Руководство пользователя. Перевод – Поляков А.В, зеркало

Документация

Утилиты разработчика
Расширение функциональности
читать дальше »

Плагины и полезности к NSIS: http://nsis.sourceforge.net/Category:Plugins

Интерфейс Venis GUI: http://www.spaceblue.com/products/venis
Интерфейс ExperienceUI GUI http://experienceui.xx0r.info/oldeng...erienceui/home
Пример:


Интерфейс SkinCrafter Plugin - http://www.skincrafter.com/
Пример:

Инструкция по использованию от K.A.V.

Примеры скриптов на нашем форуме
Скрипт NSIS для перепаковки AIMP2+Сборки
Тема для Notepad++(пример парсинга XML)

Достоинства
читать дальше »


◦ Очень маленький размер установочного блока (около 34 Кбайт)
◦ zlib, bzip2 и LZMA-сжатие
◦ Гибкая система скриптов (спецально разработанная для инсталляторов)
◦ Поддержка многоязычности, точнее 53 языка, есть возможность ввода нового языка
◦ Поддержка плагинов
◦ Скрипт Препроцессор
◦ Создание Web-инсталляторов

Ещё немного полезной информации:
читать дальше »

▫ История создания установщика

NSIS создан как альтернатива InstallShield, предназначенного для коммерческих продуктов.

NSIS был создан для распространения Winamp. Он базируется на предыдущем продукте Nullsoft — PiMP (plugin Mini Packager), иначе известным как SuperPiMP. После версии 2.0a0, проект был перемещён на SourceForge.net, где к работе над ним присоединились и сторонние разработчики. NSIS 2.0 был выпущен в свет 2 года спустя.

NSIS версии 1 был очень похож на классический Windows Installer, но он был более управлемым с помощью скриптов и поддерживал другие форматы сжатия. NSIS версии 2 поддерживает новый графический интерфейс пользователя, LZMA-сжатие, многоязычность и имеет хорошую систему плагинов.

Версия 2.01 была первой версией, поддерживающей компиляцию на любой из POSIX-платформ. Это позволило создавать Windows-инсталляторы на GNU/Linux и FreeBSD без использования эмулятора Wine. На данный момент поддерживается компиляция только для Windows.

▫ Описание

Компилятор NSIS — программа makensis — компилирует скрипты в исполняемый код. Каждая строчка скрипта содержит одну команду. Пример:
Код: Выделить весь код
 # Пример скрипта
 Name "Example1"
 OutFile "example1.exe"
 InstallDir "$PROGRAMFILES\Example1"
 Page Directory
 Page InstFiles
 Section
   SetOutPath $INSTDIR
   File ..\makensis.exe
 SectionEnd

Modern User Interface

В версии 2.0 был введён новый графический интерфейс пользователя, названный Modern UI (MUI). MUI очень похож на интерфейс мастеров, он поддерживает splash screen, выбора языка, выбор компонентов для установки и более широкие возможности настройки по сравнению со своим предшественником. Пример:
Код: Выделить весь код
 # Пример скрипта с Modern UI
 !include MUI.nsh
 Name "Example 2"
 OutFile Example2.exe
 !insertmacro MUI_PAGE_WELCOME
 !insertmacro MUI_PAGE_LICENSE "license.rtf"
 !insertmacro MUI_PAGE_DIRECTORY
 !insertmacro MUI_PAGE_COMPONENTS
 !insertmacro MUI_PAGE_INSTFILES
 !insertmacro MUI_PAGE_FINISH
 !insertmacro MUI_LANGUAGE "English"
 !insertmacro MUI_LANGUAGE "German"
 !insertmacro MUI_LANGUAGE "French"
 Section "Extract makensis"
  SetOutPath $INSTDIR
  File ..\makensis.exe
 SectionEnd
NSIS может быть расширен при помощи плагинов, которые могут быть написаны на C++, Си, и Delphi. Плагины могут быть использованы для улучшения функциональности и интерфейса инсталлятора. Плагины могут быть вызваны в любой части кода NSIS скрипта.

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

▫ Программы, использующие NSIS


◦ Антивирус Касперского
◦ Qip
◦ 3DNA Desktop
◦ 7-Zip
◦ ATI Display Driver
◦ CDex
◦ Dev-C++
◦ DivX
◦ eMule FileZilla
◦ Google Picasa
◦ Google Talk
◦ Intel C (компилятор)
◦ IrfanView
◦ LightAllow
◦ LyX
◦ Miranda IM Mozilla Firefox 2.0
◦ NASA World Wind
◦ Notepad++
◦ OpenOffice.org для Windows
◦ Pidgin
◦ VLC Player
◦ Winamp

● Чем я могу распаковать инсталлятор, созданный в NSIS?

В настоящее время инсталляторы NSIS не могут быть полностью декомпилированы. Сам инсталлятор не содержит в себе никаких функций для того, чтобы извлечь сценарий и/или файлы без инсталляции. Это - выбор разработчика, доступны ли исходный текст и/или файлы для инсталлятора для публики или нет. Есть, однако, внешние инструментальные средства, которые позволяют это сделать. 7-zip поддерживает частичную распаковку NSIS инсталляторов с алгоритмом сжатия lzma или bzip. Так же существует мульти-архивный плагин для TotalCommander.
Небольшая заметка для разработчиков: используйте DCryptDll, если хотите скрыть некоторые файлы в вашей инсталляции.


===========
тема прикрепляется, шапка будет дорабатыватся... Volk1234, hb860

Отправлено: 23:35, 17-06-2006

 
MKN MKN вне форума

Ветеран


Сообщения: 2358
Благодарности: 559

Профиль | Отправить PM | Цитировать


kotkovets,

Несколько вопросов по кастомной странице :

Поясни пожалуйста назначение Function Directory в твоём примере. (И почему то без неё, выбор директории установки работает, а с ней - ругань при компиляции...)

И где в коде должна быть запись : Page custom SelectDirectory Directory ?
Ведь пользовательская страница уже создана записью типа : Page custom fnCustomInit fnCustomDestroy

Каким образом осуществляется зависимое (ИЛИ-ИЛИ) переключение чекбоксов (двух и более) в коде кастомной страницы ?

Почему при создании GroupBox имеем только надпись над группой, а не сам чекбокс, как при создании на обычной странице,(отключающий\включающий все чекбоксы, входящие в группу) ? Что для этого надо сделать ?

Как реализовать отметку всех имеющихся на странице чекбоксов при помощи одной (или двух ?) кнопки ?
Т.е. имеется несколько десятков чекбоксов (в группах в том числе). Нажал кнопку - все отмечены. Ещё раз нажал (или нажал вторую кнопку ?) - отметки сняты.

Последний раз редактировалось MKN, 04-10-2011 в 08:59.


Отправлено: 08:52, 04-10-2011 | #1691



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для kotkovets

Ветеран


Сообщения: 1216
Благодарности: 486

Профиль | Отправить PM | Цитировать


Цитата MKN:
И где в коде должна быть запись : Page custom SelectDirectory Directory »
В начале кода, где идет объявление страниц..
Page custom pre post
pre - имя функции[Функция которая будет выполнена при выполнении своей странички]
post - имя функции[Функция которая будет выполнена при закрытии странички]
Таким образом можно объявлять множесто своих страничек, эти странички
и команды, функции в страничках - не работают при тихом режиме.
Цитата MKN:
Каким образом осуществляется зависимое (ИЛИ-ИЛИ) переключение чекбоксов (двух и более) в коде кастомной страницы ? »
Если ты имеешь в виду чекбоксы - то такое переключение сложно в реализации.
Флажок-точка(радиобутоны) - системные контролы, зависимое переключение получается через системные ресурсы
Если радиобутонов много, можно объединить в свои группы переключений.
http://nsis.sourceforge.net/NsDialogs_FAQ (How to create two groups of RadioButtons)
Цитата MKN:
Как реализовать отметку всех имеющихся на странице чекбоксов при помощи одной (или двух ?) кнопки ?
Т.е. имеется несколько десятков чекбоксов (в группах в том числе). Нажал кнопку - все отмечены. Ещё раз нажал (или нажал вторую кнопку ?) - отметки сняты. »
Нужно реализовавать функции обработки событий. В справочнике по NSIS рассказано как это делать.
http://nsis.sourceforge.net/NsDialogs_FAQ
nsDialogs::OnClick [хэндл контрола] [имя функции]
Определять статусы контролов, как первоначальные, так при обработке событий
${NSD_SetState} [хэндл контрола] 1 - статус отмеченный, 0 - наоборот
В функции, которая будет выполнена при закрытии странички удобно снимать статусы чекбоксов, радиобутонов
${NSD_GetState} [хэндл контрола] $var
$var = 0 -> чекбокс, радиобутон не отмечен, 1 -> наоборот

-------
Спасибо ВСЕМ за то, что тратите свое время, что бы ПОМОЧЬ МНЕ.

Это сообщение посчитали полезным следующие участники:

Отправлено: 10:39, 04-10-2011 | #1692


Аватара для kotkovets

Ветеран


Сообщения: 1216
Благодарности: 486

Профиль | Отправить PM | Цитировать


MKN, Пример к всему вышесказанному, будет полезно всем:
читать дальше »
Код: Выделить весь код
!include "MUI2.nsh"

Page Custom pre post
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_LANGUAGE Russian
OutFile "test.exe"
ShowInstDetails show

var dialog
var RadioButton1
var RadioButton2
var RadioButton3
var RadioButton4

var CheckBox1
var CheckBox2
var CheckBox3
var CheckBox4

var Check1
var Check2
var Check3
var Check4

var rButton1
var rButton2
var rButton3
var rButton4

var Button
var Button1

Function pre
   nsDialogs::Create 1018
   Pop $dialog
	${NSD_CreateRadioButton} 0 0 40% 6% "Группа_1, Радио_1"
		Pop $RadioButton1
	${NSD_SetState} $RadioButton1 1 ;Группа_1, радио_1 при показе странички, делаем отмеченным
	${NSD_CreateRadioButton} 0 12% 40% 6% "Группа_1, Радио_2"
		Pop $RadioButton2
		${NSD_AddStyle} $RadioButton1 ${WS_GROUP} ;определяем группу переключений 1
	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
	${NSD_CreateRadioButton} 50% 0 40% 6% "Группа_2, Радио_1"
		Pop $RadioButton3
	${NSD_SetState} $RadioButton3 1 ;Группа_2, радио_1 при показе странички, делаем отмеченным
	${NSD_CreateRadioButton} 50% 12% 40% 6% "Группа_2, Радио_2"
		Pop $RadioButton4
		${NSD_AddStyle} $RadioButton3 ${WS_GROUP} ;определяем группу переключений 2
	;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
	${NSD_CreateButton} 40u 40u 140u 15u `Кнопка переключений радиобутонов`
	        Pop $Button
        ${NSD_OnClick} $Button ButtonClick
        ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
        ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
        ${NSD_CreateCheckBox} 0 65u 56u 12u "Чебокс_1"
               Pop $CheckBox1
        ${NSD_CreateCheckBox} 0 85u 56u 12u "Чебокс_2"
               Pop $CheckBox2
        ${NSD_CreateCheckBox} 150u 65u 56u 12u "Чебокс_3"
               Pop $CheckBox3
        ${NSD_CreateCheckBox} 150u 85u 56u 12u "Чебокс_4"
               Pop $CheckBox4
          ;все чебоксы отмечены
        ${NSD_SetState} $CheckBox1 1
        ${NSD_SetState} $CheckBox2 1
        ${NSD_SetState} $CheckBox3 1
        ${NSD_SetState} $CheckBox4 1
	${NSD_CreateButton} 40u 105u 140u 15u `Кнопка переключений чекбоксов`
	      Pop $Button1
        ${NSD_OnClick} $Button1 ButtonClickCheckBox
    nsDialogs::Show
FunctionEnd

Function ButtonClick ;функция обработки события нажатия кнопки
  Pop $Button
  ${NSD_GetState} $RadioButton1 $rButton1
  ${NSD_GetState} $RadioButton2 $rButton2
  ${NSD_GetState} $RadioButton3 $rButton3
  ${NSD_GetState} $RadioButton4 $rButton4
  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  ;Логика И-ИЛИ для группы 1
  ${If} $rButton1 == 1
  ${AndIf} $rButton2 == 0
      ${NSD_SetState} $RadioButton1 0
      ${NSD_SetState} $RadioButton2 1
  ${Else}
      ${NSD_SetState} $RadioButton1 1
      ${NSD_SetState} $RadioButton2 0
  ${EndIf}
  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  ;Логика И-ИЛИ для группы 2
  ${If} $rButton3 == 1
  ${AndIf} $rButton4 == 0
      ${NSD_SetState} $RadioButton3 0
      ${NSD_SetState} $RadioButton4 1
  ${Else}
      ${NSD_SetState} $RadioButton3 1
      ${NSD_SetState} $RadioButton4 0
  ${EndIf}
FunctionEnd

Function ButtonClickCheckBox
   Pop $Button1
   ;снимаем статусы чекбоксов:
   ${NSD_GetState} $CheckBox1 $Check1
   ${NSD_GetState} $CheckBox2 $Check2
   ${NSD_GetState} $CheckBox3 $Check3
   ${NSD_GetState} $CheckBox4 $Check4
   ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
   ;Логика ИЛИ-ИЛИ для чекбоксов
   ${If} $Check1 == 1
   ${Orif} $Check2 == 1
   ${Orif} $Check3 == 1
   ${Orif} $Check4 == 1
        ${NSD_SetState} $CheckBox1 0
        ${NSD_SetState} $CheckBox2 0
        ${NSD_SetState} $CheckBox3 0
        ${NSD_SetState} $CheckBox4 0
   ${Else}
        ${NSD_SetState} $CheckBox1 1
        ${NSD_SetState} $CheckBox2 1
        ${NSD_SetState} $CheckBox3 1
        ${NSD_SetState} $CheckBox4 1
   ${EndIf}
FunctionEnd

Function post
  ;снимаем статусы радибутонов:
  ${NSD_GetState} $RadioButton1 $rButton1
  ${NSD_GetState} $RadioButton2 $rButton2
  ${NSD_GetState} $RadioButton3 $rButton3
  ${NSD_GetState} $RadioButton4 $rButton4
  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
     ;снимаем статусы чекбоксов:
   ${NSD_GetState} $CheckBox1 $Check1
   ${NSD_GetState} $CheckBox2 $Check2
   ${NSD_GetState} $CheckBox3 $Check3
   ${NSD_GetState} $CheckBox4 $Check4
FunctionEnd

Section ""
   DetailPrint "состояние Чебокс_1 == $Check1"
   DetailPrint "состояние Чебокс_2 == $Check2"
   DetailPrint "состояние Чебокс_3 == $Check3"
   DetailPrint "состояние Чебокс_4 == $Check4"
   DetailPrint "========================================"
   DetailPrint "========================================"
   DetailPrint "состояние Группа_1, Радио_1 == $rButton1"
   DetailPrint "состояние Группа_1, Радио_2 == $rButton2"
   DetailPrint "состояние Группа_2, Радио_1 == $rButton3"
   DetailPrint "состояние Группа_2, Радио_2 == $rButton4"
SectionEnd

-------
Спасибо ВСЕМ за то, что тратите свое время, что бы ПОМОЧЬ МНЕ.


Последний раз редактировалось kotkovets, 04-10-2011 в 15:01. Причина: Добавил кнопку переключения чекбоксов

Это сообщение посчитали полезным следующие участники:

Отправлено: 13:07, 04-10-2011 | #1693

MKN MKN вне форума

Ветеран


Сообщения: 2358
Благодарности: 559

Профиль | Отправить PM | Цитировать


Что то не вышло использовать для $INSTDIR (InstallDir "$SysDrive:\App") переменную системного диска по способу
StrCpy $SysDrive $WINDIR 2 в Function .onInit.
Есть ли какие иные способы для $INSTDIR ?

зы А почему собственно в NSIS нет переменной системного диска ?

Последний раз редактировалось MKN, 04-10-2011 в 18:03.


Отправлено: 17:57, 04-10-2011 | #1694


Аватара для kotkovets

Ветеран


Сообщения: 1216
Благодарности: 486

Профиль | Отправить PM | Цитировать


Цитата MKN:
зы А почему собственно в NSIS нет переменной системного диска ? »
А зачем, если есть системные???
Почитай синтаксис StrCpy - очень полезно для разбора строк, советую!
открываем справку по nsis -> Перевод справки NSIS -> ExpandEnvStrings
В справке почти все есть, для создания среднестатического дистрибутива!
Код: Выделить весь код
 
 Function .OnInit
  ExpandEnvStrings $INSTDIR "%SYSTEMDRIVE%\App"
FunctionEnd

InstallDir "$INSTDIR"
Красиво и со вкусом!

-------
Спасибо ВСЕМ за то, что тратите свое время, что бы ПОМОЧЬ МНЕ.


Последний раз редактировалось kotkovets, 04-10-2011 в 18:28.

Это сообщение посчитали полезным следующие участники:

Отправлено: 18:21, 04-10-2011 | #1695

MKN MKN вне форума

Ветеран


Сообщения: 2358
Благодарности: 559

Профиль | Отправить PM | Цитировать


Подскажите , как решить такую задачу :
Создал прогресс бар на кастомной странице :
Код: Выделить весь код
Var ProgressBar1
${NSD_CreateProgressBar} координаты-размеры ""
Pop $ProgressBar1
А как заставить его "действовать", т.е. отображать реальный ход установки, после клика на "Установить" ?
В примерах всюду какой то Timer применяют... Или это для демонстрационной автономной "презентации" ?

ps Хорошо бы дополнить справочник по NSIS, в разделе кастомные страницы, расширенным описанием и конкретными примерами для разных вариантов установок. А то сейчас по этому вопросу, информации обзорна и крайне скупа...

Отправлено: 09:34, 05-10-2011 | #1696


Аватара для kotkovets

Ветеран


Сообщения: 1216
Благодарности: 486

Профиль | Отправить PM | Цитировать


Цитата MKN:
А как заставить его "действовать", т.е. отображать реальный ход установки, после клика на "Установить" ? »
После каждой команды изменяем позицию прогресса на 10%
и снимаем позицию бара - помещаем текст позиции над баром.
Код: Выделить весь код
SendMessage $PROGBAR ${PBM_SETPOS} 0 10
SendMessage $PROGBAR ${PBM_GETPOS} 0 0 $1
${NSD_SetText} $Text $1%
Код: Выделить весь код
!include LogicLib.nsh
!include nsDialogs.nsh

Name "nsDialogs Timer Example"
OutFile "nsDialogs Timer Example.exe"
XPStyle on

Var DIALOG
Var TEXT
Var PROGBAR
Var Button

Page custom nsDialogsPage

Function CreateFile
        Pop $Button
        FileOpen $4 text.txt a
        
  	SendMessage $PROGBAR ${PBM_GETPOS} 0 0 $1
	SendMessage $PROGBAR ${PBM_SETPOS} 0 0
	${NSD_SetText} $Text $1%
	FileWrite $4 "${__FUNCTION__} $1$\r$\n"
	
	Sleep 500 ;пауза для наглядности
	SendMessage $PROGBAR ${PBM_DELTAPOS} 10 0
	SendMessage $PROGBAR ${PBM_GETPOS} 0 0 $1
	${NSD_SetText} $Text $1%
	FileWrite $4 "${__FUNCTION__} $1$\r$\n"
	
	Sleep 500 ;пауза для наглядности
	SendMessage $PROGBAR ${PBM_DELTAPOS} 10 0
	SendMessage $PROGBAR ${PBM_GETPOS} 0 0 $1
	${NSD_SetText} $Text $1%
	FileWrite $4 "${__FUNCTION__} $1$\r$\n"
	
	Sleep 500 ;пауза для наглядности
	SendMessage $PROGBAR ${PBM_DELTAPOS} 10 0
	SendMessage $PROGBAR ${PBM_GETPOS} 0 0 $1
	${NSD_SetText} $Text $1%
	FileWrite $4 "${__FUNCTION__} $1$\r$\n"
	
	Sleep 500 ;пауза для наглядности
	SendMessage $PROGBAR ${PBM_DELTAPOS} 10 0
	SendMessage $PROGBAR ${PBM_GETPOS} 0 0 $1
	${NSD_SetText} $Text $1%
	FileWrite $4 "${__FUNCTION__} $1$\r$\n"
	
	Sleep 500 ;пауза для наглядности
	SendMessage $PROGBAR ${PBM_DELTAPOS} 10 0
	SendMessage $PROGBAR ${PBM_GETPOS} 0 0 $1
	${NSD_SetText} $Text $1%
	FileWrite $4 "${__FUNCTION__} $1$\r$\n"
	
	Sleep 500 ;пауза для наглядности
	SendMessage $PROGBAR ${PBM_DELTAPOS} 10 0
	SendMessage $PROGBAR ${PBM_GETPOS} 0 0 $1
	${NSD_SetText} $Text $1%
	FileWrite $4 "${__FUNCTION__} $1$\r$\n"
	
	Sleep 500 ;пауза для наглядности
	SendMessage $PROGBAR ${PBM_DELTAPOS} 10 0
	SendMessage $PROGBAR ${PBM_GETPOS} 0 0 $1
	${NSD_SetText} $Text $1%
	FileWrite $4 "${__FUNCTION__} $1$\r$\n"
	
	Sleep 500 ;пауза для наглядности
	SendMessage $PROGBAR ${PBM_DELTAPOS} 10 0
	${NSD_SetText} $Text $1%
	FileWrite $4 "${__FUNCTION__} $1$\r$\n"
	
	Sleep 500 ;пауза для наглядности
	SendMessage $PROGBAR ${PBM_DELTAPOS} 10 0
	SendMessage $PROGBAR ${PBM_GETPOS} 0 0 $1
	${NSD_SetText} $Text $1%
	FileWrite $4 "${__FUNCTION__} $1$\r$\n"
	
	Sleep 500 ;пауза для наглядности
	SendMessage $PROGBAR ${PBM_DELTAPOS} 10 0
	SendMessage $PROGBAR ${PBM_GETPOS} 0 0 $1
	${NSD_SetText} $Text $1%
	FileWrite $4 "${__FUNCTION__} $1$\r$\n"
	FileClose $4
	
	MessageBox MB_OK "Файл успешно создан!" IDOK
FunctionEnd

Function nsDialogsPage
	nsDialogs::Create 1018
	Pop $DIALOG
	${NSD_CreateLabel} 0u 0u 100% 9u ""
	Pop $TEXT
	${NSD_CreateProgressBar} 0u 10u 100% 12u "99"
	Pop $PROGBAR
	${NSD_CreateButton} 90u 70u 70u 12u "Создать файл"
	Pop $Button
	${NSD_OnClick} $Button CreateFile
	nsDialogs::Show
FunctionEnd

Section
SectionEnd

-------
Спасибо ВСЕМ за то, что тратите свое время, что бы ПОМОЧЬ МНЕ.


Последний раз редактировалось kotkovets, 05-10-2011 в 11:03.

Это сообщение посчитали полезным следующие участники:

Отправлено: 10:49, 05-10-2011 | #1697


Аватара для sawe

Пользователь


Сообщения: 89
Благодарности: 20

Профиль | Отправить PM | Цитировать


То есть, можно сделать и обратное продвижение бара?

Отправлено: 14:46, 05-10-2011 | #1698

MKN MKN вне форума

Ветеран


Сообщения: 2358
Благодарности: 559

Профиль | Отправить PM | Цитировать


kotkovets,
Пример с баром красивый и наглядный, но это ведь будет отдельная задача, выполняемая при клике на конкретную новую кнопку "Создать файл", на имеющейся кастомной странице.

А как быть , если на этой странице уже есть куча чекбоксов, с поставленной для них задачей, исходя из их состояния ?
А задача эта будет выполнена так, как уже указано в Function fnCustomDestroy (причём после закрытия страницы, т.е после нажатия стандартной кнопки "Установить")...

А если надо, чтобы задачи связанные с состоянием чекбоксов, были выполнены при нажатии кнопки "Создать файл" (Или всё таки можно при нажатии кнопки "Установить" ?) с индикацией прогресс баром, при открытой странице ?
Получается надо как то перестроить все действия ? Как ?

Отправлено: 15:19, 05-10-2011 | #1699


Аватара для kotkovets

Ветеран


Сообщения: 1216
Благодарности: 486

Профиль | Отправить PM | Цитировать


Цитата sawe:
То есть, можно сделать и обратное продвижение бара? »
Все что угодно..
Пример использования таймера - системный цикл, который порождает отдельный поток основной программы, "многопоточное приложение",
на примере таймер обновляет время частотой в 200 миллисекунд
читать дальше »
Код: Выделить весь код
!include LogicLib.nsh
!include nsDialogs.nsh

Name "nsDialogs Timer Example"
OutFile "nsDialogs Timer Example.exe"
XPStyle on

Var DIALOG
Var TEXT

Page custom nsDialogsPage

Function Time
       System::Alloc 1024
       Pop $0
       System::Call "kernel32::GetTimeFormat(i0,i0,i0,i0,ir0,i1024)"
       System::Call "*$0(&t1024.r1)"
       System::Free $0
       ${NSD_SetText} $TEXT $1
FunctionEnd

Function nsDialogsPage
	nsDialogs::Create 1018
	Pop $DIALOG
            System::Alloc 1024
            Pop $0
            System::Call "kernel32::GetTimeFormat(i0,i0,i0,i0,ir0,i1024)"
            System::Call "*$0(&t1024.r1)"
            System::Free $0
	${NSD_CreateLabel} 80u 40u 140u 59u ""
	Pop $TEXT
	CreateFont $1 "Times New Roman" "19" "700"
        SendMessage $TEXT ${WM_SETFONT} $1 1

        ${NSD_SetText} $TEXT $1
	${NSD_CreateTimer} Time 200
	nsDialogs::Show
FunctionEnd

Section
SectionEnd


Цитата MKN:
(Или всё таки можно при нажатии кнопки "Установить" ?) »
А чет ты привязался к кнопке установить? Мы работаем с кастомными страничками, стандартная страничка установки отбой! по логике,работаем с баром своим, подумай по чему!
Создаем еще страничку свою с прогрессом, типа нажали кнопку, неужели так трудно подумать и включить мозг и конечная стандартная страничка финиша........

-------
Спасибо ВСЕМ за то, что тратите свое время, что бы ПОМОЧЬ МНЕ.


Последний раз редактировалось kotkovets, 05-10-2011 в 15:45.

Это сообщение посчитали полезным следующие участники:

Отправлено: 15:29, 05-10-2011 | #1700



Компьютерный форум OSzone.net » Автоматическая установка Windows » Автоматическая установка приложений » [архив].: NSIS - все вопросы :.

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Мультимедиа - WinAmp .:[ обсуждение всех версий ]:. ssaram Программное обеспечение Windows 406 12-02-2022 19:45
WinstyleMonitor .:[все вопросы]:. Mr dUSHA Проект WinStyle 331 12-02-2014 13:15
Delphi - Delphi .: [все вопросы] :. Serega Программирование и базы данных 94 04-05-2013 18:45
Доступ - Никак не удаляются файлы (AVI и все остальные форматы) .:[все вопросы]:. Microsoft Windows 2000/XP 105 30-06-2010 11:58
Вопросы по создателю инсталляций NSIS MaxDELETE Программное обеспечение Windows 14 04-07-2007 10:01




 
Переход