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

jolly_roger@vk
11-10-2012, 19:44
Здравствуйте!
Интересуют следующие вопросы:
1. Как, используя Modern UI 2, в зависимости, например, от выбора radiobutton настроить порядок последующего отображения страниц?
2. Можно ли в деинсталляторе использовать страницы инсталлятора и наоборот? И как осуществляется переход от одной страницы к другой?
3. Можно ли с помощью UpdateXML из скачанного xml-файла разом извлекать несколько значений? Если да, то как? Если нет, то как можно считать из xml-файла сразу несколько параметров?
Заранее благодарю.

kotkovets
11-10-2012, 20:53
1. Как, используя Modern UI 2, в зависимости, например, от выбора radiobutton настроить порядок последующего отображения страниц? »
В справке читайте, как пропишите макросы страничек - такой и будет порядок
2. Можно ли в деинсталляторе использовать страницы инсталлятора и наоборот? И как осуществляется переход от одной страницы к другой? »
2. аналогично

3. Изучите хотя бы 2 первых вопроса - ибо это будет для вас... очень сложно..
---
модерн в доках почитайте (странички) - file://localhost/C:/Program%20Files/NSIS/Docs/Modern%20UI%202/Readme.html
(или в папке NSIS -> Docs\Modern UI 2 )

Creator000
12-10-2012, 01:25
Вопрос №1:
У меня есть чексбокс. Он как то назван. Я хочу чтобы два слова в этом названии были оформлены другим шрифтом. Возможно ли это?

Вопрос №2:
У меня перед запуском деинсталлятора выполняется функция которая спрашивает удалять или нет. Я хочу изменить заголовок окна. Подскажите, как это сделать?

Вопрос №3
Я хочу чтобы у деинсталлятора в заголовке использовалась картинка не ico деинсталлятора, а ico инсталлятора.

MKN
12-10-2012, 13:27
есть чексбокс. Он как то назван. Я хочу чтобы два слова в этом названии были оформлены другим шрифтом. »
Т.е. , если название состоит из , скажем, пяти слов, два из них должны быть другим шрифтом ?
Можно текст рядом с чекбоксом составить из нескольких Label, выполненных разными шрифтами.
А ещё проще - рядом с чекбоксом поместить картинку с разношрифтовым текстом.
Ессно это всё предполагается делать на кастомной странице.

kotkovets
12-10-2012, 14:04
А ещё проще - рядом с чекбоксом поместить картинку с разношрифтовым текстом. »
зачем? :rotate:
В переменную $checkbox плагин со стека возвращает дескриптор(хэндл) чекбокса,
которая винда создает при отрисовке чекбокса - уникальный номерок, есть номерок - делаем почти все, что захотим..
создаем шрифт - дескриптор шрифта в переменной $1 и применяем шрифт к чекбоксу...
!include "mui2.nsh"

OutFile "example.exe"

Page custom fCustom
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_LANGUAGE English

var dlg
var checkbox

Function fCustom
nsDialogs::Create 1018
Pop $dlg
${NSD_CreateCheckbox} 0 5u 70u 12u "checkbox"
Pop $checkbox
CreateFont $1 "Times New Roman" "11" "700" /UNDERLINE
SendMessage $checkbox ${WM_SETFONT} $1 1
nsDialogs::Show
FunctionEnd

Section
SectionEnd
У меня перед запуском деинсталлятора выполняется функция которая спрашивает удалять или нет. Я хочу изменить заголовок окна. Подскажите, как это сделать?»
Если в сообщении, через WinAPI:
Function un.onInit
System::Call "user32::MessageBox(i$hwndparent, t' Удалять....? ' ,t'Заголовок: bla...bla', i4)i.r0"
StrCmp $0 7 0 +2
abort
FunctionEnd

MKN
12-10-2012, 15:13
создаем шрифт - дескриптор шрифта в переменной $1 и применяем шрифт к чекбоксу... »
Этот шрифт будет ведь применим ко всем словам в предложении описания одного чекбокса. Так ?
А надо (как предпролагается в хотелке) - к примеру, первое слово один шрифт, второе слово - другой шрифт, третье слово - другой цвет и т.д. - и всё это в одном предложении описания для одного чекбокса... Вот такакя загогулина...
Другой вопрос, нах это вообще нужно ?... :) Ну уж если понадобилось - то как ?

