#PB_Window_InnerCoordinate

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
Josh
Beiträge: 1028
Registriert: 04.08.2009 17:24

#PB_Window_InnerCoordinate

Beitrag von Josh »

Entweder ist WindowHeight mit der Konstante #PB_Window_InnerCoordinate vollkommen verbugt oder mir entzieht sich der tiefere Sinn.

Schaut euch mal das folgende Beispiel an. WindowY bring im Gegensatz zu WindowHeight logische Ergebnisse. Die in Klammer gesetzten Werte sind die Höhen, mit denen die Fenster geöffnet wurden.

Code: Alles auswählen

  Define msg.s

  OpenWindow (0, 200, 200, 200, 15, "Win 0")
  OpenWindow (1, 500, 200, 200, 15, "Win 1")
  OpenWindow (2, 200, 300, 200, 30, "Win 2")
  OpenWindow (3, 500, 300, 200, 30, "Win 3")
  OpenWindow (4, 200, 400, 200, 45, "Win 4")
  OpenWindow (5, 500, 400, 200, 45, "Win 5")

  CreateMenu(0, WindowID(0))
  MenuTitle("File")

  CreateMenu(2, WindowID(2))
  MenuTitle("File")

  CreateMenu(4, WindowID(4))
  MenuTitle("File")
  MenuTitle("File")
  MenuTitle("File")
  MenuTitle("File")
  MenuTitle("File")
  MenuTitle("File")
  MenuTitle("File")
  MenuTitle("File")
  MenuTitle("File")
  MenuTitle("File")
  MenuTitle("File")

  SetWindowTitle (0, "H=" + WindowHeight (0, #PB_Window_InnerCoordinate) + "(15)   Y=" + WindowY (0, #PB_Window_InnerCoordinate))
  SetWindowTitle (1, "H=" + WindowHeight (1, #PB_Window_InnerCoordinate) + "(15)   Y=" + WindowY (1, #PB_Window_InnerCoordinate))
  SetWindowTitle (2, "H=" + WindowHeight (2, #PB_Window_InnerCoordinate) + "(30)   Y=" + WindowY (2, #PB_Window_InnerCoordinate))
  SetWindowTitle (3, "H=" + WindowHeight (3, #PB_Window_InnerCoordinate) + "(30)   Y=" + WindowY (3, #PB_Window_InnerCoordinate))
  SetWindowTitle (4, "H=" + WindowHeight (4, #PB_Window_InnerCoordinate) + "(45)   Y=" + WindowY (4, #PB_Window_InnerCoordinate))
  SetWindowTitle (5, "H=" + WindowHeight (5, #PB_Window_InnerCoordinate) + "(45)   Y=" + WindowY (5, #PB_Window_InnerCoordinate))

  Repeat
  Until WaitWindowEvent () = #PB_Event_CloseWindow
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8838
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Re: #PB_Window_InnerCoordinate

Beitrag von NicTheQuick »

Wieso? Das ist doch korrekt. Bei mir steht vor den Klammern das selbe wie in den Klammern. Eben die Fensterhöhe ohne Rahmen inklusive Menü, Standard eben, also das selbe wie ohne Flag und wie es schon immer war. Nutzt du allerdings '#PB_Window_FrameCoordinate' für 'WindowHeight()', dann kriegst du die Höhe inklusive Rahmen.

Getestet unter Linux.
Benutzeravatar
Josh
Beiträge: 1028
Registriert: 04.08.2009 17:24

Re: #PB_Window_InnerCoordinate

Beitrag von Josh »

Ups, hätte ich besser unter Windows posten sollen. Ich bekomme folgende Werte:

Fenstern mit Menü (falsch):
20(15)
30(30)
26(45)

Fenster ohne Menü (richtig):
15(15)
30(30)
45(45)

Die richtigen Ergebnisse mit Menü müssten sein:
0(15)
10(30)
6(45)

So sind die Werte unbrauchbar. Warum ich da jetzt 1x MenuHeight abziehen soll ergibt überhaupt keinen Sinn und ist gegenüber WindowY vollkommen inkonsequent. Werde wieder mal auf die API's zurückgreifen.
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8838
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Re: #PB_Window_InnerCoordinate

Beitrag von NicTheQuick »

Bezüglich 'WindowY()' mit '#PB_Window_InnerCoordinate'. Das gibt bei mir mit oder ohne Menüzeile das selbe aus. Also obere linke Ecke des Clientbereichs.

Dass man 'MenuHeight()' abziehen muss, ist schon immer so und klar dokumentiert laut Hilfe. Dass es unter Windows nicht richtig funktioniert, ist dann allerdings ein Bug, da hast du Recht.

Lustig ist unter Linux aber auch, dass die Menüzeile nicht umbricht, wenn sie breiter wird als das Fenster. Ich glaube unter Windows ist das so, oder?
Benutzeravatar
Josh
Beiträge: 1028
Registriert: 04.08.2009 17:24

Re: #PB_Window_InnerCoordinate

Beitrag von Josh »

NicTheQuick hat geschrieben:Bezüglich 'WindowY()' mit '#PB_Window_InnerCoordinate'. Das gibt bei mir mit oder ohne Menüzeile das selbe aus. Also obere linke Ecke des Clientbereichs.
WindowY gibt unter OS Win den Wert unter der Menüzeile aus, berücksichtigt also im Gegensatz zu WindowHeight die Höhe des Menüs.
NicTheQuick hat geschrieben:Dass man 'MenuHeight()' abziehen muss, ist schon immer so und klar dokumentiert laut Hilfe. Dass es unter Windows nicht richtig funktioniert, ist dann allerdings ein Bug, da hast du Recht.
Ich finde da nichts dokumentiertes. In meiner Hilfe steht unter WindowHeight kein Wort davon.
NicTheQuick hat geschrieben:Lustig ist unter Linux aber auch, dass die Menüzeile nicht umbricht, wenn sie breiter wird als das Fenster. Ich glaube unter Windows ist das so, oder?
Windows bricht die Menüzeile um, also wird das Menü höher. Trotzdem muss ich den Wert MenuHeight abziehen. Lustigerweise hat MenuHeight dann überhaupt nichts mit der wirklichen Menühöhe zu tun.

---------------------------------------------

Schade ist nur, dass dieses komplett abwegige Verhalten nicht mit Einführung von #PB_Window_InnerCoordinate korrigiert wurde. Dies wäre eine einmalige Gelegenheit gewesen um gegen früheren Versionen noch kompatibel zu bleiben.
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8838
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Re: #PB_Window_InnerCoordinate

Beitrag von NicTheQuick »

Josh hat geschrieben:
NicTheQuick hat geschrieben:Lustig ist unter Linux aber auch, dass die Menüzeile nicht umbricht, wenn sie breiter wird als das Fenster. Ich glaube unter Windows ist das so, oder?
Windows bricht die Menüzeile um, also wird das Menü höher. Trotzdem muss ich den Wert MenuHeight abziehen. Lustigerweise hat MenuHeight dann überhaupt nichts mit der wirklichen Menühöhe zu tun.
Achsoooo! :o

Das macht nun wirklich keinen Sinn. <)
Benutzeravatar
Josh
Beiträge: 1028
Registriert: 04.08.2009 17:24

Re: #PB_Window_InnerCoordinate

Beitrag von Josh »

NicTheQuick hat geschrieben:
Josh hat geschrieben:
NicTheQuick hat geschrieben:Lustig ist unter Linux aber auch, dass die Menüzeile nicht umbricht, wenn sie breiter wird als das Fenster. Ich glaube unter Windows ist das so, oder?
Windows bricht die Menüzeile um, also wird das Menü höher. Trotzdem muss ich den Wert MenuHeight abziehen. Lustigerweise hat MenuHeight dann überhaupt nichts mit der wirklichen Menühöhe zu tun.
Achsoooo! :o

Das macht nun wirklich keinen Sinn. <)
Das macht insofern einen Sinn, dass ich wenn ich den Wert MenuHeight abziehe, dann auf die richtige Fensterhöhe komme. Die Werte von WindowHeight sind einfach so hingedreht, dass ich nach Abzug der immer gleichen Menühöhe auf die richtige Fensterhöhe komme. Habe das auch erst später erkannt.

Trotzdem ist es vollkommen blödsinnig und inkonsequent, dass dann bei WindowY die Menühöhe bereits berücksichtigt ist.
Antworten