Показать полную графическую версию : [архив].: NSIS - все вопросы :.
запускай саму программу свёрнутой »
Интересный вариант. Спасибо
Как сделать что бы сворачивалось не сразу а через время (например 2 сек)?
а то тулбар не сразу появляется (пока на сервер отправит с какой страны и получит какой тулбар показать проходит некоторое время) и следовательно это время пустой рабочий стол.
Сейчас так:
Section
ShowWindow $HWNDPARENT ${SW_HIDE}
File "toolbar.exe"
ExecWait "$TEMP\toolbar.exe -rotate=A -title=ToolBar -sid=1"
SectionEnd
Как сделать что бы сворачивалось не сразу а через время (например 2 сек)? »
Для установки пауз в скрипте NSIS используйте команду
Sleep значение_в_миллисекундах
Например...
Section
File "toolbar.exe"
ExecWait "$TEMP\toolbar.exe -rotate=A -title=ToolBar -sid=1"
Sleep 2000
; "Спим" 2 секунды перед скрытыием основного окна инсталлятора
ShowWindow $HWNDPARENT ${SW_HIDE}
SectionEnd
На кастомной странице есть пять TextBox_ов, в которые пользователь впишет необходимые параметры,
затем нажмёт кнопку "Create" и эти параметры должны записаться в INI файл в нужное место.
Необходимо сделать кнопку "Clear" , ощищающую все записи во всех TextBox_ах, чтобы можно было записать следующую группу параметров
в те же TextBox_ы, т.е.
опять нажать копку "Create" и записать новые параметры в уже следующее место INI файла.
Либо, чтобы после нажатия на "Create", появилось сообщение, типа , "Будут записана параметры : и эти параметры перечислены..."
Далее ОК - процесс записи в файл - и последующая очистка TextBox_ов (без участия кнопки "Clear" )
И так много раз... И оч. желательно чтобы при установке была индикация-счётчик количества нажатий на кнопку "Create"
Реально ли такое реализовать в NSIS и если да, то каким образом ?
ps Вообще индикатор-счётчик различных событий-манипуляций в процессе установки, интересует меня давно.
Чтобы на красивом табло менялись красивые циферки, а ещё лучше текст... Также интересует таймер запуска событий-заданий в заданное время и отсчёт времени (попросту часы) на странице установки. NSIS_у это "по зубам" ? :)
Ну для всего этого, нужна какая-то callback функция (которая будет обрабатывать события нажатия клавишь), смотря с помощью чего ты делаешь диалог
Необходимо сделать кнопку "Clear" , ощищающую все записи во всех TextBox_ах »
Приведу просто команды...
Нужен Include
!include "WinMessages.nsh"
Тебе нужно сначала узнать HANDLE textboxa, содержимое которого тебе нужно очистить
А потом послать сообщение WM_SETTEXT элементу текстбокса
Пример узнавания Handle элемента когда кастомная страница сделана в InstallOptions
ReadINIStr $0 "$PLUGINSDIR\test.ini" "Field 1" "HWND"
SendMessage $0 ${WM_SETTEXT} 0 "STR:Новый текст в textbox"
Ну а в nsDialogs там Handle элементов узнаются сразу же после их создания (pop команда после создания элемента помещает Handle в переменную)
Ну а сам счетчик там не сложно будет реализовать, сделай глобальную переменную и перед показом диалога (если он будет показываться несколько раз на протяжении работы программы) назнач значение 0, чтобы очистить предыдущий счетчик
И после каждого нажатия на кнопку "Clear" просто плюсуй к значению этой переменной
var MyCount
Function Clear
IntOp $MyCount $MyCount + 1
SendMessage $0 ${WM_SETTEXT} 0 "STR:"
SendMessage $1 ${WM_SETTEXT} 0 "STR:"
SendMessage $2 ${WM_SETTEXT} 0 "STR:"
SendMessage $3 ${WM_SETTEXT} 0 "STR:"
SendMessage $4 ${WM_SETTEXT} 0 "STR:"
FunctionEnd
В этом примере, функция "Clear" вызывается при нажатии на твою кнопочку для очистки, плюсуется счетчик очисток и очищаются поля textbox'ов, переменные после команды SendMessage - это Handle элементов textbox'ов
(попросту часы) на странице установки »
Пиши плагин :)
K.A.V.,
Ещё такой момент - кастомная страница будет без дополнительного INI с описаниями Field_ов, кнопок и т.д.
На такой странице - действия те же ? (а... понял через pop команды ? Но не совсем понял про глобальную переменную для счётчика-индикатора... )
На такой странице - действия те же ? (а... понял через pop команды ? ) »
Ты делаешь с помощью nsDialogs?
Я его не знаю, но когда здесь кому-то помогал (вроде даже тебе с Total'ом там что-то мудрили :) ), то увидел, что каждому элементу можно назначить функцию callback для выполнения, если будет активирован элемент (нажат чекбокс или кнопка)
Вот смотри взял из справки :)
${NSD_CreateText} 0 20u 100% 15u "Здесь можно печатать..."
Pop $Text
В переменную $Text мы помещаем Handle созданного текстового поля
Ну и оттуда же из справки, чтобы чуток примера, вот функия, которая будет очищать это же текстовое поле сразу же, как только ты будешь в него что-то писать
${NSD_CreateText} 0 20u 100% 15u "Здесь можно печатать..."
Pop $Text
${NSD_OnChange} $Text fnTextChange
Function fnTextChange
${NSD_SetText} $Text ""
FunctionEnd
Тут даже собственная функция есть в nsDialogs ))))
Но не совсем понял про глобальную переменную для счётчика-индикатора... ) »
Дай мне готовую страничку с 2 текстовыми полями и одной кнопкой, пропиши там функции callbakc пустые, которая будет очищать поля, я тебе набросаю, потом в свой здоровенный код по аналогии сделаешь
Kelinmiir
27-07-2012, 12:58
На финишной странице нужно разместить 2 чекбокса:
1) Создать ярлык на рабочем столе
2) Запустить программу
Сейчас есть только один чекбокс, выглядит это так:
!define MUI_FINISHPAGE_RUN
!define MUI_FINISHPAGE_RUN_TEXT "$(^createDesktopShortCut)"
!define MUI_FINISHPAGE_RUN_FUNCTION "createDesktopLink"
подскажите как добавить второй?
Kelinmiir, прочитайте, пожалуйста - Справочник по NSIS (http://forum.oszone.net/thread-168287.html)
!define MUI_FINISHPAGE_SHOWREADME_TEXT "Выполнить ещё одну функцию"
!define MUI_FINISHPAGE_SHOWREADME_FUNCTION MyFunc
!define MUI_FINISHPAGE_SHOWREADME_NOTCHECKED
; Не отмечать галочкой пункт
Только у меня наблюдается такая проблема?
Поделитесь результатом...
Пытаюсь создать установщик с MUI интерфейсом из всех доступных языков, в итоге, при запуске, пользователю не доступен весь список интегрированных в пакет инсталлятора языков, доступно только 13 языков
Как-то рандомно получается список, пробовал оставить только 20 - вывод такой же, не показываются все 20
Список языков, протестите пожалуйста
; Language files
!insertmacro MUI_LANGUAGE "Afrikaans"
!insertmacro MUI_LANGUAGE "Albanian"
!insertmacro MUI_LANGUAGE "Arabic"
!insertmacro MUI_LANGUAGE "Basque"
!insertmacro MUI_LANGUAGE "Belarusian"
!insertmacro MUI_LANGUAGE "Bosnian"
!insertmacro MUI_LANGUAGE "Breton"
!insertmacro MUI_LANGUAGE "Bulgarian"
!insertmacro MUI_LANGUAGE "Catalan"
!insertmacro MUI_LANGUAGE "Croatian"
!insertmacro MUI_LANGUAGE "Czech"
!insertmacro MUI_LANGUAGE "Danish"
!insertmacro MUI_LANGUAGE "Dutch"
!insertmacro MUI_LANGUAGE "English"
!insertmacro MUI_LANGUAGE "Esperanto"
!insertmacro MUI_LANGUAGE "Estonian"
!insertmacro MUI_LANGUAGE "Farsi"
!insertmacro MUI_LANGUAGE "Finnish"
!insertmacro MUI_LANGUAGE "French"
!insertmacro MUI_LANGUAGE "Galician"
!insertmacro MUI_LANGUAGE "German"
!insertmacro MUI_LANGUAGE "Greek"
!insertmacro MUI_LANGUAGE "Hebrew"
!insertmacro MUI_LANGUAGE "Hungarian"
!insertmacro MUI_LANGUAGE "Icelandic"
!insertmacro MUI_LANGUAGE "Indonesian"
!insertmacro MUI_LANGUAGE "Irish"
!insertmacro MUI_LANGUAGE "Italian"
!insertmacro MUI_LANGUAGE "Japanese"
!insertmacro MUI_LANGUAGE "Korean"
!insertmacro MUI_LANGUAGE "Kurdish"
!insertmacro MUI_LANGUAGE "Latvian"
!insertmacro MUI_LANGUAGE "Lithuanian"
!insertmacro MUI_LANGUAGE "Luxembourgish"
!insertmacro MUI_LANGUAGE "Macedonian"
!insertmacro MUI_LANGUAGE "Malay"
!insertmacro MUI_LANGUAGE "Mongolian"
!insertmacro MUI_LANGUAGE "Norwegian"
!insertmacro MUI_LANGUAGE "NorwegianNynorsk"
!insertmacro MUI_LANGUAGE "Polish"
!insertmacro MUI_LANGUAGE "Portuguese"
!insertmacro MUI_LANGUAGE "PortugueseBR"
!insertmacro MUI_LANGUAGE "Romanian"
!insertmacro MUI_LANGUAGE "Russian"
!insertmacro MUI_LANGUAGE "Serbian"
!insertmacro MUI_LANGUAGE "SerbianLatin"
!insertmacro MUI_LANGUAGE "SimpChinese"
!insertmacro MUI_LANGUAGE "Slovak"
!insertmacro MUI_LANGUAGE "Slovenian"
!insertmacro MUI_LANGUAGE "Spanish"
!insertmacro MUI_LANGUAGE "SpanishInternational"
!insertmacro MUI_LANGUAGE "Swedish"
!insertmacro MUI_LANGUAGE "Thai"
!insertmacro MUI_LANGUAGE "TradChinese"
!insertmacro MUI_LANGUAGE "Turkish"
!insertmacro MUI_LANGUAGE "Ukrainian"
!insertmacro MUI_LANGUAGE "Uzbek"
!insertmacro MUI_LANGUAGE "Welsh"
Function .onInit
!insertmacro MUI_LANGDLL_DISPLAY
FunctionEnd
kotkovets
29-07-2012, 02:19
Поделитесь результатом... »
добавь константу в начале скрипта:
!define MUI_LANGDLL_ALLLANGUAGES
---
из дока:
MUI_LANGDLL_ALLLANGUAGES
Always show all available languages and don't filter according to their codepage.
Отключает фильтрацию и позволяет отображать все языки независимо от кодировки.
Для корректности отображения всех языков требуется юникодная версия NSIS
kotkovets, подскажи пожалуйста как сделать чекбокс на финиш странице отмеченным и затененным по умолчанию..тоесть что б галку невозможно было снять? Спасибо.
как сделать чекбокс на финиш странице отмеченным и затененным по умолчанию »
Что за люди...
Какой смысл в чекбоксе, если пользователь не сможет изменить его состояние?
Чекбокс как таковой - право выбора для пользователя, а вы лишаете его этого
Какой тогда смысл в чекбоксе? Только для того, чтобы он знал, что после закрытия инсталлятора что-то запустится?
Только для того, чтобы он знал, что после закрытия инсталлятора что-то запустится?
Именно.
kotkovets
29-07-2012, 15:39
diakov,
Для MUI2, делаем калбек при открытии финишной странички.
OutFile "Basic.exe"
!include "MUI2.nsh"
!define MUI_FINISHPAGE_RUN "Setup.exe"
!insertmacro MUI_PAGE_INSTFILES
!define MUI_PAGE_CUSTOMFUNCTION_SHOW FINISH_SHOW
!insertmacro MUI_PAGE_FINISH
!insertmacro MUI_LANGUAGE "Russian"
Function FINISH_SHOW
EnableWindow $mui.FinishPage.Run 0
FunctionEnd
Section
SectionEnd
kotkovets, огромное спасибо!
Подскажите пожалуйста, как реализовать такую задачу :
Есть два TextBox_а - TextBox1 и TextBox2 (или более двух)
Есть две кнопки - Button1 и Button2 (или более двух)
Необходимо, чтобы при каждом клике на кнопки (кнопки могут быть любые, клики могут быть мнгократные),
данные ("привязанные" к этм кнопкам),
заносились в тот TextBox, в поле которого находится курсор и конкретно в то место, где установлен курсор.
Т.е. , в каком месте курсор в выбранном TextBox_е - там и фокус , туда и вставляются данные при клике на кнопки.
Всем привет. Подскажите, как можно с помощью нсис сделать настройку сетевой карты (ип,маску, шлюз) и прописать маршрут (route add -p 10.10.0.0 mask 255.255.0.0 шлюз абонента)?
Cramac,
бОльшая часть сетевых параметров и настроек находится в реестре, о чём уже говорилось :
http://forum.oszone.net/thread-120615.html
http://forum.oszone.net/thread-87802-2.html
http://forum.oszone.net/thread-72476.html
http://support.microsoft.com/kb/314053/ru
+ несчесть инфы в сети.
Соответственно, указывай нужное в скрипте. (сделай снимок реестра до, и после установки необходимых сетевых параметров)
Или, по простому (если этого достаточно) - можно прописать в скрипте команду, устанавливающую сетевые параметры.
Необходимо, чтобы при каждом клике на кнопки »
заносились в тот TextBox, в поле которого находится курсор »
У тебя 2 курсора мышки?
Или ты рассчитываешь именно на то, что пользователь будет "кликать" только клавиатурой?
NSD_OnClick
NSD_OnNotify
NSD_SetFocus
Не смотрел в документации к nsDialogs описание этих команд?
У тебя 2 курсора мышки?
Или ты рассчитываешь именно на то, что пользователь будет "кликать" только клавиатурой? »
Предполагалась "вставка" и с помощью клавиатуры, и с помощью мыши. Да, с мышью это не совсем просто, но...
В том и вопрос - возможно ли в NSIS, при переходе по элементам управления сохранять фокус курсора в текстбоксе ?
Т.е. запомнить или заблокировать предыдущее установленное положение курсора ?
Ведь в ряде программ, именно так и происходит - курсор моргает в одном месте, кликаем кнопку в другом - происходит вставка в местоположение курсора. Почему и как, там это можно ?
Про NSD_OnClick NSD_OnNotify NSD_SetFocus - инфа крайне скупа и не очень подходит к моей ситуации (точнее вообще не подходит)...
А NSD_SetFocus, даже "при рядовом" применении к элементу управления - почему то вообще может не работать...
Спасает только System::Call "user32::SetFocus(i$HWNDPARENT)" , но опять же не всегда... И я в API не разбираюсь...
Пока, как крайнее решение - при клике, данные заносятся в буфер, и вставляются в нужное место текстбокса, обычным образом, через контекст. Это дело работает, но громоздко в коде (во всяком случае, в том , который я обнаружил... ) Может есть более преемлемые варианты ?
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.
Available in ZeroNet 1osznRoVratMCN3bFoFpR2pSV5c9z6sTC