Seite 1 von 3

Zeichnen in Window

Verfasst: 11.11.2025 17:17
von MacThommes
Hi.
Bin neu hier und hab direkt eine Frage:
Ich versuche auf einen Fenster was ich mit If OpenWindow..... geöffnet habe eine Linie zu zeichnen.
Gadgets etc werden angezeigt sonst funktioniert soweit auch alles prima, aber eine Linie bekomme ich nicht auf das aktuelle Fenster gezeichnet.

Code: Alles auswählen

#FENSTER_HAUPT = 1
#FLAGS = #PB_Window_SystemMenu | #PB_Window_ScreenCentered
If OpenWindow(#FENSTER_HAUPT, 0, 0, 200, 240, "Fenster Zeichnung", #FLAGS)
If StartDrawing(WindowOutput(#FENSTER_HAUPT))
Box(15, 15, 75, 75, RGB(255, 0, 0))
Circle(140, 125, 45, RGB(35, 158, 70))
;die nächsten 2D Zeichenbefehle zeichnen ein Dreieck
LineXY(62, 140, 112, 220, RGB(0, 0, 255))
LineXY(112, 220, 12, 220, RGB(0, 0, 255))
LineXY(12, 220, 62, 140, RGB(0, 0, 255))
FillArea(62, 180, RGB(0, 0, 255), RGB(0, 0, 255))
StopDrawing()
EndIf
Repeat
Ereignis.i = WaitWindowEvent()
Until Ereignis = #PB_Event_CloseWindow
EndIf
End
Bei diesem Progrämmchen z.B. erscheint lediglich ein schwarzes Fenster.
Sehr seltsam: Unter Windows kann man das Ergebnis sehen, unter MacOS 26.0.1 nicht.
Kann es sein, das da der Fehler ist?

Re: Zeichnen in Window

Verfasst: 11.11.2025 17:50
von Axolotl
Auch unter Windows solltest Du das direkte Zeichnen auf dem Bildschirm nach einem Paint-Event durchführen.
Sonst bleibt das Fenster irgendwann leer.

Generell ist es besser ein Gadget zu verwenden, da die Rekonstruktion dann vom Gadget übernommen wird.
Geeignet wären hier ImageGadget oder CanvasGadget, abhängig davon wohin die Reise gehen soll.

Hier mal die notwendigen Änderungen: (Einrückungen sind auf jeden Fall hilfreich für das Lesen.)

Code: Alles auswählen

#FENSTER_HAUPT = 1
#FLAGS = #PB_Window_SystemMenu | #PB_Window_ScreenCentered

If OpenWindow(#FENSTER_HAUPT, 0, 0, 200, 240, "Fenster Zeichnung", #FLAGS)

  Repeat
    Ereignis.i = WaitWindowEvent() 
    If Ereignis = #PB_Event_Repaint 
      If StartDrawing(WindowOutput(#FENSTER_HAUPT))
        Box(15, 15, 75, 75, RGB(255, 0, 0))
        Circle(140, 125, 45, RGB(35, 158, 70))
        ;die nächsten 2D Zeichenbefehle zeichnen ein Dreieck
        LineXY(62, 140, 112, 220, RGB(0, 0, 255))
        LineXY(112, 220, 12, 220, RGB(0, 0, 255))
        LineXY(12, 220, 62, 140, RGB(0, 0, 255))
        FillArea(62, 180, RGB(0, 0, 255), RGB(0, 0, 255))
        StopDrawing()
      EndIf
    EndIf 
  Until Ereignis = #PB_Event_CloseWindow
EndIf
End


Re: Zeichnen in Window

Verfasst: 11.11.2025 20:01
von MacThommes
Danke erst mal für die schnelle Antwort.
Ja, warum er die Einrückungen hier weggenommen hat, weiß ich nicht. Beim Original sind die natürlich da....
Ich habe oben geschrieben, das es unter Windows funktioniert.
Mein Problem ist, das es unter MacOS nicht funktioniert.
Dein Code ergibt auf dem Mac folgendes:
Ein leeres schwarzes Fenster....

Re: Zeichnen in Window

Verfasst: 11.11.2025 22:04
von jogo
nur zur Info, bei mir (Linux) läuft das Beispiel von Axolotl so, wie es soll. Ich sehe 3 geometrische Figuren. Scheint also ein spezielles Mac-Problem zu sein. In der Hilfe sind allerdings keine Hinweise darauf zu finden..

Re: Zeichnen in Window

Verfasst: 11.11.2025 22:19
von Kiffi
MacThommes hat geschrieben: 11.11.2025 20:01Dein Code ergibt auf dem Mac folgendes:
Ein leeres schwarzes Fenster....
bei mir (Mac Mini M4 Tahoe) ist es ein leeres weißes Fenster.

Re: Zeichnen in Window

Verfasst: 11.11.2025 22:25
von MacThommes
Ich denke es scheint ein Bug zu sein?
Zu Linux:
Ich habe es nicht geschafft PureBasic unter Linux zu installieren.
Vielleicht hat da ja jemand eine funktionierende (!) Anleitung, wie man das unter Linux Mint installiert bekommt.
Bin etwas geknickt, das es schon die ersten Probleme gibt.
Habe viele Jahre mit BlitzBasic auf dem Amiga und danach unter Windows.
Anfangs zu meiner Zeit mit dem ersten Mac (2003) konnte ich auch noch mit BlitzBasic programmieren.
Dann habe ich mich sehr gefreut, als ich von PureBasic gehört habe.
Kurz reingeschaut und begeistert die Vollversion bezahlt.

Re: Zeichnen in Window

Verfasst: 11.11.2025 22:39
von jogo
MacThommes hat geschrieben: 11.11.2025 22:25 Ich habe es nicht geschafft PureBasic unter Linux zu installieren.
In der Linux-Rubrik ist ganz oben eine Anleitung zur Installation. Bin aber nicht sicher, ob da vllt. schon Abweichungen gibt, weil von 2010.
Ansonsten stehen in der Datei INSTALL allle erforderlichen Schritte drin. Ich gehe dort die Punkte einfach durch.
Wo hakt es denn bei der Installation genau? Und welches Linux hast du?
Ist aber hier in diesem Thread etwas OT - vllt. machst du dafür einfach ein neues Thema auf ;)

Re: Zeichnen in Window

Verfasst: 11.11.2025 22:42
von TroaX
Eine Anleitung liegt dem Archiv für Linux bei. Optimiert ist diese für Ubuntu. Funktioniert aber zuminest meinder Beobachtung nach auf allen Debian-Distros. Ich nutze Mint.

Unter Linux funktioniert der Code von Axolotl. Bei deinem Code aus dem ersten Beitrag bekomme ich nur ein leeres Fenster.

Re: Zeichnen in Window

Verfasst: 11.11.2025 23:00
von Kiffi
um zurück zum Thema zu kommen: So sähe es mit einem ImageGadget aus:

Code: Alles auswählen

#FENSTER_HAUPT = 1
#FLAGS = #PB_Window_SystemMenu | #PB_Window_ScreenCentered

If OpenWindow(#FENSTER_HAUPT, 0, 0, 200, 240, "Fenster Zeichnung", #FLAGS)
  
  If CreateImage(0, 200, 240) And StartDrawing(ImageOutput(0))
    
    Box(15, 15, 75, 75, RGB(255, 0, 0))
    Circle(140, 125, 45, RGB(35, 158, 70))
    ;die nächsten 2D Zeichenbefehle zeichnen ein Dreieck
    LineXY(62, 140, 112, 220, RGB(0, 0, 255))
    LineXY(112, 220, 12, 220, RGB(0, 0, 255))
    LineXY(12, 220, 62, 140, RGB(0, 0, 255))
    FillArea(62, 180, RGB(0, 0, 255), RGB(0, 0, 255))
    StopDrawing()
    ImageGadget(0, 0, 0, 200, 240, ImageID(0))
    
    Repeat
      Event = WaitWindowEvent()
    Until Event = #PB_Event_CloseWindow
    
  EndIf
  
EndIf

Re: Zeichnen in Window

Verfasst: 12.11.2025 09:31
von MacThommes
Na, hier ist ja echt was los....
Sehr positiv!
Also, mit der Installation, werde ich am Nachmittag mal ein neues Thema aufmachen.
Die original Anleitung funktioniert nicht.
Nochmal zu dem ersten Problem:
Auch der Code von Axolotl ergibt bei mir ein leeres Fenster.