Maximale Fenstergröße berechnen (OpenWindow)
Maximale Fenstergröße berechnen (OpenWindow)
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
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
Wir sind LINUX
Widerstand ist zwecklos - Sie werden emuliert
Widerstand ist zwecklos - Sie werden emuliert
Re: Maximale Fenstergröße berechnen (OpenWindow)
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?
Warum nutzt du nicht #PB_Window_Maximize?
Re: Maximale Fenstergröße berechnen (OpenWindow)
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
Nur, was gebe ich dann für die beiden Parameter Höhe und Breite an?
Gruß
Daffy
Wir sind LINUX
Widerstand ist zwecklos - Sie werden emuliert
Widerstand ist zwecklos - Sie werden emuliert
Re: Maximale Fenstergröße berechnen (OpenWindow)
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.
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.
- ts-soft
- Beiträge: 22292
- Registriert: 08.09.2004 00:57
- Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel - Wohnort: Berlin
Re: Maximale Fenstergröße berechnen (OpenWindow)
Code: Alles auswählen
OpenWindow(0, 0, 0, 0, 0, "", #PB_Window_Maximize)
While WaitWindowEvent() <> #PB_Event_CloseWindow : WendPureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Re: Maximale Fenstergröße berechnen (OpenWindow)
So "einfach" ist es leider nicht!
Muss jetzt erst mal was essen.
Werde später mal ein Beispiel posten.
Gruß
Daffy
Muss jetzt erst mal was essen.
Werde später mal ein Beispiel posten.
Gruß
Daffy
Wir sind LINUX
Widerstand ist zwecklos - Sie werden emuliert
Widerstand ist zwecklos - Sie werden emuliert
Re: Maximale Fenstergröße berechnen (OpenWindow)
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:
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
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
Wir sind LINUX
Widerstand ist zwecklos - Sie werden emuliert
Widerstand ist zwecklos - Sie werden emuliert
Re: Maximale Fenstergröße berechnen (OpenWindow)
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:
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
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Re: Maximale Fenstergröße berechnen (OpenWindow)
@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:
Gruß
Daffy
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
Wir sind LINUX
Widerstand ist zwecklos - Sie werden emuliert
Widerstand ist zwecklos - Sie werden emuliert
Re: Maximale Fenstergröße berechnen (OpenWindow)
@Daffy0815
http://www.rsbasic.de/aktualisierung/wi ... mitteln.pb
Also:
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

