|
Компьютерный форум OSzone.net » Автоматическая установка Windows » Автоматическая установка приложений » .: NSIS - все вопросы :. часть 2. |
|
.: NSIS - все вопросы :. часть 2.
|
Ветеран Сообщения: 1216 |
Профиль | Отправить PM | Цитировать
Данная тема предназначена для обсуждения вопросов, связанных с инсталлятором Nullsoft Scriptable Install System, или просто NSIS. Сайт приложения. Описание: Текущая версия: NSIS 3.05 от 15 декабря 2019 года Скачать | Архив сборок версии Первая часть этой темы Скачать первую часть этой темы одним архивом ВНИМАНИЕ! прежде, чем задать вопрос, почитайте, где Вы найдете ответы на большинство вопросов: Справочник по NSIS - создан силами нашего сообщества. Руководство пользователя. Перевод – Поляков А.В, зеркало Документация Утилиты разработчика Расширение функциональности Примеры скриптов на нашем форуме Скрипт NSIS для перепаковки AIMP2+Сборки Тема для Notepad++(пример парсинга XML) Достоинства Ещё немного полезной информации: |
|
------- Отправлено: 12:02, 09-12-2012 |
Ленивый кусок мяса Сообщения: 1986
|
Профиль | Сайт | Отправить PM | Цитировать MKN, как вариант с 2-ым диалогом могу предложить такое решение, добавить эффект исчезания, а потом появления
Т.к. вроде бы, функция анимации создаёт саму анимацию именно в действии, т.е. если окно уже показано, то к нему нельзя применить эффект опять появления Сначала скрываем, а потом показываем, впринципе так даже получше будет мне кажется !define AW_HOR_POSITIVE 0x00000001 !define AW_HOR_NEGATIVE 0x00000002 ;!define AW_VER_POSITIVE 0x00000004 ;!define AW_VER_NEGATIVE 0x00000008 !define AW_CENTER 0x00000010 !define AW_HIDE 0x00010000 !define AW_ACTIVATE 0x00020000 !define AW_SLIDE 0x00040000 !define AW_BLEND 0x00080000 Function Cancel System::Call `user32::AnimateWindow(i$HWNDPARENT,i500,i${AW_SLIDE}|${AW_HOR_POSITIVE}|${AW_HIDE})` FunctionEnd !define MUI_CUSTOMFUNCTION_ABORT Cancel Function .onInstSuccess System::Call `user32::AnimateWindow(i$HWNDPARENT,i1000,i${AW_BLEND}|${AW_HIDE})` FunctionEnd !include MUI2.nsh ;!include "FileFunc.nsh" ;!include "LogicLib.nsh" ;!include "WinMessages.nsh" Page custom page1 Page custom page2 !insertmacro MUI_PAGE_INSTFILES !insertmacro MUI_LANGUAGE "English" OutFile "test_window_move.exe" Var dlg !define WS_BORDER 0x00800000 Function page1 nsDialogs::Create 1018 Pop $dlg System::Call `user32::AnimateWindow(i$HWNDPARENT,i500,i${AW_SLIDE}|${AW_CENTER}|${AW_ACTIVATE})` System::Call 'user32::CreateWindowEx(i0,t "STATIC",t "К этому окну позарез надо применить AnimateWindow ",\ i${DEFAULT_STYLES}|${WS_BORDER},\ i50,i100,i200,i60,i$dlg,i222,i0,i0) i.R2' SendMessage $dlg ${WM_GETFONT} 0 0 $R9 SetCtlColors $R2 `0x0000FF` `0x99FFFF` System::Call `user32::AnimateWindow(i$dlg,i500,i${AW_SLIDE}|${AW_CENTER}|${AW_ACTIVATE})` nsDialogs::Show FunctionEnd Function page2 call MyFunc nsDialogs::Create 1018 Pop $dlg # Для видимости перелистывания диалога ${NSD_CreateCheckbox} 25u 27u 68u 14u "checkbox" ${NSD_CreateLabel} 0 5u 100u 10u "sdfsdfsdf" # nsDialogs::Show FunctionEnd Function MyFunc System::Call `user32::AnimateWindow(i$HWNDPARENT,i500,i${AW_SLIDE}|${AW_HOR_NEGATIVE}|${AW_HIDE})` System::Call `user32::AnimateWindow(i$HWNDPARENT,i500,i${AW_SLIDE}|${AW_HOR_POSITIVE}|${AW_ACTIVATE})` FunctionEnd Section SectionEnd Цитата MKN:
Цитата MKN:
|
||
------- Отправлено: 17:40, 29-01-2013 | #151 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Пользователь Сообщения: 139
|
Профиль | Отправить PM | Цитировать Цитата MKN:
это для созданного окна функцией CreateWindowEx в вашем случае. |
|
Отправлено: 17:42, 29-01-2013 | #152 |
Ветеран Сообщения: 2358
|
Профиль | Отправить PM | Цитировать K.A.V.,
Действительно, оригинально получается (как затвор передёргивается ) С цветом уже понял... Цитата profcom:
|
|
Отправлено: 17:42, 29-01-2013 | #153 |
Пользователь Сообщения: 139
|
Профиль | Отправить PM | Цитировать Цитата MKN:
|
|
Отправлено: 17:46, 29-01-2013 | #154 |
Ветеран Сообщения: 2358
|
Профиль | Отправить PM | Цитировать Цитата profcom:
При таком нехорошем раскладе, как менять хэндлы созданных окон для анимации, если их будет несколько на одной странице ? |
|
Последний раз редактировалось MKN, 29-01-2013 в 18:18. Отправлено: 17:50, 29-01-2013 | #155 |
Ленивый кусок мяса Сообщения: 1986
|
Профиль | Сайт | Отправить PM | Цитировать Цитата MKN:
Создаём ещё одно такое же "окошко" выше первого: System::Call 'user32::CreateWindowEx(i0,t "STATIC",t "К этому AnimateWindow ",\ i${DEFAULT_STYLES}|${WS_BORDER},\ i50,i10,i200,i60,i$dlg,i223,i0,i0) i.R2' ShowWindow $R2 0 System::Call `user32::AnimateWindow(i$R2,i1000,i${AW_SLIDE}|${AW_VER_NEGATIVE}|${AW_ACTIVATE})` И потом только мы прописываем вызов функции анимации на созданный элемент Как-то так Полный код: |
|
------- Отправлено: 19:08, 29-01-2013 | #156 |
Ветеран Сообщения: 2358
|
Профиль | Отправить PM | Цитировать Создаём прямоугольную область со скругленными углами (закругляем углы окна) с помощью функции CreateRoundRectRgn :
(можно вообще сделать окно страницы в виде эллипса или круга...) !include MUI2.nsh Page custom page1 !insertmacro MUI_PAGE_INSTFILES !insertmacro MUI_LANGUAGE "English" OutFile "CreateRoundRectRgn.exe" Var dlg Function page1 nsDialogs::Create 1018 Pop $dlg System::Call "*(i, i, i, i)i.r0"; создать новую структуру System::Call "User32::GetClientRect(i$HWNDPARENT, ir0)"; Получить новые координаты структуры - в $0 System::Call "*$0(i, i, i.r1, i.r2)" ;Функция GetClientRect извлекает координаты рабочей области окна. Рабочие координаты определяют левый верхний ;и нижний правый углы рабочей области. Поскольку рабочие координаты определены относительно левого верхнего угла ;рабочей области окна, координаты левого верхнего угла - (0,0). System::Free $0, освободить оперативную память IntOp $1 $1 + 5 IntOp $2 $2 + 30 ;Отрегулируйте значения координат в CreateRoundRectRgn, как Вам надо System::Call "Gdi32::CreateRoundRectRgn(i0,i0,ir1,ir2,i30,i40)i.r0" System::Call "User32::SetWindowRgn(i$HWNDPARENT, ir0, i1)" /* int nLeftRect , // x -координата верхнего левого угла области int nTopRect , // y -координата верхнего левого угла области int nRightRect , // x -координата нижнего правого угла области int nBottomRect , // y -координата нижнего правого угла области int nWidthEllipse , // ширина эллипса для закругленных углов int nHeightEllipse // высота эллипса для закругленных углов Параметры nLeftRect - определяет x -координату верхнего левого угла области. nTopRect - определяет y - координату верхнего левого угла области. nRightRect - определяет x -координату нижнего правого угла области. nBottomRect - определяет y -координату нижнего правого угла области. nWidthEllipse - определяет ширину эллипса, используемого для создания закругленных углов. nHeightEllipse - определяет высоту эллипса, используемого для создания закругленных углов. */ nsDialogs::Show FunctionEnd Section SectionEnd |
Последний раз редактировалось MKN, 31-01-2013 в 10:42. Отправлено: 12:17, 30-01-2013 | #157 |
Ветеран Сообщения: 1216
|
Профиль | Отправить PM | Цитировать Цитата MKN:
а именно в событии WM_PAINT, ну что ли так: http://radiofront.narod.ru/htm/prog/...api/paint.html через нсисовский system это практически нереально.. проблема system - нормальная реализация обратных функций (калбеков) в остальном system - хорош.. |
|
------- Отправлено: 23:18, 30-01-2013 | #158 |
Ветеран Сообщения: 2358
|
Профиль | Отправить PM | Цитировать Reposition Window - изменяем позицию (месторасположение) окна.
Может пригодится, когда окно инсталлятора закрывает собой другое окно, например запущенного приложения (или наоборот). Окно в нужный момент сместится-"отпрыгнет" в сторону. !include MUI2.nsh Page custom page1 !insertmacro MUI_PAGE_INSTFILES !insertmacro MUI_LANGUAGE "English" OutFile "repositionWindow.exe" Var dlg Var btn !define stRECT "(i, i, i, i) i" !define SPI_GETWORKAREA 0x0030 Function page1 nsDialogs::Create 1018 Pop $dlg ${NSD_CreateButton} 80u 14u 120u 14u "Переместить окно" pop $btn ${NSD_OnClick} $btn BtnClick nsDialogs::Show FunctionEnd Function repositionWindow ; Создать RECT структуру. Внутри этой структуры координаты углов. Верхний левый угол определяется двумя координатами left и top. ;Нижний правый соответственно определяется двумя оставшимися координатами - right и bottom. System::Call "*${stRECT} .r1" ; Получить окно прямоугольника.Функция GetWindowRect отыскивает размеры рамки ограничивающей прямоугольник ;определяемого окна. Размеры даны в экранных координатах, которые расположены относительно левого верхнего угла экрана. System::Call "User32::GetWindowRect(i, i) i ($HWNDPARENT, r1) .r2" ; Получить координаты System::Call "*$1${stRECT} (.r2, .r3, .r4, .r5)" ; Рассчитать ширину / высоту нашего окна IntOp $2 $4 - $2 ; $2 - ширина IntOp $3 $5 - $3 ; $3 - высота ; Определить размер рабочего стола без панели задач System::Call "User32::SystemParametersInfo(i, i, i, i) i (${SPI_GETWORKAREA}, 0, r1, 0) .r4" ; Получить координаты System::Call "*$1${stRECT} (.r4, .r5, .r6, .r7)" System::Free $1 ; правую сторону экрана разделить на 4 IntOp $0 $6 / 4 IntOp $8 $2 / 4 IntOp $0 $0 - $8 ; нижнюю часть экрана разделить на 4 IntOp $1 $7 / 4 IntOp $8 $3 / 4 IntOp $1 $1 - $8 ;Установить новую позицию окна System::Call "User32::SetWindowPos(i, i, i, i, i, i, i) b ($HWNDPARENT, 0, $0, $1, 0, 0, 0x201)" FunctionEnd Function BtnClick pop $btn MessageBox MB_OK "Приготовились к прыжку ?" IDOK Call repositionWindow FunctionEnd Section SectionEnd Код : !include MUI2.nsh Page custom page1 !insertmacro MUI_PAGE_INSTFILES !insertmacro MUI_LANGUAGE "English" OutFile "repositionWindowEx.exe" Var dlg Var btn !define WS_BORDER 0x00800000 Function page1 nsDialogs::Create 1018 Pop $dlg ${NSD_CreateButton} 150u 14u 120u 14u "Переместить Window 1" pop $btn ${NSD_OnClick} $btn BtnClick System::Call 'user32::CreateWindowEx(i0,t "STATIC",t "Window 1",\ i${DEFAULT_STYLES}|${WS_BORDER},\ i50,i100,i200,i60,i$dlg,i222,i0,i0) i.R2' SetCtlColors $R2 `0x0000FF` `0x99FFFF` nsDialogs::Show FunctionEnd Function repositionWindow System::Call "User32::SetWindowPos(i, i, i, i, i, i, i) b ($R2, 0, 3, 3, 0, 0, 0x201)" FunctionEnd Function BtnClick pop $btn Call repositionWindow FunctionEnd Section SectionEnd |
Последний раз редактировалось MKN, 31-01-2013 в 17:02. Отправлено: 10:41, 31-01-2013 | #159 |
Ветеран Сообщения: 1216
|
Профиль | Отправить PM | Цитировать Цитата MKN:
Цитата MKN:
System::Call "*(i,i,i,i)i.r1" System::Call "*(i,i,i,i)i.r3" System::Call "User32::GetWindowRect(iR2,ir1)" System::Call "User32::GetWindowRect(i$dlg,ir3)" System::Call "*$1(i.r2)" System::Call "*$3(i.r4)" Intop $5 $2 - $4 т.е в данном примере разница равна 50.. |
||
------- Последний раз редактировалось kotkovets, 01-02-2013 в 20:23. Отправлено: 20:26, 31-01-2013 | #160 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Инфо - [ликбез] Помощь начинающим .:[все вопросы]:. часть 2 | dimadr | Наборы обновлений для Windows XP/2003/Windows 7 | 267 | 14-02-2020 08:25 | |
[архив].: NSIS - все вопросы :. | kotkovets | Автоматическая установка приложений | 3387 | 09-12-2012 11:56 | |
Инфо - [ликбез] Помощь начинающим .:[все вопросы]:. часть 1 | jameszero | Наборы обновлений для Windows XP/2003/Windows 7 | 1491 | 22-07-2011 22:42 | |
Выбор|модернизация процессора .:[все вопросы]:. Часть I | Myxa | Выбор отдельных компонентов компьютера и конфигурации в целом | 1845 | 01-01-2011 19:18 | |
Вопросы по создателю инсталляций NSIS | MaxDELETE | Программное обеспечение Windows | 14 | 04-07-2007 10:01 |
|