;
; ------------------------------------------------------------
;
; PureBasic - BindEvent and BindGadgetEvent example file
;
; (c) Fantaisie Software
;
; ------------------------------------------------------------
;
; Давайте создадим быструю Кнопку, которая генерирует событие, пока она нажата.
Global Gadget, Pressed.b, n
Global Min=-50, Max=50
; Изменяйте скорость здесь!
Global Delay=50 ; 50 ms
Procedure paint(canvas, state, text$)
; Рисунок Канвас как фальш-кнопка "+" и как фальш-кнопка "-"
Protected w, h
; Состояние: 0 = Нажата
; Состояние: Не 0 = Отпущена
If StartDrawing(CanvasOutput(canvas))
Box(0,0,31,31,$CFFFFC) ; Жёлтый фон
If state=0 ; Вверх
LineXY(0,31,31,31,$000000)
LineXY(31,0,31,31,$000000)
LineXY(0,0,31,0,$FFFFFF)
LineXY(0,0,0,31,$FFFFFF)
Else ;Вниз
LineXY(0,31,31,31,$FFFFFF)
LineXY(31,0,31,31,$FFFFFF)
LineXY(0,0,31,0,$000000)
LineXY(0,0,0,31,$000000)
EndIf
w=TextWidth(text$)
h=TextHeight(text$)
DrawText(16-w/2, 16-h/2, Text$, $000000, $CFFFFC)
StopDrawing()
EndIf
EndProcedure
Procedure OnSpeedButtonEvent()
; Привязать все кнопки "-" к событиям и все кнопки "+" к событиям.
Gadget = EventGadget()
Select EventType() ; Какое событие?
Case #PB_EventType_MouseEnter
If Gadget=0
Debug "Наведено на кнопку -"
ElseIf Gadget=1
Debug "Наведено на кнопку +"
EndIf
Case #PB_EventType_MouseLeave
If Gadget=0
Debug "Убрано с кнопки -"
ElseIf Gadget=1
Debug "Убрано с кнопки +"
EndIf
; Каждый раз при нажатии левой кнопки мыши.
Case #PB_EventType_LeftButtonDown
Pressed = #True
Select Gadget
Case 0 ; Кнопка "-"
paint(0,1,"-") ; Нарисованная Кнопка"-" Нажата
Case 1 ; Кнопка "+"
paint(1,1,"+") ; Нарисованная Кнопка "+" Нажата
EndSelect
Case #PB_EventType_LeftButtonUp
Pressed = #False
paint(0,0,"-") ; Нарисованная Кнопка "-" Отпущена
paint(1,0,"+") ; Нарисованная Кнопка "+" Отпущена
EndSelect
EndProcedure
Procedure OnTimer()
If Pressed ; Каждый раз, когда на кнопку нажимают левой кнопкой мыши и пока она нажата.
Select Gadget
Case 0 ; Кнопка "-"
If n>Min
n-1
SetGadgetState(2, GetGadgetState(2)-1) ; Прогресс вниз
EndIf
Case 1 ; Кнопка "+"
If n<Max
n+1
SetGadgetState(2, GetGadgetState(2)+1) ; Прогресс вверх
EndIf
EndSelect
Debug n
EndIf
EndProcedure
; Откроем окно с некоторыми Гаджетами.
OpenWindow(0, 0, 0, 400, 100, "Кликайте долго, пожалуйста, на +/- ;)", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
CanvasGadget(0, 10, 30, 32, 32) ; Фальш-Кнопка -
CanvasGadget(1, 400-32-10, 30, 32, 32) ; Фальш-Кнопка +
paint(0,0,"-")
paint(1,0,"+")
ProgressBarGadget(2,52,30,296,32,Min,Max,#PB_ProgressBar_Smooth)
AddWindowTimer(0, 100, Delay) ; Таймер 100 ms
BindGadgetEvent(0, @OnSpeedButtonEvent()) ; Привязать все кнопки "-" к событиям
BindGadgetEvent(1, @OnSpeedButtonEvent()) ; Привязать все кнопки "+" к событиям
BindEvent(#PB_Event_Timer, @OnTimer()) ; Привязать таймер к событиям
Repeat : Until WaitWindowEvent(10) = #PB_Event_CloseWindow