Fenster doppelt so breit/hoch (?)

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
OdysseusL
Beiträge: 7
Registriert: 30.08.2025 16:21
Computerausstattung: Mac mini M4, 24GB
Wohnort: Deutschland

Fenster doppelt so breit/hoch (?)

Beitrag von OdysseusL »

Wenn ich das Beispielprogramm aus der Dokumentation für den Befehl "Line()" auf macOS ausführe, ist das Fenster immer doppelt so breit/hoch wie das "image". Woran liegt das?

Hier das Beispiel:

Code: Alles auswählen

If OpenWindow(0, 0, 0, 200, 200, "2DDrawing Beispiel", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  If CreateImage(0, 200, 200) And StartDrawing(ImageOutput(0))
    Box(0, 0, 200, 200, RGB(255, 255, 255))
    For Width = 1 To 180 Step 5
      Line(10, 10, Width, 180, RGB(Random(255), Random(255), Random(255)))
    Next Width
    StopDrawing() 
    ImageGadget(0, 0, 0, 200, 200, ImageID(0))
  EndIf
  
  Repeat
    Event = WaitWindowEvent()
  Until Event = #PB_Event_CloseWindow
EndIf
Hier das Fenster:
Bild
jogo
Beiträge: 123
Registriert: 22.11.2020 20:05
Computerausstattung: 'ne Handvoll gebrauchte Laptops & PCs mit Mint und LMDE

Re: Fenster doppelt so breit/hoch (?)

Beitrag von jogo »

hab exakt den gleichen Code auf LMDE6 mit PB 6.21 gestestet. Da ist das Fenster so, wie erwartet.
Wann wird denn das Hauptfenster größer? Bau doch mal Probehalber vor CreateImage() eine Pause ein, um zu sehen, an welcher Stelle das Fenster zu groß wird.
--
Ideen gibt es viele - man muss sie nur haben...
Mint / LMDE5+6 // PureBasic 6.21
Benutzeravatar
OdysseusL
Beiträge: 7
Registriert: 30.08.2025 16:21
Computerausstattung: Mac mini M4, 24GB
Wohnort: Deutschland

Re: Fenster doppelt so breit/hoch (?)

Beitrag von OdysseusL »

Das ist das nächste Problem. Das Fenster erscheint erst dann, wenn das "image" fertig gezeichnet wurde. Ich kann Pausen zwischen den einzelnen "Line()"-Aufrufen machen, dann dauert alles länger, aber auch dann erscheint das Fenster erst, wenn alles fertig ist.

Die Pausen habe ich durch eine "For"-Schleife erstellt. Gibt es eine elegantere Weise. (Ich teste gerade PureBasic.)
jogo
Beiträge: 123
Registriert: 22.11.2020 20:05
Computerausstattung: 'ne Handvoll gebrauchte Laptops & PCs mit Mint und LMDE

Re: Fenster doppelt so breit/hoch (?)

Beitrag von jogo »

Probier das mal so:

Code: Alles auswählen

If OpenWindow(0, 0, 0, 200, 200, "2DDrawing Beispiel", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  MessageRequester("Kontrolle","Fenster feddich")
  If CreateImage(0, 200, 200) And StartDrawing(ImageOutput(0))
    Box(0, 0, 200, 200, RGB(255, 255, 255))
    For Width = 1 To 180 Step 5
      Line(10, 10, Width, 180, RGB(Random(255), Random(255), Random(255)))
    Next Width
    StopDrawing() 
    ImageGadget(0, 0, 0, 200, 200, ImageID(0))
  EndIf
  
  Repeat
    Event = WaitWindowEvent()
  Until Event = #PB_Event_CloseWindow
EndIf
Bei mir wird erwartungsgemäß ein leeres Fenster mit dieser Messagebox angezeigt. Nach Klick auf OK wird die Grafik erzeugt. Hauptfenster ist genauso groß, wie zuvor definiert.
--
Ideen gibt es viele - man muss sie nur haben...
Mint / LMDE5+6 // PureBasic 6.21
Benutzeravatar
OdysseusL
Beiträge: 7
Registriert: 30.08.2025 16:21
Computerausstattung: Mac mini M4, 24GB
Wohnort: Deutschland

Re: Fenster doppelt so breit/hoch (?)

Beitrag von OdysseusL »

Leider das gleiche Resultat. Das resultierende Fenster ist doppelt so breit/hoch. Aber es wird jetzt angezeigt, "bevor" das Zeichnen beginnt. Kann es evtl. an der Einstellung des "Displays" für macOS (in den Einstellungen) liegen?

Bild
Benutzeravatar
Bisonte
Beiträge: 2468
Registriert: 01.04.2007 20:18

Re: Fenster doppelt so breit/hoch (?)

Beitrag von Bisonte »

der Grund ist, das dein Fenster durch deine Bildschirmskalierung vom OS beeinflusst wird, das image aber nicht. Dies musst du an deine Skalierung anpassen. Wie und ob die DesktopScale..() Funktionen von PB auf dem Mac funktionieren, weiss ich allerdings nicht...
PureBasic 6.21 (Windows x86/x64) | Windows11 Pro x64 | AsRock B850 Steel Legend Wifi | R7 9800x3D | 64GB RAM | GeForce RTX 5080 | ThermaltakeView 270 TG ARGB | build by vannicom​​
jogo
Beiträge: 123
Registriert: 22.11.2020 20:05
Computerausstattung: 'ne Handvoll gebrauchte Laptops & PCs mit Mint und LMDE

Re: Fenster doppelt so breit/hoch (?)

Beitrag von jogo »

ahh, also wird das Fenster durch die Skalierung des OS für das Display bereits vergrößert angezeigt, jedoch das Image 1:1 gezeichnet?
Und die DesktopScaledX() / DesktopScaledY() Funktionen passen gewissermaßen das Zeichnen des Images an den skalierten Desktop an?
Ich würd mal probieren, ob man vllt. den Monitor mit der nativen Auflösung betreiben kann. Ist ja eigtl. der Standardfall. Ansonstem müßte man ja Angst haben, dass einige FensterElemente zu klein bleiben.
--
Ideen gibt es viele - man muss sie nur haben...
Mint / LMDE5+6 // PureBasic 6.21
Benutzeravatar
OdysseusL
Beiträge: 7
Registriert: 30.08.2025 16:21
Computerausstattung: Mac mini M4, 24GB
Wohnort: Deutschland

Re: Fenster doppelt so breit/hoch (?)

Beitrag von OdysseusL »

So, ich habe es jetzt hingekriegt, dass das Fenster die "gleiche Größe" wie das "image" hat. Vielen Dank für eure Hinweise.

Code: Alles auswählen

Debug "Desktop DPI 'x' skalierter Wert von 1:" + DesktopScaledX(1)
Debug "Desktop DPI 'y' skalierter Wert von 1:" + DesktopScaledY(1)

XFactor.f = 1 / DesktopScaledX(1)
YFactor.f = 1 / DesktopScaledY(1)

Debug "XFactor / YFactor = " + XFactor + " / " + YFactor

If OpenWindow(0, 0, 0, 200*XFactor, 200*YFactor, "2DDrawing Beispiel", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  MessageRequester("Kontrolle","Fenster feddich")
  If CreateImage(0, 200, 200) And StartDrawing(ImageOutput(0))
    Box(0, 0, 200, 200, RGB(255, 255, 255))
    For Width = 1 To 180 Step 5
      Line(10, 10, Width, 180, RGB(Random(255), Random(255), Random(255)))
    Next Width
    StopDrawing() 
    ImageGadget(0, 0, 0, 200, 200, ImageID(0))
  EndIf
  
  Repeat
    Event = WaitWindowEvent()
  Until Event = #PB_Event_CloseWindow
EndIf
Wenn ich auf volle Auflösung gehe, wird die Schrift in manchen Programmen viel zu klein zum lesen - auch wenn ich die Systemschrift vergrößere :-(
Benutzeravatar
mk-soft
Beiträge: 3855
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: Fenster doppelt so breit/hoch (?)

Beitrag von mk-soft »

Du solltest nicht das Fenster an die Skalierung anpassen, sondern dein Image an die Skalierung.
Kann ich hier nicht ausprobieren da ich ein Standard Monitor an meinen Mac Mini habe. (Full-HD)

Suche mal im englischen Forum danach
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Benutzeravatar
OdysseusL
Beiträge: 7
Registriert: 30.08.2025 16:21
Computerausstattung: Mac mini M4, 24GB
Wohnort: Deutschland

Re: Fenster doppelt so breit/hoch (?)

Beitrag von OdysseusL »

Warum das Image und nicht das Fenster? Ich will ja ein 200x200 Pixel Image haben, so sind bei mir auch die Bildbearbeitungsprogramme: Benutzeroberfläche skaliert, Bilder verwenden die Hohe Auflösung des Monitors.
Antworten