PureBasic
;
; ------------------------------------------------------------
;
;   PureBasic - Windowed Screen example file
;
;    (c) Fantaisie Software
;
; ------------------------------------------------------------
;

If InitSprite() = 0 Or InitKeyboard() = 0 Or InitMouse() = 0
  MessageRequester("Ошибка", "Не могу открыть спрайт-систему", 0)
  End
EndIf

If OpenWindow(0, 0, 0, 340, 285, "Гаджет и спрайты!", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  ButtonGadget(1, 10,  10, 100, 25, "Захватить ввод")
  ButtonGadget(2, 120,  10, 100, 25, "Кнопка 2")
  ButtonGadget(3, 230,  10, 100, 25, "Кнопка 3")
  TextGadget  (4, 10, 40, 300, 30, "Мышь и клавиатура отпущены")

  If OpenWindowedScreen(WindowID(0), 10, 70, 320, 200, 0, 0, 0)
    LoadSprite(0, #PB_Compiler_Home + "examples/sources/Data/PureBasicLogo.bmp")

    direction = 1
    playerX = 1
    playerY = 1
    
    ; Начните с освобожденного ввода
    ReleaseMouse(#True)
    InputReleased = 1
    
    Repeat
      Repeat
        ; Всегда обрабатывать все события, чтобы очистить очередь в каждом кадре
        Event = WindowEvent()
        
        Select Event
          Case #PB_Event_CloseWindow
            Quit = 1
        
          Case #PB_Event_Gadget
            
            ; Нормальное управление приложениями здесь
            Gadget = EventGadget()
        
            Select Gadget
              Case 1
                InputReleased = 0
                ReleaseMouse(#False)
                SetGadgetText(4, "Нажмите 'F1', чтобы убрать клавиатуру и мышь")
    
              Case 2, 3
                SetGadgetText(4, "кнопка "+Str(Gadget)+" нажата.")
            EndSelect
        
        EndSelect
        
      Until Event = 0 ; Выходите из цикла событий, только когда больше нет доступных событий
      
      ExamineKeyboard()
      
      If InputReleased = 0
    
        ExamineMouse()
    
        ; выполнение управления спрайтами и экранами в каждом кадре
        If KeyboardPushed(#PB_Key_Up)    And playerY > 0   : playerY -3 : EndIf  
        If KeyboardPushed(#PB_Key_Down)  And playerY < 280 : playerY +3 : EndIf  
        If KeyboardPushed(#PB_Key_Left)  And playerX > 0   : playerX -3 : EndIf  
        If KeyboardPushed(#PB_Key_Right) And playerX < 300 : playerX +3 : EndIf  
    
        If KeyboardPushed(#PB_Key_F1)
          ReleaseMouse(#True)
          InputReleased = 1
          SetGadgetText(4, "Мышь и клавиатура отпущены");
        EndIf
      EndIf
      
      ; Очистим экран и нарисуем наши спрайты
      ClearScreen(RGB(0,0,0))
      ClipSprite(0, 0, 0, x, x/8)
      DisplaySprite(0, x, 100)
      DisplaySprite(0, x, x)
      DisplaySprite(0, 300-x, x)
      DisplaySprite(0, playerX, playerY)
    
      x + direction
      If x > 300 : direction = -1 : EndIf   ; возвращаясь влево с отрицательным значением
      If x < 0   : direction =  1 : EndIf   ; двигаясь вправо с положительным значением
        
      FlipBuffers()       ; Инвертируем буферы (задняя часть становится передней (видимой) ... и мы можем сделать рендеринг на обратной стороне
    
    Until  Quit Or KeyboardPushed(#PB_Key_Escape)
  Else
    MessageRequester("Ошибка", "Не могу открыть оконный экран!", 0)
  EndIf
EndIf
������