PureBasic
;
; ------------------------------------------------------------
;
;   PureBasic - BindEvent and  BindGadgetEvent example file
;
;    (c) Fantaisie Software
;
; ------------------------------------------------------------
;

; Давайте создадим настраиваемый Гаджет TrackBar с Гаджетами Canvas.


Procedure RepaintCanvas(x)
  ; Нарисуем Композицию на Канвасе, которая выглядит как TrackBar.  
  If StartDrawing( CanvasOutput(0) )
    Box(0,0,OutputWidth(),OutputHeight(),RGB($FF,$FF,$FF))
    DrawingMode(#PB_2DDrawing_Gradient)
    BackColor(RGB($40,$40,$40))
    FrontColor(RGB($DD,$DD,$DD))
    LinearGradient(0, 0, OutputWidth(), OutputHeight())
    Box(0,0,OutputWidth(),OutputHeight())
    DrawingMode(#PB_2DDrawing_Default)
    Box(x,0,OutputWidth()-x,OutputHeight(),RGB($FF,$FF,$FF))
    Box(x-3,0,5,OutputHeight(),RGB($00,$00,$00))
    StopDrawing()
  EndIf
  EndProcedure

Procedure OnLeftClick()
  ; Клик левой кнопкой мыши на Канвасе (который Canvas)
  RepaintCanvas( GetGadgetAttribute(0,#PB_Canvas_MouseX) )
EndProcedure

Procedure OnMouseMove()
  ; Клик левой кнопкой + перемещение мыши по Канвасу  
  If GetGadgetAttribute(0,#PB_Canvas_Buttons) & #PB_Canvas_LeftButton
    x = GetGadgetAttribute(0,#PB_Canvas_MouseX)
    If x < 0 : x = 0 : EndIf
    If x > GadgetWidth(0) : x = GadgetWidth(0) : EndIf
    RepaintCanvas( x )
  EndIf
EndProcedure

 ; Давайте откроем окно с Канвасом
If OpenWindow(0, 0, 0, 220, 40, "BindGadgetEvent", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  CanvasGadget(0, 10, 10, 200, 20)
  
  RepaintCanvas(50) ; Нарисуем на Канвасе и установим трекер на 50.
  
  BindGadgetEvent(0, @OnLeftClick(),#PB_EventType_LeftClick) ; Привязка к Канвасу события левый клик мыши.
  BindGadgetEvent(0, @OnMouseMove(),#PB_EventType_MouseMove) ; Привязка к Канвасу события передвижения мыши.
  
  Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf