StatusBar Resize Width

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
Pelagio
Beiträge: 424
Registriert: 11.11.2004 17:52
Computerausstattung: AMD Ryzen 5 7600 6-Core Prozessor 3.80 GHz
16,0 GB Arbeitsspeicher
Windows 11 Pro Betriebssystem
Wohnort: Bremen

StatusBar Resize Width

Beitrag 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.
Benutzeravatar
Pelagio
Beiträge: 424
Registriert: 11.11.2004 17:52
Computerausstattung: AMD Ryzen 5 7600 6-Core Prozessor 3.80 GHz
16,0 GB Arbeitsspeicher
Windows 11 Pro Betriebssystem
Wohnort: Bremen

Beispiel

Beitrag 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
Benutzeravatar
Donald
Beiträge: 307
Registriert: 03.01.2005 02:21
Wohnort: Marl

Beitrag 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.
DONALD :D www.PureBasic-Donald.de gibt es im Moment nicht mehr
PureBasic - jaPBe - PureVisonXP - TailBite
Benutzeravatar
Pelagio
Beiträge: 424
Registriert: 11.11.2004 17:52
Computerausstattung: AMD Ryzen 5 7600 6-Core Prozessor 3.80 GHz
16,0 GB Arbeitsspeicher
Windows 11 Pro Betriebssystem
Wohnort: Bremen

Beitrag 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
Antworten