Status bar field resize during form resize?

Just starting out? Need help? Post your questions and find answers here.
BackupUser
PureBasic Guru
PureBasic Guru
Posts: 16777133
Joined: Tue Apr 22, 2003 7:42 pm

Post by BackupUser »

Restored from previous forum. Originally posted by Fangbeast.

Is there any way to resize statut bar fields during a form resize? (So that it will look good). UpdateStatusBar() will plonk the bar down to the botom of the resized form but the field widths stay the same and it doesn't look quite right.

I've been on MSDN and seen all the avaliable Status bar variables and apparently fidl width resetting is not one of them.

Anyone know of another way?


We are Dyslexic of Borg, prepare to have your ass laminated!
BackupUser
PureBasic Guru
PureBasic Guru
Posts: 16777133
Joined: Tue Apr 22, 2003 7:42 pm

Post by BackupUser »

Restored from previous forum. Originally posted by freak.

Code: Select all

OpenWindow(0,0,0,200,200,#PB_Window_SystemMenu|#PB_Window_SizeGadget|#PB_Window_Screencentered, "StatusBar Test")

OldWidth = WindowWidth()  ; <- needed for resizing

Dim Fields.l(3) ; <- needed for resize, must be the number of Fields -1 (since it begins at 0)

hStatus.l = CreateStatusBar(1, WindowID())  ; <- Handle needed for SendMessage

  AddStatusBarField(50)         
  AddStatusBarField(20)
  AddStatusBarField(30)
  AddStatusBarField(100)

  StatusBarText(1, 0, "", #PB_StatusBar_Raised)
  StatusBarText(1, 1, "")
  StatusBarText(1, 2, "")
  StatusBarText(1, 3, "", #PB_StatusBar_Raised)

Repeat
  Select WaitWindowEvent()
    Case #WM_SIZE
    
      UpdateStatusBar(1) ; <- place StatusBar in the right place
      
      UseWindow(0)  ; <- make sure we use the right Window :)
      NewWidth = WindowWidth() ; <- get new width
      
      ; get sizes of all Fields
      SendMessage_(hStatus, #SB_GETPARTS, 4, @Fields() ) ; <- 4 is the number of Fields in the StatusBar
     
      ; resize fields...
      For i = 0 To 3 ;<- 3 is number of Fields-1, because Array goes from 0 to 3
        Fields(i) = Fields(i)* NewWidth / oldWidth
      Next i
      
      ; set new sizes
      SendMessage_(hStatus, #SB_SETPARTS, 4, @Fields() )      
      
      OldWidth = NewWidth ; <- new Width will be old next time
      
      
    Case #PB_EventCloseWindow
      End
  EndSelect


Hope that helps...

Timo



-------------------------------
http://freak.coolfreepages.com/
BackupUser
PureBasic Guru
PureBasic Guru
Posts: 16777133
Joined: Tue Apr 22, 2003 7:42 pm

Post by BackupUser »

Restored from previous forum. Originally posted by Fangbeast.

A right scholarly piece of code. I thank you, works beautifully. Now I can go and produce more code with bugs to fix (ROFL)


We are Dyslexic of Borg, prepare to have your ass laminated!
Post Reply