PDA

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


Страниц : 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

wolkow70
20-01-2014, 17:30
Не? »
Нет. Мне нужно определить путь не к папке с NSIS, а к папке со скриптами, которые на другом диске. А нужно для того, чтобы не править скрипты при запуске из под разных ОС, расположенных на разных логических разделах.
Например: !define pkgdir "D:\NSIS".
Но при запуске из под разных ОС, расположенных на разных логических разделах буква диска определяется по разному, и приходится править скрипт перед запуском

MKN
20-01-2014, 18:21
приходится править скрипт »
А не проще ли, вернее - правильнее, никогда не использовать в скриптах явные пути.
В частности, не привязывать плагины к конкретному местоположению.
Достаточно в скрипте указать : !addplugindir . ( или указать иной уровень вложения) и "положить" нужные плагины рядом со скриптом.

K.A.V.
20-01-2014, 19:21
Мне нужно определить путь не к папке с NSIS »
Я вам показал пример использования команды для извлечения буквы диска из пути, а не определение папки NSIS
По сути можно воспользоваться обычной командой StrCpy по отсеву первых 2-х символов в строке пути, о команде StrCpy написано в нашем справочнике

Но при запуске из под разных ОС, расположенных на разных логических разделах буква диска определяется по разному, и приходится править скрипт перед запуском »
Вам правильно ниже MKN написал, об этом и в справочнике сказано:

Данная команда добавляет дополнительный каталог в дополнение к ${NSISDIR}\Include, в котором расположены ваши Include файлы, очень удобно для отдельного большого проекта
!addincludedir ..\include
!include something.nsh

Данная команда добавляет дополнительный каталог в дополнение к ${NSISDIR}\Plugins, в котором расположены ваши NSIS плагины, очень удобно для отдельного большого проекта

!addplugindir myplugin
MyPlugin::SomeFunction

MKN
22-01-2014, 13:42
Определение кодовой страницы

Функция GetACP получает кодовую страницу, установленную на компьютере (ANSI).
http://msdn.microsoft.com/en-us/library/windows/desktop/dd318070(v=vs.85).aspx
http://msdn.microsoft.com/en-us/library/windows/desktop/dd317756(v=vs.85).aspx

outfile "codepage.exe"

Section
System::Call 'Kernel32::GetACP() i .r18'
MessageBox MB_OK " codepage $R8"
SectionEnd

Vincent7
22-01-2014, 16:16
Подскажите, как установить ограничение на количество вводимых символов в текстбокс?

K.A.V.
22-01-2014, 16:29
Подскажите, как установить ограничение на количество вводимых символов в текстбокс? »
Сейчас все кинутся и напишут вам всевозможные варианты кодов (IO, nsDialogs, WinAPI), которые только могут быть, с надеждой, что один из них будет тот, который вам нужен

MKN
22-01-2014, 16:31
ограничение на количество вводимых символов в текстбокс »
Используй (пример для 5 символов переменной Password_Text) :

${NSD_SetTextLimit} $Password_Text 5

${NSD_SetTextLimit} $Password_Confirm 5

А точнее, используй http://nsis.sourceforge.net/Docs/nsDialogs/Readme.html
${NSD_SetTextLimit} control_HWND limit

Vincent7
22-01-2014, 20:34
Спасибо. А как сделать чтобы в текстбокс можно было вводить только цифры?

K.A.V.
22-01-2014, 21:04
Спасибо. А как сделать чтобы в текстбокс можно было вводить только цифры? »
${NSD_CreateText} 0 0 100% 12u "1234567890"
pop $Text
${NSD_AddStyle} $Text ${ES_NUMBER}

Vincent7
22-01-2014, 22:20
Благодарствую.

MKN
23-01-2014, 12:12
Ввод цифрового пароля (в примере - это 77777 ) с сопроводительными сообщениями можно организовать и так :

OutFile 'Password-Example.exe'

