Seite 1 von 1

StatusBar Resize Width

Verfasst: 16.02.2005 13:33
von Pelagio
:praise:
Ich habe im Archiv einen Beitrag gesucht der mir Klarheit über die Anpassung (Width) von
Statusbarfeldern an die Größenänderung des Fensters gibt.
Leider war die Ausbeute nicht sehr groß und schon gar nicht befriedigend.
Und so möcht ich dies Thema noch einmal aufgreifen.
Ich wollte in einem Fenster eine Statusbar mit drei Feldern, die mir allgemeine Informationen,
das Datum sowie die Uhrzeit anzeigen, generieren.
Vergrößere oder verkleinere ich nun das Fenster, so soll das Informationsfeld sich anpassen,
die beiden anderen Felder aber, verständlicherweise, ihre Größe behalten.
Von der Theorie zum Aufbau des Programms war alles klar nur der Befehl zur Anpassung der Statusbarfelder fehlt irgendwie.
Jetzt meine Frage:
Gibt es eine andere Möglichkeit oder gibt es (irgendwann ß) einen entsprechenden Befehl der es erlaubt die Statusbar entsprechend einzurichten.
Es sieht etwas seltsam aus wenn die Statusbar nur die Hälfte des Fensters ausfüllt.

Beispiel

Verfasst: 16.02.2005 15:46
von Pelagio
:allright:
Haha, ich habe eine Möglichkeit gefunden die Statusbar der jeweiligen Fenstergrösse anzupassen. Da ich weiß das sicherlich auch andere diesbezügliche Probleme haben, poste ich ein Beispielcode.

Code: Alles auswählen

Enumeration 
   #Window_0
   #StatusBar_0
   #Uhr
EndEnumeration
#WindowFlag.l = #PB_Window_MaximizeGadget | #PB_Window_MinimizeGadget | #PB_Window_SizeGadget | #PB_Window_SystemMenu |  #PB_Window_TitleBar | #PB_Window_ScreenCentered   
baseEvent.l
baseQuit.l

Procedure TimerProc()
   StatusBarText(#StatusBar_0, 2, FormatDate("%hh:%ii:%ss", Date()), #PB_StatusBar_Center)
   StatusBarText(#StatusBar_0, 1, FormatDate("%dd.%mm.%yyyy", Date()), #PB_StatusBar_Center) 
EndProcedure

Procedure Resize_StatusBar()
   KillTimer_(WindowID(#Window_0), #Uhr)
   FreeStatusBar(#StatusBar_0)
   If CreateStatusBar(#StatusBar_0, WindowID())
      AddStatusBarField(WindowWidth()-200) 
      AddStatusBarField(100)
      AddStatusBarField(100)
      TimerProc()
      SetTimer_(WindowID(#Window_0), #Uhr, 1000, @TimerProc())
   EndIf
   WindowEvent()
EndProcedure

If OpenWindow(#Window_0, 0, 0, 600, 400,  #WindowFlag, "Down-/Upload Tool")
   CreateStatusBar(#StatusBar_0, WindowID())
EndIf

Repeat
   baseEvent = WaitWindowEvent()
   Select baseEvent
      Case #PB_Event_CloseWindow
         baseQuit = 1
      Case #PB_Event_SizeWindow
         Resize_StatusBar()
   EndSelect  
Until (baseQuit = 1)

End

Verfasst: 16.02.2005 16:27
von Donald
hi,

start es mal und verkleiner das fenster mal in der breite, so es recht klein
wird. Bei mir wird dann mit einer fehlermeldung abgebrochen.

Verfasst: 16.02.2005 20:54
von Pelagio
Ja Donald, korrekt,

aber auch dies kann man auf unterschiedlicher Weise abfangen z.B folgend:

Code: Alles auswählen

Procedure Resize_StatusBar() 
   If (WindowWidth() > 300)
      KillTimer_(WindowID(#Window_0), #Uhr) 
      FreeStatusBar(#StatusBar_0) 
      If CreateStatusBar(#StatusBar_0, WindowID()) 
         AddStatusBarField(WindowWidth()-200) 
         AddStatusBarField(100) 
         AddStatusBarField(100) 
         TimerProc() 
         SetTimer_(WindowID(#Window_0), #Uhr, 1000, @TimerProc()) 
      EndIf 
      WindowEvent() 
   Endif
EndProcedure 
Ansonsten gibt es auf PureArea ein Beispiel: Minimieren und Maximieren eines Fensters erkennen