Окна и гаджеты часть 2
Как я уже говорил в предыдущей главе гаджеты - это любые элементы графического интерфейса пользователя. То есть это кнопки, текст, ссылки, картинки, ComboBox, панели и многие другие элементы, которые Вы наверняка не раз видели во многих программах.PureBasic поддерживает большое количество различных гаджетов, но в этой главе я расскажу лишь о самых основных, чтобы показать их принцип, а любой нужный Вам специфический элемент легко найти в справочном руководстве.
Итак начнем с самого распространенного - с обыкновенной кнопки:
ButtonGadget(id, x, y, Width, Height, Text, Flags)
id - универсальный идентификатор гаджета (кнопки), любое целое число больше 0
x, y - координаты верхнего левого угла кнопки в пикселах, относительно окна
Width, Height - ширина и высота кнопки в пикселах
Text - просто текст на кнопке
Flags - необязательный параметр, который может принимать следующие значения:
#PB_Button_Right
#PB_Button_Left
#PB_Button_Default - текст по середине кнопки
#PB_Button_MultiLine - текст в несколько строк
#PB_Button_Toggle - этот флаг переводит кнопку в режим включить-выключить
Следующий гаджет - строка текста:
TextGadget(id, x, y, Width, Height, Text, Flags)
Как видно, функция для создания строки текста имеет те же параметры что и для кнопки и эти параметры имеют тот же смысл, только Flags принимает следующие значения:
#PB_Text_Center
#PB_Text_Right
#PB_Text_Border
Я думаю смысл этих флагов интуитивно понятен.
Вот мы добрались до гиперссылки:
HyperLinkGadget(id, x, y, Width, Height, Text, Color)
И здесь мы видим знакомые параметры, за исключением только Color, который, как нетрудно догадаться, означает цвет, и записывается в следующем виде:
RGB(255,0,0) - красный
RGB(0,255,0) - зеленый
RGB(0,0,255) - синий
EditorGadget - текстовый редактор, предназначен для ввода информации пользователем.
EditorGadget(id, x, y, Width, Height ,Flags)
Flags может принимать только одно значение - #PB_Editor_ReadOnly, если оно установлено - редактор недоступен.
Теперь мы можем сделать окно со всеми этими гаджетами и циклом:
If OpenWindow(0, 100, 100, 350, 400, "Заголовок", #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget)
ButtonGadget(1, 10, 10, 330, 20, "OK", #PB_Button_Left)
TextGadget(2, 10, 40, 330, 20, "Text", #PB_Text_Border)
HyperLinkGadget(3, 10, 70, 330, 20, "www.purebasic.com", RGB(0,155,255) )
EditorGadget(4, 10, 100, 330, 290)
Repeat
A= WaitWindowEvent()
If A=#PB_Event_CloseWindow
Q=1
EndIf
Until Q=1
EndIf
End
ButtonGadget(1, 10, 10, 330, 20, "OK", #PB_Button_Left)
TextGadget(2, 10, 40, 330, 20, "Text", #PB_Text_Border)
HyperLinkGadget(3, 10, 70, 330, 20, "www.purebasic.com", RGB(0,155,255) )
EditorGadget(4, 10, 100, 330, 290)
Repeat
A= WaitWindowEvent()
If A=#PB_Event_CloseWindow
Q=1
EndIf
Until Q=1
EndIf
End
Результат выполнения этой программы должен выглядеть примерно следующим образом:
Есть гаджеты, состоящие из нескольких частей, пример такого гаджета - панель, на каждой вкладке которой можно располагать разные элементы.
Панель делается так:
PanelGadget(id, x, y, Width, Height)
Добавить вкладку на панель можно используя следующую команду:
AddGadgetItem(id, Position, Text)
Здесь в качестве первого параметра указываем id панели, на которую добавляем вкладку.
Position может быть равен -1 или 1 в зависимости от того хотим мы добавить вкладку с конца или с начала.
Text - название вкладки.
Пример приложения с панелью ниже:
If OpenWindow(0, 100, 100, 350, 400, "Заголовок", #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget) And CreateGadgetList(WindowID(0))
PanelGadget(1, 10, 10, 330, 380)
AddGadgetItem(1, -1, "Item 1")
ButtonGadget(2, 30, 30, 50, 20, "OK")
AddGadgetItem(1, -1, "Item 2")
ButtonGadget(3, 30, 30, 50, 20, "Cancel")
CloseGadgetList( )
Repeat
A= WaitWindowEvent()
If A=#PB_Event_CloseWindow
Q=1
EndIf
Until Q=1
EndIf
End
PanelGadget(1, 10, 10, 330, 380)
AddGadgetItem(1, -1, "Item 1")
ButtonGadget(2, 30, 30, 50, 20, "OK")
AddGadgetItem(1, -1, "Item 2")
ButtonGadget(3, 30, 30, 50, 20, "Cancel")
CloseGadgetList( )
Repeat
A= WaitWindowEvent()
If A=#PB_Event_CloseWindow
Q=1
EndIf
Until Q=1
EndIf
End
Обратите внимание, что при создании панели автоматически открывается новый список гаджетов (GadgetList), которые будут находится на ней.
В конце каждая панель должна быть закрыта командой
CloseGadgetList( ).
Результат должен выглядеть так:
Теперь, с помощью PureBasic мы умеем писать приложения с графическим интерфейсом, Вы можете потренироваться в мастерстве заполнения окна разнообразными гаджетами, используя стандартное справочное руководство.
Вот только нельзя не заметить, что все наши програмки ведут себя как-то странно, а именно - они никак не реагируют на действия пользователя. Мы можем сколько угодно нажимать на кнопку или кликать на ссылку и при этом совершено ничего не происходит. А все потому, что мы пока упускали из виду очень важный элемент программирования - отработка событий. Событие - это любое действие пользователя по отношению к программе, нажатие кнопки мыши или клавиши, собственно перемещение курсора это уже событие на которое программа может реагировать.
В следующей главе речь пойдет о том как в PureBasic`е реализована эта самая отработка событий.