Уроки PureBasic

Categories

Other Sites

Other Sites



             Поиск по сайту

     

                


    Оставить мне сообщение:



Отработка событий

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

WaitWindowEvent ( )

Теперь давайте поговорим о ней поподробнее.

Как вы уже знаете, эта функция может вернуть значение #PB_Event_CloseWindow, это означает что пользователь нажал кнопку "закрыть окно". Но если был нажат какой-либо из созданных Вами гаджетов функция вернет - #PB_Event_Gadget, если был выбран какой-либо пункт меню (о создании меню мы еще не говорили, оставим его до следующих глав) - #PB_Event_Menu.

Чтобы выяснить какой именно гаджет был нажат пользователем, после нее надо применить функцию EventGadget ( ), она возвращает id (универсальный идентификатор) нажатого элемента.

B=EventGadget ( )

Переменная B получит значение равное id нажатого гаджета, целое число больше 0.
Как это работает можно увидеть на следующем примере:



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

ButtonGadget(1, 10, 10, 330, 20, "Button 1", #PB_Button_Default)
ButtonGadget(2, 10, 40, 330, 20, "Button 2", #PB_Button_Default)

Repeat
A= WaitWindowEvent( )

If A=#PB_Event_Gadget
B= EventGadget ( )
MessageRequester("Сообщение", "Нажата кнопка "+Str(B), 0)
EndIf

If A=#PB_Event_CloseWindow
Q=1
EndIf

Until Q=1
EndIf
End


Уроки PureBasic

Запустите этот пример и кликните мышью кнопку номер 1, Вы увидите следующий результат:

Уроки PureBasic


В этом примере Вы наверняка увидели две еще неизвестные Вам функции:

MessageRequester ("Заголовок сообщения", "Текст сообщения", параметр)
Эта функция дает сообщение пользователю в отдельном маленьком окошке. Ее третий параметр - целое число от 0 до 6, является необязательным, он определяет тип сообщения. Функция возвращает следующие значения (в зависимости от выбора пользователя):

#PB_MessageRequester_Yes
#PB_MessageRequester_No
#PB_MessageRequester_Cancel

Str (число)

Данная функция в качестве параметра принимает число, а возвращает соответствующую строку текста, то есть число 1 она преобразует в строку "1", число 418 в "418".
Строки текста в PureBasic`е можно складывать, поэтому выражение "Нажата кнопка " + Str (1) даст результат "Нажата кнопка 1".

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

Уроки PureBasic

Пример использование Select

Уроки PureBasic

Описание принципа обработки событий в PureBasic

OpenWindow(0, 0, 0, 230, 90, "Event example", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)

ButtonGadget (128, 10, 10, 200, 20, "Click me")
CheckBoxGadget(192, 10, 40, 200, 20, "Check me")
If CreateMenu(0, WindowID(0))
MenuTitle("Menu")
MenuItem(8, "Item 1")
MenuItem(9, "Item 2")
MenuItem(10, "Item 3")
EndIf
Repeat


; перебираем Event (которому присваиваются возможные значения командой WaitWindowEvent() )
; в данном случае они могут быть равны:
; #PB_Event_Gadget - то есть действия производится над гаджетами
; #PB_Event_Menu - действия производится над созданным ранее меню
; #PB_Event_CloseWindow - этот флаг 'появляется' при нажатии крестика вверху окна программы или сочетания клавиш Alt+F4

Event = WaitWindowEvent()

Select Event

Case #PB_Event_Gadget

; если в окне вашей программы действия производятся над гаджетами, то узнаем значение EventGadget()
; EventGadget() возвращает 'номер' гаджета над которым были произведены действия
; мы имеем два гаджета под номерами 128 и 192.
; В данном случае, при действии над каки-либо из гаджетов, командой Debug мы выводим в окно отладчика сообщение



Select EventGadget()
Case 128 : Debug "Клик по гаджету номер 128"
Case 192 : Debug "Клик по гаджету номер 192"
EndSelect

Case #PB_Event_Menu

; если действия в окне твоей программы были произведены над созданным ранее меню
; то мы перебираем номера пунктов меню, эти номера мы указывали ранее при создании меню
; и соответственно при действии над гаджетом (в данном примере используется 'клик' левой кнопкой мыши)


Select EventMenu()
Case 8 : Debug "Первый пункт меню"
Case 9 : Debug "Второй пункт меню"
Case 10 : Debug "Третий пункт меню"
EndSelect

Case #PB_Event_CloseWindow
q=1
EndSelect

; если q равно 1 то твоя программа закроется. q будет равно единице когда WaitWindowEvent() будет равно #PB_Event_CloseWindow

; а WaitWindowEvent() будет равно #PB_Event_CloseWindow, когда будут произведены манипуляции по закрытию окна
Until q=1
End
; основные команды можешь посмотреть в паре небольших учебниках по PB.
; Много примеров есть в кодархиве
; все что не понятно ищи по форуму через поиск, пока ищешь то что нужно,
; мимоходом и еще много интересного найдешь




Применение Select на примере :

#


Код реализации :

Enumeration
#Window_0
#Window_1
#Image_0
#Image_1

EndEnumeration

UsePNGImageDecoder()

CatchImage(1, ?Im, ?ImEnd-?Im)
CatchImage(2, ?Im1, ?Im1End-?Im1)
CatchImage(3, ?Im3, ?Im3End-?Im3)
CatchImage(4, ?Im4, ?Im4End-?Im4)
CatchImage(5, ?Im5, ?Im5End-?Im5)
CatchImage(6, ?Im6, ?Im6End-?Im6)
CatchImage(7, ?Im7, ?Im7End-?Im7)

OpenWindow(#Window_0, 100, 100, 450, 380, "Заголовок", #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget| #PB_Window_ScreenCentered)
SetWindowColor(#Window_0, $ffffff) ;задаём цвет окна

ButtonGadget(7, 25, 25, 70, 25, "Кнопка 1")
ButtonGadget(8, 25, 65, 70, 25, "Кнопка 2")
ButtonGadget(9, 25, 105, 70, 25, "Кнопка 3")
ButtonGadget(10, 25, 145, 70, 25, "Кнопка 4")
ButtonGadget(11, 25, 185, 70, 25, "Кнопка 5")

ImageGadget(#Image_0, 295, 15, 175, 165, ImageID(1))
ImageGadget(#Image_1, 295, 195, 175, 165, ImageID(2))

If CreateMenu(#Window_0, WindowID(0))
MenuTitle("Меню")
MenuItem(12, "Открыть")
MenuItem(13, "Сахронить")
MenuItem(14, "Закрыть")
MenuTitle("Редактировать")
MenuItem(200,"Cut")
MenuItem(201,"Копировать")
MenuItem(202,"Вставить")
MenuTitle("Помощь")
MenuItem(300,"О прогр...")
EndIf

Repeat
Window=EventWindow()
Event = WaitWindowEvent()

Select Event

Case #PB_Event_Gadget
Select EventGadget()
Case 7 ; для гаджета 7
SetGadgetState(#Image_0, ImageID(2)) ; изображение при нажатии на кнопку
Case 8 ; для гаджета 8
SetGadgetState(#Image_0, ImageID(3)) ; изображение при нажатии на кнопку
Case 9 ; для гаджета 9
SetGadgetState(#Image_0, ImageID(4)) ; изображение при нажатии на кнопку
Case 10 ; для гаджета 10
SetGadgetState(#Image_0, ImageID(5)) ; изображение при нажатии на кнопку
Case 11 ; для гаджета 11
SetGadgetState(#Image_0, ImageID(6)) ; изображение при нажатии на кнопку
EndSelect

Case #PB_Event_Menu
Select EventMenu()
Case 14
Break ; закрыть программу
Case 300
OpenWindow(#Window_1, 0, 0, 200, 200, "О программе", #PB_Window_ScreenCentered|#PB_Window_SystemMenu )
ImageGadget(15, 0, 0, 200, 200, ImageID(7))
EndSelect
EndSelect


If Event=#PB_Event_CloseWindow
CloseWindow(Window) ; закрываем под окно.
EndIf

Until Event=#PB_Event_CloseWindow And Window=0
End

DataSection
Im : IncludeBinary "img_1.png": ImEnd :
Im1: IncludeBinary "img_2.png": Im1End:
Im3: IncludeBinary "img_3.png": Im3End:
Im4: IncludeBinary "img_4.png": Im4End:
Im5: IncludeBinary "img_5.png": Im5End:
Im6: IncludeBinary "img_6.png": Im6End:
Im7: IncludeBinary "o_pragrame.png": Im7End:
EndDataSection



Уроки PureBasic

Использование Procedure

Уроки PureBasic

Аналогичный вариант, но при использовании Procedure :

Уроки PureBasic


Код реализации :

Enumeration
#Window_0
#Image_0

EndEnumeration

UsePNGImageDecoder()

CatchImage(1, ?Im, ?ImEnd-?Im)
CatchImage(2, ?Im1, ?Im1End-?Im1)
CatchImage(3, ?Im3, ?Im3End-?Im3)
CatchImage(4, ?Im4, ?Im4End-?Im4)
CatchImage(5, ?Im5, ?Im5End-?Im5)
CatchImage(6, ?Im6, ?Im6End-?Im6)

Procedure EventButton1(Event, Gadget, Type, ImageGadget) ; Обработка событий от кнопки
If Event=#PB_Event_Gadget And Gadget= 7
SetGadgetState(#Image_0, ImageID(2)) ; изображение при нажатии на кнопку
EndIf
If
Event=#PB_Event_Gadget And Gadget= 8
SetGadgetState(#Image_0, ImageID(3)) ; изображение при нажатии на кнопку
EndIf
If
Event=#PB_Event_Gadget And Gadget= 9
SetGadgetState(#Image_0, ImageID(4)) ; изображение при нажатии на кнопку
EndIf
If
Event=#PB_Event_Gadget And Gadget= 10
SetGadgetState(#Image_0, ImageID(5)) ; изображение при нажатии на кнопку
EndIf
If
Event=#PB_Event_Gadget And Gadget= 11
SetGadgetState(#Image_0, ImageID(6)) ; изображение при нажатии на кнопку
EndIf
EndProcedure


OpenWindow(#Window_0, 100, 100, 450, 280, "Заголовок", #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget| #PB_Window_ScreenCentered)
SetWindowColor(#Window_0, $ffffff) ;задаём цвет окна

ButtonGadget(7, 25, 25, 70, 25, "Кнопка 1")
ButtonGadget(8, 25, 65, 70, 25, "Кнопка 2")
ButtonGadget(9, 25, 105, 70, 25, "Кнопка 3")
ButtonGadget(10, 25, 145, 70, 25, "Кнопка 4")
ButtonGadget(11, 25, 185, 70, 25, "Кнопка 5")

ImageGadget(#Image_0, 295, 65, 175, 165, ImageID(1))

If CreateMenu(#Window_0, WindowID(0))
MenuTitle("Меню")
MenuItem(12, "Item 1")
MenuItem(13, "Item 2")
MenuItem(14, "Закрыть")
EndIf

Repeat
Event=WaitWindowEvent()
Gadget=EventGadget()

Select Event
; Case #PB_Event_Gadget
; Select EventGadget()
; Case 15
; в этой строчки событие для гаджета 15
; EndSelect


Case #PB_Event_Menu
Select EventMenu()
Case 14 ; для гаджета 14
Break ; закрыть программу
EndSelect
EndSelect


EventButton1(Event, Gadget, Type, 1) ; процедура
; EventButton2(Event, Gadget, Type, 1) ; процедура
; EventButton3(Event, Gadget, Type, 1) ; процедура


Until Event=#PB_Event_CloseWindow
End

DataSection
Im : IncludeBinary "img_1.png": ImEnd :
Im1: IncludeBinary "img_2.png": Im1End:
Im3: IncludeBinary "img_3.png": Im3End:
Im4: IncludeBinary "img_4.png": Im4End:
Im5: IncludeBinary "img_5.png": Im5End:
Im6: IncludeBinary "img_6.png": Im6End:
EndDataSection



Уроки PureBasic

Скачать исходники примеров

#

 

Используются технологии uCoz