Use Statusbar with `OpenWindowedScreen ( )`?

Just starting out? Need help? Post your questions and find answers here.
Mythros
Enthusiast
Enthusiast
Posts: 306
Joined: Mon Aug 19, 2013 3:28 pm

Use Statusbar with `OpenWindowedScreen ( )`?

Post by Mythros »

Hi all! Is it possible to use `StatusBar` with `OpenWindowedScreen ( )` ?

I tried & it won't show up until having removed the `OpenWindowedScreen ( )`

Only problem is : I need `OpenWindowedScreen ( )` so the user can push the Escape key to exit the program.

Any help is GREATLY appreciated!

Thank You! <3
RASHAD
PureBasic Expert
PureBasic Expert
Posts: 4664
Joined: Sun Apr 12, 2009 6:27 am

Re: Use Statusbar with `OpenWindowedScreen ( )`?

Post by RASHAD »

Hi
No problem here
Check the height of the WindowedScreen it may cover the area of statusbar
PB 5.72 x86 - Windows 10 x64

Code: Select all

If InitSprite() = 0 Or InitKeyboard() = 0 Or InitMouse() = 0
  MessageRequester("Error", "Can't open the sprite system", 0)
  End
EndIf

If OpenWindow(0, 0, 0, 600, 400, "Gadget and sprites!", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  ButtonGadget(1, 10,  10, 100, 25, "Grab input")
  ButtonGadget(2, 120,  10, 100, 25, "Button 2")
  ButtonGadget(3, 230,  10, 100, 25, "Button 3")
  TextGadget  (4, 10, 40, 300, 30, "Mouse and keyboard released")
 
  If CreateStatusBar(0, WindowID(0))
    AddStatusBarField(200)
    AddStatusBarField(150)
    AddStatusBarField(100)
  EndIf

  StatusBarText(0, 0, "Area 1")
  StatusBarText(0, 1, "Area 2", #PB_StatusBar_BorderLess)
  StatusBarText(0, 2, "Area 3", #PB_StatusBar_Right | #PB_StatusBar_Raised)
  
  wwheight = WindowHeight(0)-GadgetY(4)-GadgetHeight(4)- 10 - StatusBarHeight(0)

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

    direction = 1
    playerX = 1
    playerY = 1
   
    ; Start with released input
    ReleaseMouse(#True)
    InputReleased = 1
   
    Repeat
      Repeat
        ; Always process all the events to flush the queue at every frame
        Event = WindowEvent()
       
        Select Event
          Case #PB_Event_CloseWindow
            Quit = 1
       
          Case #PB_Event_Gadget
           
            ; Do the normal application management here
            Gadget = EventGadget()
       
            Select Gadget
              Case 1
                InputReleased = 0
                ReleaseMouse(#False)
                SetGadgetText(4, "Press 'F1' to ungrab keyboard and mouse")
   
              Case 2 , 3
                StatusBarText(0, 0, "Button "+Str(Gadget)+" pressed.",#PB_StatusBar_Raised)             

            EndSelect
       
        EndSelect
       
      Until Event = 0 ; Quit the event loop only when no more events are available
     
      ExamineKeyboard()
     
      If InputReleased = 0
   
        ExamineMouse()
   
        ; do the sprite & screen management at every frame
        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, "Mouse and keyboard released");
        EndIf
      EndIf
     
      ; Clear the screen and draw our sprites
      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   ; moving back to the left with negative value
      If x < 0   : direction =  1 : EndIf   ; moving to the right with positive value
       
      FlipBuffers()       ; Inverse the buffers (the back become the front (visible)... and we can do the rendering on the back
   
    Until  Quit Or KeyboardPushed(#PB_Key_Escape)
  Else
    MessageRequester("Error", "Can't open windowed screen!", 0)
  EndIf
EndIf

Edit : Updated
Last edited by RASHAD on Sat May 23, 2020 3:01 am, edited 1 time in total.
Egypt my love
User avatar
mk-soft
Always Here
Always Here
Posts: 5409
Joined: Fri May 12, 2006 6:51 pm
Location: Germany

Re: Use Statusbar with `OpenWindowedScreen ( )`?

Post by mk-soft »

You don't need OpenScreenWindow ...

Code: Select all

;-TOP

Enumeration Windows
  #Main
EndEnumeration

Enumeration Menu
  #MenuBar
EndEnumeration

Enumeration MenuItems
  #MenuExit
EndEnumeration

Enumeration Gadgets
  
EndEnumeration

Enumeration Status
  #MainStatusBar
EndEnumeration

Procedure Main()
  
  #MainStyle = #PB_Window_SystemMenu | #PB_Window_MaximizeGadget | #PB_Window_MinimizeGadget
  
  If OpenWindow(#Main, #PB_Ignore, #PB_Ignore, 800, 600, "Window" , #MainStyle)
    CreateMenu(#MenuBar, WindowID(#Main))
    
    AddKeyboardShortcut(#Main, #PB_Shortcut_Escape, #MenuExit)
    
    CreateStatusBar(#MainStatusBar, WindowID(#Main))
    AddStatusBarField(#PB_Ignore)
    StatusBarText(#MainStatusBar, 0, "Press Escape to exit program")
    
    Repeat
      Select WaitWindowEvent()
        Case #PB_Event_CloseWindow
          Break
        Case #PB_Event_Menu
          Select EventMenu()
            Case #MenuExit
              Break
          EndSelect
      
      EndSelect
      
    ForEver
    
  EndIf
  
EndProcedure : Main()
My Projects ThreadToGUI / OOP-BaseClass / EventDesigner V3
PB v3.30 / v5.75 - OS Mac Mini OSX 10.xx - VM Window Pro / Linux Ubuntu
Downloads on my Webspace / OneDrive
Mythros
Enthusiast
Enthusiast
Posts: 306
Joined: Mon Aug 19, 2013 3:28 pm

Re: Use Statusbar with `OpenWindowedScreen ( )`?

Post by Mythros »

Thanks! That worked! How can I get the height of the windowed screen to take up the whole window between the file menu & the statusbar menu? I don't want to use a hard-coded height.

Thank You! <3
RASHAD
PureBasic Expert
PureBasic Expert
Posts: 4664
Joined: Sun Apr 12, 2009 6:27 am

Re: Use Statusbar with `OpenWindowedScreen ( )`?

Post by RASHAD »

First post updated
It depends on your GUI design
You have all needed functions to calculate it including StatusBarHeight(?)

But if you need WindowedScreen only to use Esc key it is better to use mk-soft snippet
Egypt my love
Mythros
Enthusiast
Enthusiast
Posts: 306
Joined: Mon Aug 19, 2013 3:28 pm

Re: Use Statusbar with `OpenWindowedScreen ( )`?

Post by Mythros »

Which code snippet?
User avatar
Kuron
Addict
Addict
Posts: 1626
Joined: Sat Oct 17, 2009 10:51 pm
Location: Pacific Northwest

Re: Use Statusbar with `OpenWindowedScreen ( )`?

Post by Kuron »

Mythros wrote:Which code snippet?
This one.
Best wishes to the PB community. Thank you for the memories. ♥️
User avatar
mrv2k
User
User
Posts: 51
Joined: Fri Jan 20, 2012 3:40 pm
Location: SE England
Contact:

Re: Use Statusbar with `OpenWindowedScreen ( )`?

Post by mrv2k »

If you just have a statusbar and a menu use...

Code: Select all

WindowHeight(#WINDOW) - StatusBarHeight(#STATUSBAR) - MenuHeight()
Mythros
Enthusiast
Enthusiast
Posts: 306
Joined: Mon Aug 19, 2013 3:28 pm

Re: Use Statusbar with `OpenWindowedScreen ( )`?

Post by Mythros »

Thanks for all of your help, guys! <3
Post Reply