Seite 1 von 2
Maximale Fenstergröße berechnen (OpenWindow)
Verfasst: 19.07.2013 20:44
von Daffy0815
Hallo Leute,
die Funktion "OpenWindow" hat die beiden Parameter "InnereBreite" und "InnereHoehe".
Die maximale Höhe und Breite des gesamten Desktops also "ÄußereBreite" und "ÄußereHoehe" lässt sich mit "ExamineDesktops()" gefolgt von "DesktopHeight" und "DesktopWidth" bestimmen.
Wie kann man "InnereHoehe" und "InnereBreite" so berechnen, dass das mit "OpenWindow" zu öffnende Fenster immer den maximalen Raum auf dem Desktop einnimmt?
Hierbei soll auch der Platz berücksichtigt werden den, falls vorhanden, die Taskleiste beansprucht.
Gruß
Daffy
Re: Maximale Fenstergröße berechnen (OpenWindow)
Verfasst: 19.07.2013 20:46
von RSBasic
Hm, ich weiß nicht, ob ich dich richtig verstanden habe, aber du möchtest du ein maximiertes Fenster haben oder?
Warum nutzt du nicht #PB_Window_Maximize?
Re: Maximale Fenstergröße berechnen (OpenWindow)
Verfasst: 19.07.2013 20:48
von Daffy0815
Nun, in die Richtung habe ich auch schon gedacht!
Nur, was gebe ich dann für die beiden Parameter Höhe und Breite an?
Gruß
Daffy
Re: Maximale Fenstergröße berechnen (OpenWindow)
Verfasst: 19.07.2013 20:57
von RSBasic
Wenn dein Fenster in der Größe nicht änderbar sein soll, dann ist es egal.
Aber wenn der Benutzer die Fenstergröße jederzeit ändern kann, dann nimm irgendeine optimale Größe, die zu deinem Fensterlayout passt. Beispielsweise 500x400 oder so.
Die Gadgets, die du hast, müssen ja eh beim Resize-Event angepasst werden, von daher denk dir einfach irgendeine Größe aus.
Re: Maximale Fenstergröße berechnen (OpenWindow)
Verfasst: 19.07.2013 21:01
von ts-soft
Code: Alles auswählen
OpenWindow(0, 0, 0, 0, 0, "", #PB_Window_Maximize)
While WaitWindowEvent() <> #PB_Event_CloseWindow : Wend
Grösser braucht es nicht sein

Re: Maximale Fenstergröße berechnen (OpenWindow)
Verfasst: 19.07.2013 21:08
von Daffy0815
So "einfach" ist es leider nicht!
Muss jetzt erst mal was essen.
Werde später mal ein Beispiel posten.
Gruß
Daffy
Re: Maximale Fenstergröße berechnen (OpenWindow)
Verfasst: 20.07.2013 00:16
von Daffy0815
So, nun mit Beispiel.
Ziel der Aktion soll sein ein Fenster mit Texten, Buttons etc. zu erzeugen welches unabhängig von der Größe des Desktops durch automatische Auswahl der Textgrößen und damit natürlich auch der Buttongrößen immer vollständig dargestellt wird.
Die bei vielen Programmen zu beobachtende Unart von abgeschnitten Texten oder noch schlimmer nicht mehr erreichbaren Buttons soll damit verhindert werden.
Hierzu ist natürlich die genaue Kenntnis des zur Verfügung stehenden Platzes eine Grundvoraussetzung!
Nach dem ich keinen Weg gefunden hatte diesen zu berechnen BEVOR das Fenster geöffnet wird habe ich den hier vorgeschlagenen Weg beschritten und dann versucht den Platz nach dem Öffnen des Fensters zu bestimmen.
Das funktioniert jedoch auch nicht!
Hier das Beispiel:
Code: Alles auswählen
MainWindow.i = OpenWindow(#PB_Any, 1, 1, 0, 0, "WindowName", #PB_Window_TitleBar | #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_SizeGadget | #PB_Window_Maximize)
If MainWindow.i
Global MaxWidth.i = WindowWidth(MainWindow.i, #PB_Window_InnerCoordinate)
Global MaxHeight.i = WindowHeight(MainWindow.i, #PB_Window_InnerCoordinate)
Debug "MaxBreite="+Str(MaxWidth.i)
Debug "MaxHöhe="+Str(MaxHeight.i)
Menu1.i = CreateMenu(#PB_Any, WindowID(MainWindow.i))
If Menu1.i
MenuTitle("Menu1")
MenuItem(1, "Item1" +Chr(9)+"Ctrl+O")
MenuItem(2, "Item2" +Chr(9)+"Ctrl+S")
MenuItem(3, "Item3" +Chr(9)+"Ctrl+A")
MenuItem(4, "Item4" +Chr(9)+"Ctrl+C")
MenuTitle("Menu2")
MenuItem(1, "Item1" +Chr(9)+"Ctrl+O")
MenuItem(2, "Item2" +Chr(9)+"Ctrl+S")
MenuItem(3, "Item3" +Chr(9)+"Ctrl+A")
MenuItem(4, "Item4" +Chr(9)+"Ctrl+C")
EndIf
Repeat
Event.i = WaitWindowEvent()
If Event.i = #PB_Event_CloseWindow
Quit.i = 1
EndIf
Until Quit.i = 1
EndIf
End
Da ich meinen Monitor derzeit mit 1600 X 1200 Punkten betreibe hätte ich eine Ausgabe im Debug-Fenster erwartet die so in etwa wie folgt ausgesehen hätte:
MaxBreite=1590 (1600 - 2 X Breite des Rahmens)
MaxHöhe=1080 (1200 - 2 X Breite des Rahmens - Höhe der Taskleiste - Höhe der Titelzeile)
Tatsächlich kommt aber im Beispiel
MaxBreite=1600
MaxHöhe=1151
Und das kann ja wohl (insbesondere bei der Breite) auf keinen Fall stimmen!
Hat jemand eine Idee wie man die PIXELGENAUE Freifläche innerhalb eines Fensters berechnen kann?
Gruß
Daffy
Re: Maximale Fenstergröße berechnen (OpenWindow)
Verfasst: 20.07.2013 02:31
von STARGÅTE
Ein Maximiertes Fenster hat keinen Rahmen, das heißt der innere benutzbare Pixel ist genau bei 0 (in X-Richtung betrachtet, bei Y kommt ja noch der Titel hinzu. Das heißt, die Rückgabe stimmt schon von der Breite
Wenn dein Fenster ein Rahmen haben soll, dann zB so:
Code: Alles auswählen
Enumeration
#Window_Fake
EndEnumeration
ExamineDesktops()
OpenWindow(#Window_Fake, 0, 0, 100, 100, "", #PB_Window_Invisible|#PB_Window_SystemMenu|#PB_Window_SizeGadget)
Define UsableWidth.i = DesktopWidth(0) - (WindowWidth(#Window_Fake, #PB_Window_FrameCoordinate)-WindowWidth(#Window_Fake, #PB_Window_InnerCoordinate))
Define UsableHeight.i = DesktopHeight(0) - (WindowHeight(#Window_Fake, #PB_Window_FrameCoordinate)-WindowHeight(#Window_Fake, #PB_Window_InnerCoordinate))
CloseWindow(#Window_Fake)
Debug UsableWidth
Debug UsableHeight
OpenWindow(#PB_Any, 0, 0, UsableWidth, UsableHeight, "", #PB_Window_SystemMenu|#PB_Window_SizeGadget)
Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
1904
1042
Re: Maximale Fenstergröße berechnen (OpenWindow)
Verfasst: 20.07.2013 14:27
von Daffy0815
@Stargate
Danke für den Tipp.
Leider funktioniert er nur für die Breite.
Die Taskleiste wird nämlich nicht berücksichtigt.
Hier das geänderte Beispiel:
Code: Alles auswählen
Enumeration
#WindowTest
#WindowMain
EndEnumeration
Enumeration
#MenuMain
EndEnumeration
ExamineDesktops()
OpenWindow(#WindowTest, 0, 0, 100, 100, "", #PB_Window_Invisible|#PB_Window_SystemMenu|#PB_Window_SizeGadget)
Global MaxWidth.i = DesktopWidth(0) - (WindowWidth(#WindowTest, #PB_Window_FrameCoordinate)-WindowWidth(#WindowTest, #PB_Window_InnerCoordinate))
Global MaxHeight.i = DesktopHeight(0) - (WindowHeight(#WindowTest, #PB_Window_FrameCoordinate)-WindowHeight(#WindowTest, #PB_Window_InnerCoordinate))
CloseWindow(#WindowTest)
Debug "MaxBreite="+Str(MaxWidth.i)
Debug "MaxHöhe="+Str(MaxHeight.i)
;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
MaxHeight.i=MaxHeight.i-34
;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
OpenWindow(#WindowMain, 0, 0, MaxWidth.i, MaxHeight.i, "WindowName", #PB_Window_TitleBar | #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_SizeGadget)
CreateMenu(#MenuMain, WindowID(#WindowMain))
MenuTitle("Menu1")
MenuItem(1, "Item1" +Chr(9)+"Ctrl+O")
MenuItem(2, "Item2" +Chr(9)+"Ctrl+S")
MenuItem(3, "Item3" +Chr(9)+"Ctrl+A")
MenuItem(4, "Item4" +Chr(9)+"Ctrl+C")
MenuTitle("Menu2")
MenuItem(1, "Item1" +Chr(9)+"Ctrl+O")
MenuItem(2, "Item2" +Chr(9)+"Ctrl+S")
MenuItem(3, "Item3" +Chr(9)+"Ctrl+A")
MenuItem(4, "Item4" +Chr(9)+"Ctrl+C")
Repeat
Event.i = WaitWindowEvent()
If Event.i = #PB_Event_CloseWindow
Quit.i = 1
EndIf
Until Quit.i = 1
End
Gruß
Daffy
Re: Maximale Fenstergröße berechnen (OpenWindow)
Verfasst: 20.07.2013 14:30
von RSBasic
@Daffy0815
http://www.rsbasic.de/aktualisierung/wi ... mitteln.pb
Also:
Code: Alles auswählen
;Bitte zukünftig EnableExplicit nutzen
Define TaskBarHeight
Define DesktopWorkArea.RECT
Enumeration
#WindowTest
#WindowMain
EndEnumeration
Enumeration
#MenuMain
EndEnumeration
ExamineDesktops()
OpenWindow(#WindowTest, 0, 0, 100, 100, "", #PB_Window_Invisible|#PB_Window_SystemMenu|#PB_Window_SizeGadget)
Global MaxWidth.i = DesktopWidth(0) - (WindowWidth(#WindowTest, #PB_Window_FrameCoordinate)-WindowWidth(#WindowTest, #PB_Window_InnerCoordinate))
Global MaxHeight.i = DesktopHeight(0) - (WindowHeight(#WindowTest, #PB_Window_FrameCoordinate)-WindowHeight(#WindowTest, #PB_Window_InnerCoordinate))
CloseWindow(#WindowTest)
Debug "MaxBreite="+Str(MaxWidth.i)
Debug "MaxHöhe="+Str(MaxHeight.i)
;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
SystemParametersInfo_(#SPI_GETWORKAREA, 0, @DesktopWorkArea.RECT, 0)
TaskBarHeight = GetSystemMetrics_(#SM_CYSCREEN) - DesktopWorkArea\Bottom
MaxHeight.i=MaxHeight.i - TaskBarHeight
;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
OpenWindow(#WindowMain, 0, 0, MaxWidth.i, MaxHeight.i, "WindowName", #PB_Window_TitleBar | #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_SizeGadget)
CreateMenu(#MenuMain, WindowID(#WindowMain))
MenuTitle("Menu1")
MenuItem(1, "Item1" +Chr(9)+"Ctrl+O")
MenuItem(2, "Item2" +Chr(9)+"Ctrl+S")
MenuItem(3, "Item3" +Chr(9)+"Ctrl+A")
MenuItem(4, "Item4" +Chr(9)+"Ctrl+C")
MenuTitle("Menu2")
MenuItem(1, "Item1" +Chr(9)+"Ctrl+O")
MenuItem(2, "Item2" +Chr(9)+"Ctrl+S")
MenuItem(3, "Item3" +Chr(9)+"Ctrl+A")
MenuItem(4, "Item4" +Chr(9)+"Ctrl+C")
Repeat
Event.i = WaitWindowEvent()
If Event.i = #PB_Event_CloseWindow
Quit.i = 1
EndIf
Until Quit.i = 1
End