kotkovets
12-10-2012, 15:25
А надо (как предпролагается в хотелке) - к примеру, первое слово один шрифт, второе слово - другой шрифт и т.д. и всё это в одном предложении описания чекбокса »
глупая хотелка: 2 слова: а может еще по буквам... :biggrin:
так что тут, согласен - только label подогнаными к друг другу...
принцип тот же... как выше примером с чекбоксами

MKN
12-10-2012, 15:36
только label подогнаными к друг другу... »
Хрен ещё подгонишь точно, пробелы широкие остаются... Картинка с замороченным тесктом, была бы эффективнее :)

Такой ещё вопрос-предложение : как все уже поняли, с помощью WinAPI в NSIS, можно чудеса творить, на все случаи жизни... :)
Только не все это умеют...
Может коллекцию конкретных примеров полезного использования, в справочник добавить ? Особенно, если это упрощает и уменьшает классический код.
System::Call "user32:: сделаем то-то...

kotkovets
12-10-2012, 15:55
Может коллекцию конкретных примеров полезного использования, в справочник добавить ? Особенно, если это упрощает и уменьшает классический код.
System::Call "user32:: »
эти коллекции в библиотеках стандартных(особено nsidialog.nsh) и мною написанных библиотек используются..
вопрос, что именно.. их дохрена и трошки... (примерно сколько делок в system32 умноженное на 2000)
---
кратко-подробно описан плагин system - остальное на сайт майкрософт за нужными функциями.

Creator000
12-10-2012, 16:12
MKN, да я уже пытался лабелы подгонять. Криво встают. А насчет картинки попытаюсь. Это чисто эксперимент.
Если в сообщении, через WinAPI: »
Вот код.
Function un.onInit
MessageBox MB_YESNO|MB_ICONQUESTION "Вы действительно хотите удалить $(^Name)?"
IDYES NoAbort
Abort
NoAbort:
FunctionEnd

http://i44.fastpic.ru/big/2012/1012/e7/79a9fac2f83dd03d71deb7a3b78626e7.png
Хочу просто название программы в заголовке в этой функции оставить.

Вопрос №3 »
http://i45.fastpic.ru/big/2012/1012/b3/c527e29c9c002ac2c576b23bedf8bab3.png
Хочу поменять иконку. Это можно?





***
http://forums.winamp.com/showthread.php?t=282529
http://nsis.sourceforge.net/Shortcuts_removal_fails_on_Windows_Vista
Можете мне объяснить как сделать так как описано в этих статьях?
RequestExecutionLevel - я не смог от него добиться желаемого.
Единственное что я нашел

Section un.DeleteLabel
Delete "$DESKTOP\${PRODUCT_NAME}.lnk"
SectionEnd
Section Uninstall
SetShellVarContext all
RMDir /r "$INSTDIR"
RMDir /r "$SMPROGRAMS\${PRODUCT_NAME}"
DeleteRegKey ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_U
NINST_KEY}"
DeleteRegKey ${PRODUCT_UNINST_ROOT_KEY1} "${PRODUCT_UNINST_KEY1}"
SectionEnd
В итоге
http://i45.fastpic.ru/big/2012/1012/27/e1ef6b97b26a51fb303f1ff693b0e727.png

А ведь я знаю, что есть установщики на NSIS которые создают ярлык на рабочем столе для одного пользователя. И все это удаляют. Как-то геморой. Почему нельзя просто удалить эти ярлыки? Разработчики лишнее на придумали.

MKN
12-10-2012, 16:14
кратко-подробно описан плагин system - остальное на сайт майкрософт за нужными функциями. »
Примеров в том описании "с гулькин нос". А нужные функции на сайте MS - это тарабарская азбука для непосвященных...
Одно дело освоить NSIS, совсем другое - WinAPI.
Потому конкретные примеры для конкретных задач и были бы интересны.

