Seite 1 von 1

Fensterwerte falsch?

Verfasst: 01.10.2017 16:29
von wie_jetzt?
Hallo Leute,

folgender Code

Code: Alles auswählen

If OpenWindow(0, 0, 0, 500, 500, "Testfenster", #PB_Window_SystemMenu | #PB_Window_ScreenCentered | #PB_Window_MinimizeGadget | #PB_Window_SizeGadget)
  Debug WindowX(0, #PB_Window_InnerCoordinate)
  Debug WindowY(0, #PB_Window_InnerCoordinate) 
  Debug WindowX(0, #PB_Window_FrameCoordinate)
  Debug WindowY(0, #PB_Window_FrameCoordinate)
  Repeat
      Ereignis.i = WaitWindowEvent()
      Select Ereignis
        Case #PB_Event_Menu
      EndSelect
  Until Ereignis = #PB_Event_CloseWindow Or Ende = #True
EndIf
zeigt im Debugfenster die Werte

Code: Alles auswählen

710
301
707
270
an. Ich hätte aber eigentlich Werte so um die 500 erwartet. Wo ist mein Denkfehler? :o

Re: Fensterwerte falsch?

Verfasst: 01.10.2017 16:56
von Kiffi
wie groß ist denn die Auflösung Deines Monitors?

Grüße ... Peter

Re: Fensterwerte falsch?

Verfasst: 01.10.2017 17:19
von udg
naja deine Debug Ausgabe zeigt dir nicht die Breite und Höhe eines Fensters an sondern nur die Startpunkte x und y

am besten kannst du das erkennen wenn du diese Konstante mal rausnimmst:

Code: Alles auswählen

#PB_Window_ScreenCentered
dann zeigt es dir im Debug folgendes an:
WindowX(#main, #PB_Window_InnerCoordinate) 3 - (das innere Fenster welches 500 pix breit ist fängt ab Pixel 4 an)
WindowY(#main, #PB_Window_InnerCoordinate) 30 - (das innere Fenster welches 500 pix hoch ist fängt ab Pixel 31 an)

WindowX(#main, #PB_Window_FrameCoordinate) = 0
WindowY(#main, #PB_Window_FrameCoordinate) = 0

passt also

Lösung:

Code: Alles auswählen

Enumeration
  #Main
EndEnumeration

#MainWidth  = 500
#MainHeight = 500

If OpenWindow(#Main, 0, 0, #MainWidth, #MainHeight, "Testfenster", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_SizeGadget)
  
  Debug WindowX(#Main, #PB_Window_InnerCoordinate) + #MainWidth   ; Startpos Fenster X + FensterBreite
  Debug WindowY(#Main, #PB_Window_InnerCoordinate) + #MainHeight  ; Startpos Fenster Y + FensterHöhe
  Debug WindowX(#Main, #PB_Window_FrameCoordinate)
  Debug WindowY(#Main, #PB_Window_FrameCoordinate)
  
Repeat
      Ereignis.i = WaitWindowEvent()
      Select Ereignis
        Case #PB_Event_Menu
      EndSelect
  Until Ereignis = #PB_Event_CloseWindow Or Ende = #True
EndIf

Re: Fensterwerte falsch?

Verfasst: 01.10.2017 21:16
von wie_jetzt?
Hallo Kiffi und UDG!

Besten Dank Euch beiden! Vor allem an UDG für seine ausführliche Erklärung, die einem Spätberufenen wie mir das super klar erklärt hat. Ohne diese Erklärung hätte mir der Hinweis von Kiffi auch nicht weitergeholfen. Da war ich mal wieder voll auf dem Holzweg! Doch jetzt lichtet sich das Dunkel. Das fühlt man sich gut aufgehoben.

Besten Dank!

Re: Fensterwerte falsch?

Verfasst: 02.10.2017 01:07
von Imhotheb
Wie wäre es mit WindowHeigth() bzw. WindowWidth()? ... Oder hab ich da was falsch verstanden

Re: Fensterwerte falsch?

Verfasst: 02.10.2017 11:37
von udg
Imhotheb hat geschrieben:Wie wäre es mit WindowHeigth() bzw. WindowWidth()? ... Oder hab ich da was falsch verstanden
oder so ;) , wenn der Rahmen und Kopf nicht von Belangen ist

Code: Alles auswählen

  Debug "FensterBreite: " + WindowWidth (#Main)  ;  FensterBreite
  Debug "FensterHöhe: " +  WindowHeight(#Main)   ;  FensterHöhe

Re: Fensterwerte falsch?

Verfasst: 25.10.2017 09:50
von juergenkulow

Code: Alles auswählen

; Zeige Breite, Höhe, Positionen und Ereignisse von Fenstern an. 
; Windows 7 PureBasic 5.60 (Windows - x64)
EnableExplicit ; Hilft gegen Variablen die keinen Wert bei Abfragen haben und gegen Schreibfehler. Danach müssen Variablen mit Define erklärt werden.
Define Testfenster=OpenWindow(#PB_Any, 0, 0, 500, 500, "Testfenster", #PB_Window_SystemMenu | #PB_Window_ScreenCentered | #PB_Window_MinimizeGadget | #PB_Window_SizeGadget)  
If Testfenster
  Debug "FensterBreite:"  + WindowWidth (TestFenster)    ;  FensterBreite
  Debug "FensterHöhe:  "  + WindowHeight(TestFenster)    ;  FensterHöhe
  Debug "X-Position:   "  + WindowX(TestFenster, #PB_Window_FrameCoordinate)
  Debug "Y-Position:   "  + WindowY(TestFenster, #PB_Window_FrameCoordinate)
  Debug "innere X-Posi:"  + WindowX(TestFenster, #PB_Window_InnerCoordinate)
  Debug "innere Y-Posi:"  + WindowY(TestFenster, #PB_Window_InnerCoordinate) 
  Define Menue = CreateMenu(#PB_Any,WindowID(Testfenster))      ; Erstelle Menü, damit bei #PB_Event_Menu etwas abgefragt werden kann. 
  If Menue
    MenuTitle("Menü") 
    MenuItem(4711, "Programm beenden")
    MenuItem(4712, "weiter") 
  Else
    Debug "Menü konnte nicht erstellt werden. "
  EndIf
  If 0=StartDrawing(WindowOutput(Testfenster)) ; Öffnet Fenster zum beschreiben oder zeichnen. StopDrawing() ist vor erneutem StartDrawing notwendig. 
    Debug "StartDrawing fehlgeschlagen."
  EndIf 
  Define Ende=#False 
  Repeat
    Define Ereignis.i = WaitWindowEvent() ;Wartet bis ein Ereignis auftritt.
    Debug "Ereignis: $"  + Hex(Ereignis,#PB_Long)  ; Das Fensterereignis wird ausgeben.
    Select Ereignis
      Case #PB_Event_CloseWindow ;$333C Fenster soll geschlossen werden
        Ende = #True
        
      Case #PB_Event_MoveWindow ; $333D Fenster wurde verschoben 
        Debug "FensterBreite:"  + WindowWidth (TestFenster)    ;  FensterBreite
        Debug "FensterHöhe:  "  + WindowHeight(TestFenster)    ;  FensterHöhe
        Debug "X-Position:   "  + WindowX(TestFenster, #PB_Window_FrameCoordinate)
        Debug "Y-Position:   "  + WindowY(TestFenster, #PB_Window_FrameCoordinate)
        Debug "innere X-Posi:"  + WindowX(TestFenster, #PB_Window_InnerCoordinate)
        Debug "innere Y-Posi:"  + WindowY(TestFenster, #PB_Window_InnerCoordinate) 
        
      Case #PB_Event_Menu ;$332D 
        DrawText(10,50,"Event_Menu wurde aufgerufen. "+Str(EventMenu())) 
        Select EventMenu()       ; Welches Menü oder welche Taste wurde gedrückt. 
          Case 4711 ; Menü Programm beenden wurde aufgerufen.
            Ende=#True 
            
          Case 4712 ; Menü weiter wurde aufgerufen
            DrawText(100,10,"weiter")
            
          Default 
            DrawText(100,10,"Unbekanntes Menü wurde aufgerufen.") 
            
        EndSelect
        
      Default
        DrawText(50,10,"Ereignis: $"+Hex(Ereignis,#PB_Long)+" wurde nicht abgefragt.     ") ; Schreibt das Ergebnis weiß auf schwarz. Vergleiche mit Debug Ereignis. 

    EndSelect
  Until Ende = #True
  StopDrawing() ; Aufräumen - Gegenstück zu StartDrawing
  FreeMenu(Menue) ; Gegenstück zu CreateMenu
  CloseWindow(Testfenster) ; Gegenstück zu OpenWindow
Else
  Debug "Testfenster konnte nicht geöffnet werden. "
EndIf