|
Внимание, важное сообщение: Дорогие Друзья!
В ноябре далекого 2001 года мы решили создать сайт и форум, которые смогут помочь как начинающим, так и продвинутым пользователям разобраться в операционных системах. В 2004-2006г наш проект был одним из самых крупных ИТ ресурсов в рунете, на пике нас посещало более 300 000 человек в день! Наша документация по службам Windows и автоматической установке помогла огромному количеству пользователей и сисадминов. Мы с уверенностью можем сказать, что внесли большой вклад в развитие ИТ сообщества рунета. Но... время меняются, приоритеты тоже. И, к сожалению, пришло время сказать До встречи! После долгих дискуссий было принято решение закрыть наш проект. 1 августа форум переводится в режим Только чтение, а в начале сентября мы переведем рубильник в положение Выключен Огромное спасибо за эти 24 года, это было незабываемое приключение. Сказать спасибо и поделиться своей историей можно в данной теме. С уважением, ваш призрачный админ, BigMac... |
|
| Компьютерный форум OSzone.net » Автоматическая установка Windows » Автоматическая установка приложений » .: NSIS - все вопросы :. часть 2. |
|
|
.: NSIS - все вопросы :. часть 2.
|
|
Ветеран Сообщения: 1216 |
![]() Данная тема предназначена для обсуждения вопросов, связанных с инсталлятором 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 |
|
Ветеран Сообщения: 2398
|
Профиль | Отправить PM | Цитировать K.A.V.,
Действительно, оригинально получается (как затвор передёргивается )С цветом уже понял... Цитата profcom:
|
|
|
Отправлено: 17:42, 29-01-2013 | #153 |
|
Пользователь Сообщения: 139
|
Профиль | Отправить PM | Цитировать Цитата MKN:
|
|
|
Отправлено: 17:46, 29-01-2013 | #154 |
|
Ветеран Сообщения: 2398
|
Профиль | Отправить 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 |
|
Ветеран Сообщения: 2398
|
Профиль | Отправить 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 |
|
Ветеран Сообщения: 2398
|
Профиль | Отправить 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 | |
|