Показать полную графическую версию : .: NSIS - все вопросы :. часть 2.
linkuha@vk
27-01-2013, 22:12
про секции я знаю, все сделал.
но я не включал MUI_PAGE_INSTFILES, т.к. я хочу чтобы в любом случае был выбор компонентов
и мне пишет "Установка успешно выполнена!", но ничего не устанавливается.
получается, если нельзя убирать выбор типа установки INSTFILES, то проблема была в этом.
но в статусе установки хотелось бы наблюдать не список распакованных файлов, а то какой компонент сейчас устанавливается, или все вместе. такое возможно?)
kotkovets
28-01-2013, 00:44
но в статусе установки хотелось бы наблюдать не список распакованных файлов, а то какой компонент сейчас устанавливается, или все вместе. такое возможно?) »
справку читайте и поиском по сайту блин пользуйтесь...
http://forum.oszone.net/post-1515790-845.html
В nsDialogs есть функция обратного вызова для кнопки "Назад" - nsDialogs::OnBack function_address.
А есть ли нечто подобное для кнопки "Далее" (Next) ? Я не обнаружил...
К примеру, надо организовать вызов какой либо функции перед переходом со страницы на страницу (скажем у меня 10 кастомных страниц и я перед переходом-открытием каждой последующей, хочу сначала делать нечто, при нажатии кнопки "Далее", на предыдущей странице, и только потом должна открыться последующая страница)
Как это можно реализовать ? И для стандартных страниц тоже...
kotkovets
29-01-2013, 14:28
А есть ли нечто подобное для кнопки "Далее" (Next) ? Я не обнаружил... »
и не нужно, все равно далее откроется следующая страничка по скрипту...
К примеру, надо организовать вызов какой либо функции перед переходом со страницы на страницу (скажем у меня 10 кастомных страниц и я перед переходом-открытием каждой последующей, хочу сначала делать нечто, при нажатии кнопки "Далее", на предыдущей странице, и только потом должна открыться последующая страница) »
до команды nsDialogs::show (время показания странички) остальное все ДО, элементы диалога ты создаешь до...
И для стандартных страниц тоже... »
в справочнике: Оформление-> Интерфейс Модерн -> Стандартные функции
А есть ли нечто подобное для кнопки "Далее" (Next) ? Я не обнаружил... »
Есть стандартная функция .onGUIEnd в интерфейсе модерн выполняемая после закрытия любых страниц. Почитайте про нее в справке.
все равно далее откроется следующая страничка по скрипту... »
Мне нужно , чтобы сначала не страничка открылась, а сработала функция , которая укажет, как этой страничке открыться...
К примеру, чтобы следующая страница открывалась согласно моих параметров для функции AnimateWindow.
Если для первой страницы AnimateWindow работает как положено, то следующая, после клика Next, почему то игнорирует AnimateWindow...
И если уж говорить про AnimateWindow, то возможно ли её применение для окон созданных с помощью CreateWindowEx ?
Ни черта не получается анимировать созданные дополнительные окна, и ессно инфы нигде "ни гу-гу" ...
Если бы это удалось, то можно было бы оч. интересно оформлять элементы страниц...
К примеру, надо организовать вызов какой либо функции перед переходом со страницы на страницу »
до команды nsDialogs::show »
Точнее до инициализации диалога, т.е. до команды nsDialogs::Create
Мне нужно , чтобы сначала не страничка открылась, а сработала функция , которая укажет, как этой страничке открыться... »
В чем проблема то, MKN? Или мы чего-то с Вячеславом не понимаем?
!include "MUI2.nsh"
!include "FileFunc.nsh"
!include "LogicLib.nsh"
!include "WinMessages.nsh"
!include "nsDialogs.nsh"
Page custom Dialog_1
Page custom Dialog_2
Page custom Dialog_3
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_LANGUAGE "Russian"
Name "TEST.exe"
OutFile "TEST.exe"
Function Dialog_1
nsDialogs::Create 1018
pop $0
# Создание элементов диалога
nsDialogs::Show
FunctionEnd
Function Dialog_2
# А В этом диалоге ЗДЕСЬ выполняется функция перед созданием диалога
call MyFunc
nsDialogs::Create 1018
pop $0
# Создание элементов диалога
nsDialogs::Show
FunctionEnd
Function MyFunc
# Команды
FunctionEnd
Function Dialog_3
nsDialogs::Create 1018
pop $0
# Создание элементов диалога
nsDialogs::Show
FunctionEnd
Section
SetAutoClose true
SectionEnd
K.A.V.,
Так я уже делал... Не работает. Видно не всё так просто.
Вот код :
!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`
nsDialogs::Show
FunctionEnd
/*Function page2
call MyFunc
nsDialogs::Create 1018
Pop $dlg
nsDialogs::Show
FunctionEnd
Function MyFunc
System::Call `user32::AnimateWindow(i$HWNDPARENT,i500,i${AW_SLIDE}|${AW_HOR_POSITIVE}|${AW_ACTIVATE})`
FunctionEnd*/
Section
SectionEnd
Посмотрите сначала, как это работает с первой страницей, а потом раскомментите вторую и посмотрите, как НЕ работает анимация 2 страницы...
И просьба к kotkovets, - подскажи пожалуйста, как анимировать с помощью AnimateWindow, созданное CreateWindowEx окно ?
подскажи пожалуйста, как анимировать с помощью AnimateWindow, созданное CreateWindowEx окно ? »
Есть подозрение что это не работает с дочерними окнами. По этому же и не работает анимация страниц, работает лишь с главным окном.
Был абсолютно не прав, у вас в скрипте просто ошибка, анимация не применяется из за неправильной строки. В функции страницы 1 вместо $HWNDPARENT надо применить $dlg.
Function page1
nsDialogs::Create 1018
Pop $dlg
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'
System::Call `user32::AnimateWindow(i$dlg,i500,i${AW_SLIDE}|${AW_CENTER}|${AW_ACTIVATE})`
SendMessage $dlg ${WM_GETFONT} 0 0 $R9
SetCtlColors $R2 `0x0000FF` `0x99FFFF`
nsDialogs::Show
FunctionEnd
у вас в скрипте просто ошибка »
Опаньки... А я прощёлкал этот момент и полез в такие оконные дебри... Спасибо !
Интересно сработает, если созданных окон несколько ?
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
И как быть , если созданных окон несколько ? »
Подставлять handle другого окна в вызов функции, не? :)
Только цвет теперь в созданном окне пропадает после анимации... »
поменяйте местами вызов функции анимации с присваением цвета, выделил жирным
И как быть , если созданных окон несколько и к каждому надо применить свою анимацию и цвет ? »
Тогда будет правильней записать строку так :
System::Call `user32::AnimateWindow(i$R2,i500,i${AW_SLIDE}|${AW_CENTER}|${AW_ACTIVATE})`
это для созданного окна функцией CreateWindowEx в вашем случае.
K.A.V.,
Действительно, оригинально получается (как затвор передёргивается :) )
С цветом уже понял...
Тогда будет правильней записать строку так : »
А вот с $R2 я начинал и выглядит это логично, но номер этот почему то не проходит... Нет анимации...
А вот с $R2 я начинал и номер этот почему то не проходит... Нет анимации... »
У меня проходит, увеличь время показа с 500 до 2500 например и будет нагляднее.
увеличь время показа с 500 до 2500 например и будет нагляднее. »
Не получается - просто появляется окно с небольшой задержкой без анимации... Интересно, почему так у меня ?
При таком нехорошем раскладе, как менять хэндлы созданных окон для анимации, если их будет несколько на одной странице ?
При таком нехорошем раскладе, как менять хэндлы созданных окон для анимации, если их будет несколько на одной странице ? »
Смари сюда :)
Создаём ещё одно такое же "окошко" выше первого:
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})`
Затем, мы делаем элемент скрытым командой ShowWindow, т.к. AnimateWindow не сработает, если мы попытаемся показать элемент, который уже показан :)
И потом только мы прописываем вызов функции анимации на созданный элемент
Как-то так ;)
Полный код:
!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})`
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})`
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
Создаём прямоугольную область со скругленными углами (закругляем углы окна) с помощью функции 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
Интересно, можно ли закруглить углы окнам, созданным с помощью CreateWindowEx ?
kotkovets
30-01-2013, 23:18
Интересно, можно ли закруглить углы окнам, созданным с помощью CreateWindowEx »
нет, для этого есть функции рисования (GDI) и отрисовки окон - в порядке обработки очередности сообщений винды,
а именно в событии WM_PAINT, ну что ли так:
http://radiofront.narod.ru/htm/prog/htm/winda/api/paint.html
через нсисовский system это практически нереально..
проблема system - нормальная реализация обратных функций (калбеков)
в остальном system - хорош..
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
Можно заставить прыгать и окна, созданные с помощью CreateWindowEx, более простым кодом, но возник вопрос - как вернуть окно на место, в исходную позицию, после повторного клика кнопки ? ( для любого кол-ва окон и кнопок)
Код :
!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
kotkovets
31-01-2013, 20:26
но возник вопрос - как вернуть окно на место, в исходную позицию...»
Но ты же с помощью CreateWindowEx создавал диалог и координаты известны..
...i50,i100...,i$dlg,i222,i0,i0) i.R2
как вернуть окно на место, в исходную позицию, после повторного клика кнопки ? ( для любого кол-ва окон и кнопок) »
из структуры рект родителя и дочернего окна - точнее, разницой первого члена структуры рект родителя и дочернего окна...
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..
!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 BtnClick
pop $btn
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
${If} $5 != 50
System::Call "User32::SetWindowPos(iR2,i,i50,i100,i,i,i0x201)"
${Else}
System::Call "User32::SetWindowPos(iR2,i,i3,i3,i,i,i0x201)"
${EndIf}
System::Free $1
System::Free $3
FunctionEnd
Section
SectionEnd
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.
Available in ZeroNet 1osznRoVratMCN3bFoFpR2pSV5c9z6sTC