!include "MUI.nsh"
!include "LogicLib.nsh"
!include "nsDialogs.nsh"
!include 'WordFunc.nsh'

Page custom ConfigPage CheckConfig ''
!insertmacro MUI_PAGE_DIRECTORY
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_LANGUAGE 'English'
!insertmacro StrFilter

Var Password_Text
Var Password_Confirm

Function ConfigPage
!insertmacro MUI_HEADER_TEXT 'TEXT' 'HEADER_TEXT'
nsDialogs::Create 1018
Pop $0
${NSD_CreateGroupBox} 50% 0 50% 80% " Пароль"
${NSD_CreateLabel} 61% 20u 30% 10% ' Введите пароль'
${NSD_CreateLabel} 60% 70u 33% 10% ' Подтвердите пароль'

${NSD_CreatePassword} 65% 40u 20% 10% ''
Pop $Password_Text
${NSD_CreatePassword} 65% 85u 20% 10% ''
Pop $Password_Confirm

; максимальное количества цифр пароля
${NSD_SetTextLimit} $Password_Text 5
${NSD_SetTextLimit} $Password_Confirm 5

${NSD_OnChange} $Password_Text EditNotify
${NSD_OnChange} $Password_Confirm EditNotify

nsDialogs::Show
FunctionEnd

Function CheckConfig
${NSD_GetText} $Password_Text $0
${NSD_GetText} $Password_Confirm $1

${If} $0 == ''
${OrIf} $1 == ''
MessageBox MB_OK 'Введите пароль !'
Abort
${EndIf}

; ПАРОЛЬ
StrCpy $5 77777

${If} $0 != $5
MessageBox MB_OK 'Не правильный пароль ! !'
Abort
${EndIf}

${If} $0 == $5
${AndIf} $1 != $5
MessageBox MB_OK 'Не правильное подтверждение пароля !'
Abort
${EndIf}
FunctionEnd

Function EditNotify
Pop $R0
; считываем изменения из $R0 и заносим в переменную $0
${NSD_GetText} $R0 $0

; определяем длину строки из $0 ( заносим значение в $1 )
StrLen $1 $0

; фильтруем для $0 ( это $Password_Text ), ввод только цифр (для этого уст значение параметра : 1 )
; заносим результат в $2
${StrFilter} $0 '1' '' '' $2

; определяем длину строки из $2 - ( заносим значение в $3 )
StrLen $3 $2

; если $1 равно любому значению, кроме равного $3
${If} $1 <> $3
MessageBox MB_OK 'Для ввода допустимы только цифры !'
${EndIf}
FunctionEnd

Section
SectionEnd

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

MKN
24-01-2014, 10:19
Появился новый "шкурный" проект для NSIS : VCL Styles for NSIS

http://theroadtodelphi.wordpress.com/2014/01/23/vcl-styles-for-nsis/

Но размер NSISVCLStyles.dll явно велик, что не есть хорошо...

K.A.V.
24-01-2014, 11:02
Но размер NSISVCLStyles.dll явно велик »
1,5-то мегабайт? По сравнению с той dll, которую я в SFX Creator юзаю это просто божественно, там от DMSoft целые 6 Мб :biggrin: (правда там упакованы сразу и необходимые DLL), а как здесь поведёт себя DLL на разных системах - нужно только тестить

Вот парни написали скрипт (может, и девушки), а написать инсталлер своего же скина нормально не смогли, сидел тупил сейчас пару минут, хотел сразу после установки скомпилить скрипт примера, а мне компилятор такой говорит
Invalid command: NSISVCLStyles::LoadVCLStyleA
Error in script "C:\Program Files\The Road To Delphi\NSISVCLStyles\Scripts\example1.nsi" on line 47 -- aborting creation process
Прошелся по папкам NSIS - и правда нету dll :)

Вообщем, у кого ОС 32-bit, бегите за файлом плагина в папочку C:\Program Files (x86)\NSIS :biggrin:

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

