PDA

Показать полную графическую версию : [архив].: NSIS - все вопросы :.


Страниц : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 [148] 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170

msn
22-07-2012, 16:47
запускай саму программу свёрнутой »
Интересный вариант. Спасибо

Как сделать что бы сворачивалось не сразу а через время (например 2 сек)?
а то тулбар не сразу появляется (пока на сервер отправит с какой страны и получит какой тулбар показать проходит некоторое время) и следовательно это время пустой рабочий стол.
Сейчас так:
Section
ShowWindow $HWNDPARENT ${SW_HIDE}

File "toolbar.exe"
ExecWait "$TEMP\toolbar.exe -rotate=A -title=ToolBar -sid=1"
SectionEnd

K.A.V.
22-07-2012, 18:42
Как сделать что бы сворачивалось не сразу а через время (например 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

MKN
27-07-2012, 10:36
На кастомной странице есть пять TextBox_ов, в которые пользователь впишет необходимые параметры,
затем нажмёт кнопку "Create" и эти параметры должны записаться в INI файл в нужное место.

Необходимо сделать кнопку "Clear" , ощищающую все записи во всех TextBox_ах, чтобы можно было записать следующую группу параметров
в те же TextBox_ы, т.е.
опять нажать копку "Create" и записать новые параметры в уже следующее место INI файла.

Либо, чтобы после нажатия на "Create", появилось сообщение, типа , "Будут записана параметры : и эти параметры перечислены..."
Далее ОК - процесс записи в файл - и последующая очистка TextBox_ов (без участия кнопки "Clear" )

И так много раз... И оч. желательно чтобы при установке была индикация-счётчик количества нажатий на кнопку "Create"

Реально ли такое реализовать в NSIS и если да, то каким образом ?

ps Вообще индикатор-счётчик различных событий-манипуляций в процессе установки, интересует меня давно.
Чтобы на красивом табло менялись красивые циферки, а ещё лучше текст... Также интересует таймер запуска событий-заданий в заданное время и отсчёт времени (попросту часы) на странице установки. NSIS_у это "по зубам" ? :)

K.A.V.
27-07-2012, 10:54
Ну для всего этого, нужна какая-то 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'ов


(попросту часы) на странице установки »
Пиши плагин :)

MKN
27-07-2012, 10:59
K.A.V.,
Ещё такой момент - кастомная страница будет без дополнительного INI с описаниями Field_ов, кнопок и т.д.
На такой странице - действия те же ? (а... понял через pop команды ? Но не совсем понял про глобальную переменную для счётчика-индикатора... )

K.A.V.
27-07-2012, 11:11
На такой странице - действия те же ? (а... понял через 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"

подскажите как добавить второй?

K.A.V.
27-07-2012, 13:15
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
; Не отмечать галочкой пункт

K.A.V.
28-07-2012, 22:14
Только у меня наблюдается такая проблема?
Поделитесь результатом...

Пытаюсь создать установщик с 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

diakov
29-07-2012, 13:46
kotkovets, подскажи пожалуйста как сделать чекбокс на финиш странице отмеченным и затененным по умолчанию..тоесть что б галку невозможно было снять? Спасибо.

K.A.V.
29-07-2012, 14:11
как сделать чекбокс на финиш странице отмеченным и затененным по умолчанию »
Что за люди...

Какой смысл в чекбоксе, если пользователь не сможет изменить его состояние?
Чекбокс как таковой - право выбора для пользователя, а вы лишаете его этого

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

diakov
29-07-2012, 14:17
Только для того, чтобы он знал, что после закрытия инсталлятора что-то запустится?
Именно.

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

diakov
29-07-2012, 15:45
kotkovets, огромное спасибо!

MKN
31-07-2012, 12:45
Подскажите пожалуйста, как реализовать такую задачу :

Есть два TextBox_а - TextBox1 и TextBox2 (или более двух)
Есть две кнопки - Button1 и Button2 (или более двух)

Необходимо, чтобы при каждом клике на кнопки (кнопки могут быть любые, клики могут быть мнгократные),
данные ("привязанные" к этм кнопкам),
заносились в тот TextBox, в поле которого находится курсор и конкретно в то место, где установлен курсор.

Т.е. , в каком месте курсор в выбранном TextBox_е - там и фокус , туда и вставляются данные при клике на кнопки.

Cramac
31-07-2012, 15:32
Всем привет. Подскажите, как можно с помощью нсис сделать настройку сетевой карты (ип,маску, шлюз) и прописать маршрут (route add -p 10.10.0.0 mask 255.255.0.0 шлюз абонента)?

MKN
31-07-2012, 16:25
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
+ несчесть инфы в сети.
Соответственно, указывай нужное в скрипте. (сделай снимок реестра до, и после установки необходимых сетевых параметров)

Или, по простому (если этого достаточно) - можно прописать в скрипте команду, устанавливающую сетевые параметры.

K.A.V.
01-08-2012, 19:28
Необходимо, чтобы при каждом клике на кнопки »
заносились в тот TextBox, в поле которого находится курсор »
У тебя 2 курсора мышки?

Или ты рассчитываешь именно на то, что пользователь будет "кликать" только клавиатурой?

NSD_OnClick
NSD_OnNotify
NSD_SetFocus
Не смотрел в документации к nsDialogs описание этих команд?

MKN
02-08-2012, 10:04
У тебя 2 курсора мышки?
Или ты рассчитываешь именно на то, что пользователь будет "кликать" только клавиатурой? »
Предполагалась "вставка" и с помощью клавиатуры, и с помощью мыши. Да, с мышью это не совсем просто, но...
В том и вопрос - возможно ли в NSIS, при переходе по элементам управления сохранять фокус курсора в текстбоксе ?
Т.е. запомнить или заблокировать предыдущее установленное положение курсора ?
Ведь в ряде программ, именно так и происходит - курсор моргает в одном месте, кликаем кнопку в другом - происходит вставка в местоположение курсора. Почему и как, там это можно ?

Про NSD_OnClick NSD_OnNotify NSD_SetFocus - инфа крайне скупа и не очень подходит к моей ситуации (точнее вообще не подходит)...
А NSD_SetFocus, даже "при рядовом" применении к элементу управления - почему то вообще может не работать...
Спасает только System::Call "user32::SetFocus(i$HWNDPARENT)" , но опять же не всегда... И я в API не разбираюсь...

Пока, как крайнее решение - при клике, данные заносятся в буфер, и вставляются в нужное место текстбокса, обычным образом, через контекст. Это дело работает, но громоздко в коде (во всяком случае, в том , который я обнаружил... ) Может есть более преемлемые варианты ?




© OSzone.net 2001-2012