.: NSIS - все вопросы :. часть 2.

Ответить
 • Просмотры: 15
Аватара пользователя
MKN

Re: .: NSIS - все вопросы :. часть 2.

Сообщение MKN »

Небольшой набросок тултипа, сделанный когда-то для личных нужд..

раз уж пошла такая пьянка...
Вложения
ToolTip.7z
(41.15 КБ) 0 скачиваний
ToolTip.7z
(41.15 КБ) 0 скачиваний
Аватара пользователя
MKN

Re: .: NSIS - все вопросы :. часть 2.

Сообщение MKN »

Цитата MKN:



Есть ли универсальное решение для такой задачи ?
.: NSIS - все вопросы :. часть 2.




нет, только плагин.
Аватара пользователя
kotkovets

Re: .: NSIS - все вопросы :. часть 2.

Сообщение kotkovets »

kotkovets,

А возможен ли обходной маневр - если вычислить координаты нужного объекта, а при клике ЛКМ, тут же вычисляется позиция курсора и вызывается функция сравнения "пересечения" границ координат указателя и объекта - что и вызывает событие при "пересечении" ?

Или это получится громозда, а не код...
Аватара пользователя
diakov

Re: .: NSIS - все вопросы :. часть 2.

Сообщение diakov »

Изменяем месторасположение полосы прогресс бара (индикатора процесса установки) на странице PAGE_INSTFILES





Код:

Код: Выделить всё

!include "MUI2.nsh"
!define MUI_PAGE_CUSTOMFUNCTION_SHOW instfilesshow
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_LANGUAGE "English"
OutFile "PositionProgBar.exe"
ShowInstDetails nevershow
Function instfilesshow
FindWindow $9 "#32770" "" $HWNDPARENT
GetDlgItem $8 $9 0x3EC
System::Call '*(i,i,i,i)i.r7' 
System::Call 'USER32::GetClientRect(ir9,ir7)'
System::Call '*$7(i,i,i.r0,i.r1)' 
System::Call 'USER32::GetWindowRect(ir8,ir7)'
System::Call '*$7(i.r2,i.r3,i.r4,i.r5)'
System::Free $7
; высота полоски прогресс бара
IntOp $5 $5 - $3 ;
;IntOp $5 $5 + 20 
StrCpy $2 10 
IntOp $4 $0 - 20 
IntOp $0 $5 / 2
IntOp $1 $1 / 2
IntOp $1 $1 - $0
!define SWP_NOZORDER 4
System::Call 'USER32::SetWindowPos(ir8,i0,ir2,ir1,ir4,ir5,i${SWP_NOZORDER})'
FunctionEnd
Section
Sleep 500
SectionEnd

Функция GetClientRect извлекает координаты рабочей области окна. Рабочие координаты определяют левый верхний и

нижний правый углы рабочей области. Поскольку рабочие координаты определены относительно левого верхнего угла рабочей области окна, координаты левого верхнего угла - (0,0).



Функция GetWindowRect отыскивает размеры рамки ограничивающей прямоугольник определяемого окна.

Размеры даны в экранных координатах, которые расположены относительно левого верхнего угла экрана.



Функция SetWindowPos изменяет размер, позицию и Z-последовательность дочернего, выскакивающего или верхнего уровня окна.

Дочерние, выскакивающие и верхнего уровня окна размещаются по порядку согласно их появлению на экране.

Самое верхнее окно принимает самый высокий ранг и становится первым окном в Z-последовательности.



SWP_NOZORDER - Сохраняет текущую Z-последовательность (игнорирует параметр hWndInsertAfter - дескриптор порядка размещения).
Аватара пользователя
kotkovets

Re: .: NSIS - все вопросы :. часть 2.

Сообщение kotkovets »

Уважаемые!

Обнаружил полезный пример:


Цитата MKN:



Установка на кнопку стандартной страницы, таймера с индикацией обратного отсчёта, т.е. задержка активности кнопки перед продолжением установки.
.: NSIS - все вопросы :. часть 2.




Подскажите, как установить таймер обратного отсчёта на кнопку сообщения (MessageBox MB_OK...), чтобы сообщение закрылось и установка завершилась, если не нажать на кнопку до истечения времени.
Аватара пользователя
diakov

Re: .: NSIS - все вопросы :. часть 2.

Сообщение diakov »

Цитата Waterclo:



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




Можно, почти то же самое, но проще. "Почти" - это без визуализации отсчёта, отсчёт идёт, но скрытно... Уже был пример от kotkovets, :



Код:

Код: Выделить всё

