ОКНА И ГАДЖЕТЫ часть 1

В PureBasic`е окном называют собственно окно, как оно есть в понимании любого пользователя современной операционной системы. А гаджет - это любой элемент графического интерфейса пользователя (GUI), например кнопка, строка текста, гиперссылка, картинка и т.д.

Все гаджеты должны распологатся в окне, поэтому чтобы написать приложение с графическим интерфейсом сперва надо создать окно, В PureBasic`е это делается следующим образом:


If OpenWindow(WinID, x, y, ширина, высота,"Заголовок окна", флаг) And CreateGadgetList(WindowID(WinID))

EndIf
End



Теперь разберем что все это означает;
OpenWindow(...) - это очевидно команда, открывающая окно и
у нее есть следующие параметры:

CreateGadgetList(WindowID(WinID)) - команда, создающая в нашем окне список гаджетов, для чего он нужен, начинающему программисту не столь существенно, надо просто запомнить что он создается вместе с окном, а в качестве параметра WinID указывается точно такой же WinID как при создании окна.

Теперь давайте попробуем написать первую программу, которая будет состоять из одного окна с заголовком. Для этого откроем редактор purebasic.exe и напишем следующий код:


If OpenWindow(0, 100, 100, 350, 400, "Заголовок", #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget) And CreateGadgetList(WindowID(0))

EndIf
End



Для запуска программы нажмите F5 или в пункте меню Compiler выберете Compile/Run.
Если все написано верно наше окно появится на экране.
Но разглядеть мы его не успеем, потому что оно сразу исчезнет.

Программа стартовала и закрылась, она просто выполнила все инструкции (OpenWindow(...), CreateGadgetList(WindowID(WinID))) и добралась до строки End.
Кстати если Вы забудете написать End в конце своей программы компилятор это сделает за Вас.

Как же сделать свое окно "устойчивым"?
Для того чтобы оно могло нормально существовать внутри него надо организовать цикл окна - для этого подойдет обычный цикл типа Repeat ... Until.
На примере, представленном ниже, я покажу Вам окно с циклом, которое исчезает когда пользователь сам закроет его. А потом объясню как этот пример работает.


If OpenWindow(0, 100, 100, 350, 400, "Заголовок", #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget) And CreateGadgetList(WindowID(0))

Repeat
A= WaitWindowEvent()
If A=#PB_Event_CloseWindow
Q=1
EndIf
Until Q=1

EndIf
End



Цикл

Repeat
--- код ---
Until Q=1

означает, что --- код --- будет выполнатся раз за разом, пока переменная Q не станет равной 1. Как только условие Q=1 выполнится программа выйдет из цикла и станет выполнять следующие за ним команды.



Условный оператор:

If условие
--- код ---
EndIf

означает, что --- код --- будет выполнен только если справедливо условие.



Функция WaitWindowEvent() возвращает id, - универсальный идентификатор последнего нажатого пользователем гаджета, она не имеет параметров. С ее помощью мы можем узнать на какой гаджет в окне кликнул пользователь.
В нашем примере id этого гаджета записывается в переменную A.

Если нажата кнопка "закрыть окно" в правом верхнем углу, то функция WaitWindowEvent() вернет значение, равное константе: #PB_Event_CloseWindow.

Таким образом следующая конструкция

Repeat

A= WaitWindowEvent()

If A=#PB_Event_CloseWindow
Q=1
EndIf

Until Q=1


становится совершенно понятной. Цикл выполняется до тех пор, пока не выполнется условие Q=1. Но переменная Q получит значение 1, только если Функция WaitWindowEvent() вернет значение равное #PB_Event_CloseWindow, то есть пользователь кликнет по кнопке "закрыть окно".

При выполнении этого примера получится следующий результат:


1.JPG - 6792 Bytes

Теперь мы уже умеем создавать окно, которое можно свернуть, развернуть или закрыть, но пока оно пустое, без кнопок, текста и прочих очень нужных элементов, поэтому в следующей главе рассказ пойдет о создании гаджетов.