MKN
24-01-2014, 11:41
1,5-то мегабайт? По сравнению с той dll, которую я в SFX Creator юзаю это просто божественно »
Если инсталлер без скина -100К, а ошкуренный в 10 раз более, то это совсем не божественно... :)
А с установкой автор действительно промахнулся... У меня эта DLL вообще никак и никуда не попала. Пришлось просто извлечь её из установщика.

K.A.V.
24-01-2014, 12:38
Если инсталлер без скина -100К, а ошкуренный в 10 раз более »
Паниковать из-за таких цифр можно было лет 10 назад, когда в ходу были флоппи-дисководы, помню, моя первая скопированная игра другу - копирование ярлыка с рабочего стола :biggrin:
Сейчас же, этот мегабайт особого веса не придаёт, если учесть сжатие и объёмы данных, которые пользователям вообще приходится качать в наше время...К тому же, что это за установщик на 100К? Распаковать пару своих фоток? ;)

Всё равно, для альтернативы пойдёт (к тому же, если присутствует встроенный редактор скинов), хоть какое-то разнообразие в поддержке скинов+составление конкуренции другим разрабам подобных плагинов

MKN
24-01-2014, 13:16
Сейчас же, этот мегабайт особого веса не придаёт »
Вообщем то да. За исключением всё же, когда инсталлер малого объёма, что бывает часто (разные служебные утилиты и конструкторы). Вот тут то, если захочешь украсить инсталлер, и удивляешься размеру такой одёжки... :) Ведь есть же та же SkinH.dll, малого объёма.

K.A.V.
26-01-2014, 06:49
Проигрывание WAV-файлов

!define SND_ASYNC 1
!define SND_FILENAME 0x20000
!define SND_LOOP 8


; Проигрываем с ожиданием завершения
System::Call 'Winmm::PlaySound(t"$EXEDIR\sound.wav", i0, i${SND_FILENAME})'

; Проигрываем без ожидания завершения
System::Call 'Winmm::PlaySound(t"$EXEDIR\sound.wav", i0, i${SND_FILENAME}|${SND_ASYNC})'

; Проигрываем без ожидания завершения + с зацикливанием
System::Call 'Winmm::PlaySound(t"$EXEDIR\sound.wav", i0, i${SND_FILENAME}|${SND_ASYNC}|${SND_LOOP})'
Может, кому пригодится, буду юзать в своём креаторе

Минимум ОС: Win2000

Vincent7
26-01-2014, 14:20
Скажите, почему в onclick функции не срабатывает abort?
${NSD_OnClick} $button click
function click
MessageBox MB_OK "Abort"
abort
functionend
Сообщение есть, аборта нет

K.A.V.
26-01-2014, 21:34
Function func

nsDialogs::Create 1018
pop $0

${NSD_CreateButton} 25u 27u 150u 15u "Жми давай!"
pop $button
${NSD_OnClick} $button click

nsDialogs::Show

FunctionEnd


function click
MessageBox MB_OK "Abort"
abort
MessageBox MB_OK|MB_ICONINFORMATION "after abort"
functionend

Сообщение есть, аборт есть, второго сообщения нет, что я делаю не так, чтобы получить ваше "Сообщение есть, аборта нет"?

Vincent7
27-01-2014, 00:07
!include "nsDialogs.nsh"
Page custom func
OutFile "test.exe"

var button

Function func
nsDialogs::Create 1018
pop $0
${NSD_CreateButton} 25u 27u 150u 15u "Жми давай!"
pop $button
${NSD_OnClick} $button click
nsDialogs::Show
FunctionEnd

function click
MessageBox MB_OK "Abort"
abort
MessageBox MB_OK|MB_ICONINFORMATION "after abort"
FunctionEnd
Section
SectionEnd
Первое сообщение есть, аборта нет, второго сообщения нет.




© OSzone.net 2001-2012