yyv
12-10-2012, 18:13
Хрен ещё подгонишь точно, пробелы широкие остаются... »
... Я так и делаю... И даж научился подгонять фактически идеально..))
Я делаю на ини файлах там это проще
подгоняю так сказать в прямом эфире..
но геморно это...
после того как инсталер запущен, иду в временную папку и открываю мой ини файлик.
затем меняю нужное значение
кнопками вперед назад листаю и смотрю что получилось
и так до идеала довожу.. :)
затем копирую конечный результат в фал который будет паковаться.. :)
в итоге в одном предложении и жирный текст и ссылки. Все разбито на разные контролы, но выглядит как одно целое предложение... по другому к сожалению ни как...

Creator000
12-10-2012, 21:12
kotkovets, собственно, я уже не надеюсь что мне тут кто-нибудь ответит. Но просто скажу unicode-сборка проблему не решает, а только добавляет проблем с использованием русского языка.

Creator000
13-10-2012, 00:16
yyv, у тебя IO?

yyv
15-10-2012, 12:46
yyv, у тебя IO? »
IO это INSTALL OPTIONS ?
Если так, то да.

kotkovets
15-10-2012, 13:41
Creator000, хватит блин чушь писать...
!include "mui2.nsh"
OutFile "example.exe"

Page custom fn
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_LANGUAGE English

var dlg
var lab
var lab1
var chk

Function fn
!insertmacro MUI_HEADER_TEXT "Example" "for nsDialogs"
nsDialogs::Create 1018
Pop $dlg

${NSD_CreateCheckBox} 3u 5u 10u 10u ""
Pop $chk
${NSD_OnClick} $chk Click_CheckBox

${NSD_CreateLabel} 13u 5u 29u 12u "Check"
Pop $lab
CreateFont $1 "Times New Roman" "11" "400"
SendMessage $lab ${WM_SETFONT} $1 1

${NSD_CreateLabel} 39u 4u 18u 12u "Box"
Pop $lab1
SetCtlColors $lab1 0xFF0000 transparent
CreateFont $1 "Veradana" "11" "400"
SendMessage $lab1 ${WM_SETFONT} $1 1

nsDialogs::Show
FunctionEnd

Function Click_CheckBox
Pop $chk
${NSD_GetState} $chk $2

${If} $2 == 1
MessageBox MB_ICONINFORMATION|MB_OK "чебокс отмечен" IDOK
${ElseIf} $2 == 0
MessageBox MB_ICONINFORMATION|MB_OK "чебокс не отмечен" IDOK
${EndIf}
FunctionEnd

Section
SectionEnd

Salmo
15-10-2012, 17:45
kotkovets, Добрый день. Вы, как-то, высказались по поводу Ваших планов : " будет время "нарисую" библиотеку заточенную для NSIS для управления чужим приложением(частично),
естественно придется много идей брать у AutoIt..."
http://forum.oszone.net/nextnewesttothread-218597.html
Что-нибудь получилось из задуманного? С уважением...

kotkovets
15-10-2012, 21:13
Что-нибудь получилось из задуманного? »
нет, очень много подводных камней...много чего не знаю - не допонимаю.
а позже и интерес пропал... как то так..
---
много чего получалось и скриптом - системными вызовами.
хотя... смотря, что вам нужно, конкретно..

Salmo
15-10-2012, 22:04
много чего получалось и скриптом - системными вызовами. »
Эта информация собрана куда-нибудь в "кучу" или разбросана по просторам...?
что вам нужно, конкретно »
Ну хотя бы работа с окнами приложений, кликать по меню, подменю, кнопкам по координатам в окнах...

wolkow70
16-10-2012, 13:03
kotkovets,
Столкнулся с такой проблемой при использовании хедера RegistryFunc.nsh после выполнения условия

${If} ${KeyExists}
здесь выполняются комманды
${EndIf}

меняются значения переменных $1 и $2 , в следствии чего идет ошибка дальше по ходу скрипта.
Изменение значений наблюдается именно после выхода из условия (в самой логике выполняется правильно).
При этом, после выхода из логики $1 имеет значение = наименование проверенного на условие ключа реестра, а $2 почему то = 2

PS: при замене $1 и $2 на другие, начиная с $3 ошибки пропадают.




© OSzone.net 2001-2012