!include "MUI2.nsh" 
!insertmacro MUI_LANGUAGE "English"
OutFile "MessageBoxTimeout.exe"
!define MsgBoxTimeout "!insertmacro  macro__MsgBoxTimeout"
!macro macro__MsgBoxTimeout text caption_text time
   System::Call "user32::MessageBoxTimeout(i$HWNDPARENT, t`${text}`, t`${caption_text}`,i0,i0, i${time})"
!macroend
Section
${MsgBoxTimeout} "Сообщение закроется через 2 секунды" "MessageBoxTimeout" 2000
SectionEnd

Можно конечно попробовать ждать появления окна MessageBox MB_OK, найти в нём ID кнопки и "повесить" на него Delay::DelayButton.
Аватара пользователя
kotkovets

Re: .: NSIS - все вопросы :. часть 2.

Сообщение kotkovets »

Цитата MKN:



пример от kotkovets
.: NSIS - все вопросы :. часть 2.




Спасибо, проглядел я этот пример. Однако, это не совсем то что нужно. Мне надо закрыть сообщение без предупреждений, что оно закроется:



Код:

Код: Выделить всё

MessageBox MB_OK|MB_ICONEXCLAMATION "Продолжить установку?" IDOK Start

Если нажать OK, то установка продолжится, а если время истекло, то переход на Exit. Такой вариант вполне годится.

А вообще, было бы интересно узнать подробнее, как поставить таймер на кнопку в таком сообщении.
Аватара пользователя
diakov

Re: .: NSIS - все вопросы :. часть 2.

Сообщение diakov »

Благодарствую сейчас буду экспериментировать.
Аватара пользователя
diakov

Re: .: NSIS - все вопросы :. часть 2.

Сообщение diakov »

Цитата Awral:



Здравствуйте! Как изменить текст, который отображается над прогрессбаром на странице установки? Там показываются файлы, которые сейчас распаковываются. А мне нужно поставить свой текст. Это возможно?

Заранее спасибо
.: NSIS - все вопросы :. часть 2.




Конечно возможно, если справку читать. Тебе нужно установить атрибут SetDetailPrint. Пример:



Код:

Код: Выделить всё

SetDetailsPrint none
File "secret file.dat"
SetDetailsPrint both

А для отображение там своего текста пиши:



Код:

Код: Выделить всё

DetailPrint "бла бла бла"
Аватара пользователя
kotkovets

Re: .: NSIS - все вопросы :. часть 2.

Сообщение kotkovets »

Цитата Waterclo:



Мне надо закрыть сообщение без предупреждений, что оно закроется
.: NSIS - все вопросы :. часть 2.




Так и не предупреждай о закрытии. Изображение


Цитата Waterclo:



Если нажать OK, то установка продолжится, а если время истекло, то переход на Exit.
.: NSIS - все вопросы :. часть 2.




Сделай так, как тебе надо, исходя из Return Code. Ещё раз код :



Код:

Код: Выделить всё

!include "MUI2.nsh" 
!insertmacro MUI_LANGUAGE "English"
OutFile "MsgBoxTimeout.exe"
!macro MsgBox out text title flags
;обыкновенное сообщение
;System::Call "user32::MessageBox(i $HWNDPARENT, t '${text}', t '${title}', i ${flags}) i.s"
;сообщение с таймером с примером значения задержки - 2с
System::Call "user32::MessageBoxTimeout(i $HWNDPARENT, t '${text}', t '${title}', i ${flags}, i 0, i 2000) i.s"
Pop ${out}
!macroend
Section 
!insertmacro MsgBox $0 "     Текст сообщения     " "  Заголовок   " 0x40|0x0
MessageBox MB_OK "Return Code: $0"
SectionEnd

Что в примере кода обозначает 0x40|0x0 :



Кнопки в сообщении и надписи действий на кнопках

0x0 - ОК

0x1 - ОК Отмена

0x2 - Прервать Повтор Пропустить

0x3 - Да Нет Отмена

0x4 - Да Нет

0x5 - Повтор Отмена

0x6 - Отмена Повторить Продолжить

0x4000 - ОК Справка



Значок сообщения :

0x10 - Белый X-крест в красном круге

0x20 - Вопросительный знак в "всплывающем облаке"

0x30 - Восклицательный знак в жёлтом треугольнике

0x40 - Восклицательный знак в "всплывающем облаке"



Инфо :
http://msdn.microsoft.com/en-us/libr...(v=vs.85).aspx
Ответить

Вернуться в «Автоматическая установка приложений»