Fensterwerte falsch?

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
wie_jetzt?
Beiträge: 21
Registriert: 28.08.2017 17:23

Fensterwerte falsch?

Beitrag 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
Was das Programmieren angeht, bin ich ein Anfänger mit fast 40 Jahren Erfahrung, mit gelegentlichen, mitunter jahrzehntelangen Unterbrechungen. Kann mich noch dunkel an den TI58 bei der Bundeswehr Anfang der 1980er erinnern. Habe da mit "Mondlandung" viele Stunden der Heimatverteidung verbracht - Insider werden's kennen.
... wir hatten doch sonst nix!
Benutzeravatar
Kiffi
Beiträge: 10620
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Fensterwerte falsch?

Beitrag von Kiffi »

wie groß ist denn die Auflösung Deines Monitors?

Grüße ... Peter
Hygge
Benutzeravatar
udg
Beiträge: 560
Registriert: 20.06.2013 23:27

Re: Fensterwerte falsch?

Beitrag 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
PB v5.43 LTS + v6.02 LTS | Windows 7 x86 + 11 x64 - Gforce RTX 4090 - AMD Ryzen 9 5900X 12-Core Processor 4.2 GHz - 64,0 GB RAM,
ASUSTEK TUF Gaming X570 Plus
ASUS ROG Thor-1200P Platinum (1200W, Aura Sync, OLED Display, 0dB-Cooling)
1x 1 TByte Samsung MZ-V7S500BW 970 EVO Plus 1 TB NVMe M.2 Internal SSD
1x 2 TByte Samsung MZ-V7S2T0BW 970 EVO Plus 2 TB NVMe M.2 Internal SSD
von BiSONTE! TOP. Kauft Eure Hardware gern bei ihm.
Monitor:
LG 38GL950G-B 95 (38 Zoll) Ultragear Curved 21: 9 UltraWide QHD IPS
Benutzeravatar
wie_jetzt?
Beiträge: 21
Registriert: 28.08.2017 17:23

Re: Fensterwerte falsch?

Beitrag 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!
Was das Programmieren angeht, bin ich ein Anfänger mit fast 40 Jahren Erfahrung, mit gelegentlichen, mitunter jahrzehntelangen Unterbrechungen. Kann mich noch dunkel an den TI58 bei der Bundeswehr Anfang der 1980er erinnern. Habe da mit "Mondlandung" viele Stunden der Heimatverteidung verbracht - Insider werden's kennen.
... wir hatten doch sonst nix!
Benutzeravatar
Imhotheb
Beiträge: 192
Registriert: 10.10.2014 13:14
Computerausstattung: Intel 8086, 640 KB RAM, Hercules Video Adapter, 2 x 5 1/4" 360kb Floppy, MS-DOS 3
Wohnort: Wolfenbüttel

Re: Fensterwerte falsch?

Beitrag von Imhotheb »

Wie wäre es mit WindowHeigth() bzw. WindowWidth()? ... Oder hab ich da was falsch verstanden
weil einfach einfach einfach ist ... mach' ich es anders
Benutzeravatar
udg
Beiträge: 560
Registriert: 20.06.2013 23:27

Re: Fensterwerte falsch?

Beitrag 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
PB v5.43 LTS + v6.02 LTS | Windows 7 x86 + 11 x64 - Gforce RTX 4090 - AMD Ryzen 9 5900X 12-Core Processor 4.2 GHz - 64,0 GB RAM,
ASUSTEK TUF Gaming X570 Plus
ASUS ROG Thor-1200P Platinum (1200W, Aura Sync, OLED Display, 0dB-Cooling)
1x 1 TByte Samsung MZ-V7S500BW 970 EVO Plus 1 TB NVMe M.2 Internal SSD
1x 2 TByte Samsung MZ-V7S2T0BW 970 EVO Plus 2 TB NVMe M.2 Internal SSD
von BiSONTE! TOP. Kauft Eure Hardware gern bei ihm.
Monitor:
LG 38GL950G-B 95 (38 Zoll) Ultragear Curved 21: 9 UltraWide QHD IPS
Benutzeravatar
juergenkulow
Beiträge: 188
Registriert: 22.12.2016 12:49
Wohnort: :D_üsseldorf-Wersten

Re: Fensterwerte falsch?

Beitrag 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
Bitte stelle Deine Fragen, denn den Erkenntnisapparat einschalten entscheidet über das einzig bekannte Leben im Universum.

Jürgen Kulow Wersten :D_üsseldorf NRW D Europa Erde Sonnensystem Lokale_Flocke Lokale_Blase Orion-Arm
Milchstraße Lokale_Gruppe Virgo-Superhaufen Laniakea Sichtbares_Universum
Antworten