Показать полную графическую версию : [архив].: NSIS - все вопросы :.
существует, но он сыроват и только для юникодной версии »
Я ее как раз тоже только что нашел, пробую. А в смысле только для юникодной версии?
Я беру код который она генерит подгоняю под себя вставляю в свой AHCI и прекрасно это работает?
или там могут потом какие-то бока вылезти?
kotkovets
30-08-2011, 14:42
Я беру код который она генерит подгоняю под себя вставляю в свой AHCI и прекрасно это работает?
или там могут потом какие-то бока вылезти? »
я раньше проверял для ANSI версии компилятора NSIS - смещаются позиции элементов - руками и то быстрее сделаешь!
А в смысле только для юникодной версии? »
да в прямом, есть ссылка в шапке темы, на юникодную версию компилятора NSIS
да в прямом, есть ссылка в шапке темы, на юникодную версию компилятора NSIS »
про юникодную версию я знаю использую ее тоже
за предупреждение спасибо
мне проще наверное будет там нарисовать а потом руками поправить то что сместиться
мне проще наверное будет там нарисовать а потом руками поправить то что сместиться »
Вы не правильно поняли.
Если вы введёте, к примеру русский текст, смещение будет огромное.
Мало того, он обзывает определяемые переменные и функции абы как, и самое неприятное, он знает толко единицы измерения (пикселы).
А вот фирменные u и популярные % и тем более отрицалеьные значения не знает.
И ещё замечено, что он ограничивает края формы, примерно на 10px. Поверьте, руками быстрее!!!
Поверьте, руками быстрее!!! »
может быть.
Я еще не настолько специалист в NSIS
Мне пока очень сложно когда много элементов на странице "увидеть" их и расположить просто описав цифрами
а подскажите еще по вопросу
у меня есть два радиобутона
как их сделать зависимыми? те когда один выбираешь то другой снимается?
и как с нсДиалог сделать чекбоксы и радиобутоны по умолчанию отмеченными? и самое главное Где об этом можно почитать?
kotkovets
30-08-2011, 17:39
у меня есть два радиобутона
как их сделать зависимыми? те когда один выбираешь то другой снимается?
и как с нсДиалог сделать чекбоксы и радиобутоны по умолчанию отмеченными? и самое главное Где об этом можно почитать? »
Все это есть в справочнике по NSIS - ссылку в шапке тоже найдете.
Доброй ночи тем у кого ночь...)
вот пытаюсь еще разобраться
делаю свою страницу лицензии.
соответственно хочу чтобы там были мои кнопки на которые повесить свои обработчики
делаю кнопки на странице
кнопка принятия лицензии
; === accept_button (type: Button) ===
${NSD_CreateButton} 574 490 100 20 "Accept"
Pop $CustomLicensePage_accept_button
CreateFont $CustomLicensePage_accept_button_Font "Microsoft Sans Serif" "8.25" "700"
SendMessage $CustomLicensePage_accept_button ${WM_SETFONT} $CustomLicensePage_accept_button_Font 0
${NSD_OnClick} $CustomLicensePage_accept_button customPageNet
и кнопка отмены
; === exit_button (type: Button) ===
${NSD_CreateButton} 160 490 100 20 "Exit"
Pop $CustomLicensePage_exit_button
CreateFont $CustomLicensePage_exit_button_Font "Microsoft Sans Serif" "8.25" "400"
SendMessage $CustomLicensePage_exit_button ${WM_SETFONT} $CustomLicensePage_exit_button_Font 0
${NSD_OnClick} $CustomLicensePage_exit_button customOnUserAbort
но на странице они не отображаются :(
вместо них стандартные next и cancel
что я делаю не так?
kotkovets
31-08-2011, 01:48
но на странице они не отображаются »
Вообще nsDialogs рисует по идентификатору 1018 - в основном и 1044 - странички приветствия и завершания
Посмотрите в 105 диалоге файла ресурса идентификатор 1018 - это поле деятельности плагинов nsDialogs и InstallOptions -
за границы этих полей, вы ничего не нарисуете.
Навскидку:
1. Редактором растянуть поле 1018 до нижнего края главного окна, но при этом, наверно придется скрывать поле 1018 на других страничках, чтобы были видны стандартные кнопки или указать идентификатор 1044: nsDialogs::Create 1044
2. Нарисовать кнопки средствами Windows API рядом со стандартными - я так делал, опять же их на др. страничках придется скрывать. Если нужно могу показать пример на api, но не сейчас, ночь...
возможно ли кастомизировать страницу _PAGE_INSTFILES?
под катом три скриншота
это тот стиль который я хочу получить в своем инсталлере
https://photos-3.dropbox.com/i/xl/QQk87L8uPivsZovHuKB25VclxnNeMfXVYQv8kOvESX8/5751055/1314878400/5702cbb
это страница MUI_PAGE_INSTFILES которая есть сейчас
там происходит скачивание программы и ее распаковка
https://photos-2.dropbox.com/i/xl/W5HSr6W1rPc33k_Iics5nC7bnUq90hZK2TWIyumiDgI/5751055/1314878400/1f5161b
а это как бы то чего хотелось бы
https://photos-1.dropbox.com/i/xl/rnH6Bo0_8gESMeJT4LuAbUON78SJ60m3OUm2ZVR50XQ/5751055/1314878400/b630409
можно ли "украсить " страницу PAGE_INSTFILES как хотеться? или еще лучше использовать вместо нее свою?
те вызывается своя страница и на ней отрабатываются действия в секциях
kotkovets
31-08-2011, 22:57
yyv, непонятно...
как вы хотите украсить... где скрины???
yyv, непонятно...
как вы хотите украсить... где скрины??? »
Перезалил скрины из его поста на радикал, хост картинок видать наглючило. Пока перезаливал и у него в посту картинки заработали... ))
Слева-направо: 1,2,3
http://i015.radikal.ru/1108/1e/f3b7781fe5e1t.jpg (http://radikal.ru/F/i015.radikal.ru/1108/1e/f3b7781fe5e1.jpg.html) http://i016.radikal.ru/1108/aa/ed23ee06937ct.jpg (http://radikal.ru/F/i016.radikal.ru/1108/aa/ed23ee06937c.jpg.html) http://s44.radikal.ru/i105/1108/e6/ee028249c002t.jpg (http://radikal.ru/F/s44.radikal.ru/i105/1108/e6/ee028249c002.jpg.html)
Зы, У кого там мысли сходятся?! :grin:
Начинал я раньше делать нечто подобное, но до конца не довел, требуется сторонняя помощь для нормальной реализации... :clever-ma
kotkovets
31-08-2011, 23:43
Начинал я раньше делать неч-то подобное, но до конца не довел, требуется сторонняя помощь для нормальной реализации... »
если легкота, то помогу :biggrin: ...
если легкота, то помогу ... »
Ну в принципе да, легкота, написать компонент ActiveX на С++ и интегрировать его в Нсис (Анси и Юникод кодировках). :biggrin:
Я начал было копаться в ресурсах экзешника, и в nsh скриптах которые отвечают за показ этой страницы. сместил уже данные в правый угол
но вот уже почти ночью мне пришла мысль , что ведь можно разделить - "мухи - отдельно,котлеты - отдельно"
мне что нужно?
что бы пользователю красиво показался прогресбар при скачивании файла.
Так почему бы не вынести скачивание файла в отдельную страницу, показать ее, а все необходимые действия с файлом делать уже в секциях выполняя PAGE_INSTFILES, предварительно спрятав окно инсталлера и показав его по окончанию выполнения.
просто я уперся как-то, что у меня раньше все делалось в одном месте в секции, и все тут.
завтра опробую, напишу, что получилось, если интересно.
вопрос теперь в том где размещать код для скачивания программы, что-бы он корректно выполнялся и прогресбар показывался?
вот к примеру вызов страницы
Page custom CustomdownloadPage_Show
вот код скачивания
NSISdl::download ${ORG_INSTALLER} "$TEMP\installer.zip"
мне нужно будет в функции CustomdownloadPage_Show вызвать этот код?
а он будет корректно работать и отображаться после вызова
nsDialogs::Show
ну это я завтра все утром попробую... так, вдруг кто-то быстрее подскажет.. :)
если я правильно понимаю то если вызвать страницу так
Page custom CustomdownloadPage_Show CustomdownloadPage_Leave
и код вызвать в функции CustomdownloadPage_Leave то он отработает только после того как пользователь нажмет кнопку NEXT на странице?
kotkovets
01-09-2011, 03:10
вот к примеру вызов страницы
Код:
Page custom CustomdownloadPage_Show »вот код скачивания
Код:
NSISdl::download ${ORG_INSTALLER} "$TEMP\installer.zip" »
Ну так в функции CustomdownloadPage_Show рисуете кнопку,
при нажатии кнопки , типа "загрузить", в функцию события нажатия кнопки добавьте код
NSISdl::download ${ORG_INSTALLER} "$TEMP\installer.zip"
и код вызвать в функции CustomdownloadPage_Leave то он отработает только после того как пользователь нажмет кнопку NEXT на странице? »
Т.е формально да!
Эта функция отрабатывает при закрытии вашей нарисованной странички, в основном используется для снятия статуса чебоксов, радибутонов, текста в полях ввода - для дальнейшего использования "снятых значений" в скрипте.
удобно проверить, закачался ли файл, а если нет пишем Abort и мы останемся на кустомной страничке.
Ну так в функции CustomdownloadPage_Show рисуете кнопку,
при нажатии кнопки , типа "загрузить", в функцию события нажатия кнопки добавьте код »
так и сделал...
все хорошо... файл качается..
одно плохо.. пользователю ничего не показывается.. (( те остается страница CustomdownloadPage_Show и ничего нельзя сделать пока файл не скачается.
как нибудь можно прогрес бар из NSISdl::download на передний план высунуть?
решил попробовать Inetc plug-in - он вроде более интересен для этих целей
Справочник по NSIS (http://forum.oszone.net/thread-168287.html)
Вышла Версия 1.3
Убедительная просьба начинающих и неопытных кодеров на NSIS прочитать справочник, не задавайте вопросов, ответы на которые есть в справочнике!
Я вместо пользователя могу "нажать" клавишу некст?
вот к примеру у меня на странице отработала функция и по результатам или пользователь сам переходит на следующую страницу или это делается автоматически?
сам нашел
вроде бы функция RelGotoPage должна делать то что мне надо
http://nsis.sourceforge.net/Go_to_a_NSIS_page
kotkovets
02-09-2011, 01:10
По личной просьбе sawe - попросил сделать макрос для эффекта прозрачности окна NSIS.
Решил выложить на форуме, думаю будет полезно всем любителям украшательств.
Коэффициент непрозрачности задаем в процентах, если 0 - окошка не наблюдаем, если 100 - обычное окошко.
${NSIS_TRANSPARENT} 70 # эффект непрозрачности 70%
Полностью совместим с применением плагина wansis!!!
Макрос вызываем в функции для внесения изменений в графический интерфейс.
!include "MUI2.nsh"
!include "logiclib.nsh"
!define MUI_CUSTOMFUNCTION_GUIINIT MUIGUIInit
!insertmacro MUI_PAGE_WELCOME
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_LANGUAGE "Russian"
ShowInstDetails show
OutFile Test.exe
!define NSIS_TRANSPARENT "!insertmacro CallTransparent"
!macro CallTransparent Transparent
System::Store S
System::Call "user32::GetParent(i$HWNDPARENT)i.R2" ;дескриптор родителя окна в $R2 при применении плагина wansis
StrCmp $R2 0 +1 +2
StrCpy $R2 $HWNDPARENT ;если плагинами для украшений NSIS не пользуемся - дескриптор окна NSIS копируем в $R2
IntOp $R1 ${Transparent} * 255
IntOp $R1 $R1 / 100
System::call "user32::GetWindowLong(iR2, i-20) i.R0" ;получаем свойства окна в $R0
System::call "user32::SetWindowLong(iR2, i-20, i$R0|0x00080000)" ;добавляем свойство окну - слой прозрачности
System::call "user32::SetLayeredWindowAttributes(iR2, i0, iR1, i2)" ;назначаем непрозрачность в указанных процентах
System::Store L
!macroend
Function MUIGUIInit
${NSIS_TRANSPARENT} 70 ; 70% процентов непрозрачности
FunctionEnd
Section
SectionEnd
Outfile test.exe
Page InstFiles
!define NSIS_TRANSPARENT "!insertmacro CallTransparent"
!macro CallTransparent Transparent
System::Store S
System::Call "user32::GetParent(i$HWNDPARENT)i.R2" ;дескриптор родителя окна в $R2 при применении плагина wansis
StrCmp $R2 0 +1 +2
StrCpy $R2 $HWNDPARENT ;если плагинами не пользуемся дескриптор окна NSIS копируем в $R2
IntOp $R1 ${Transparent} * 255
IntOp $R1 $R1 / 100
System::call "user32::GetWindowLong(iR2, i-20) i.R0" ;получаем свойства окна в $R0
System::call "user32::SetWindowLong(iR2, i-20, i$R0|0x00080000)" ;добавляем свойство окну - слой прозрачности
System::call "user32::SetLayeredWindowAttributes(iR2, i0, iR1, i2)" ;назначаем непрозрачность в указанных процентах
System::Store L
!macroend
Function .onGUIInit
${NSIS_TRANSPARENT} 70 ; 70% процентов непрозрачности
FunctionEnd
Section
SectionEnd
Люди добрые, прочитал я новую справку, перечитал все внимательно про действия с реестром, но с наскока так и не разобрался, подскажите пожалуйста, не бросайте в неведении горемычного.
И так, есть инсталлятор, хочу сделать так, чтобы он сам корректно искал путь для установки. Устанавливаться он должен в папку где находится определенный файл (пусть это будет file.exe). Как мы уже выяснили, провести поиск этого файла по локальным дискам можно, но это процесс долгий, так что мне не подходит.
Задача сводится к тому, чтобы при поиске по ВСЕМУ реестру (т.к. где находится ключ с нужным параметром не известно) был найден ключ в параметре которого прописан путь к нужному файлу. А, затем, этот путь должен указываться в качестве пути установки (как я понимаю сделать это можно с помощью InstallDirRegKey). В случае если такового найдено в реестре не будет, путь должен выбираться юзверем (это уже обычный InstallDir).
Вся моя проблема именно в поиске, я никак не соображу как его провести. Распишите дураку пожалуйста как это сделать.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.
Available in ZeroNet 1osznRoVratMCN3bFoFpR2pSV5c9z6sTC