Seite 1 von 1

SetWindowColor

Verfasst: 19.05.2022 15:57
von Tirreg
Hallo, helft bitte einem Anfänger.
warum bleibt in meinem Code DrawText wirkungslos?

Code: Alles auswählen

OpenWindow(0, 1,1, 400,400, "Test")
SetWindowColor(0, RGB(50,100,50))

StartDrawing(WindowOutput(0))
DrawText(10,10, "xxxxxxx")

MessageRequester("","")
Danke!

Re: SetWindowColor

Verfasst: 19.05.2022 18:05
von jogo
StartDrawing() mußt du mit StopDrawing() abschließen.
Und um Änderungen am GUI sehen zu können, lasse ich immer das Programm nach solchen Änderungen zur Ereignisschleife zurück kehren.
Sonst wird die Änderung nicht sichtbar. Zumindest ist das bei Linux so.
Bau mal eine rudimentäre Ereignisschleife und teste das mal..

Re: SetWindowColor

Verfasst: 19.05.2022 20:08
von mk-soft
Es ist auch besser in ein CanvasGadget zu zeichnen.

Re: SetWindowColor

Verfasst: 20.05.2022 10:20
von Tirreg
Vielen Dank!
In Schleife geht´s.

Code: Alles auswählen

OpenWindow(0, 1,1, 400,200, "Test", #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget)
SetWindowColor(0, RGB(50,100,50))

Repeat
  StartDrawing(WindowOutput(0))
  DrawText(10,10, "xxxxxxx")
  StopDrawing()
Until WaitWindowEvent(100) = #PB_Event_CloseWindow

Re: SetWindowColor

Verfasst: 20.05.2022 16:29
von RSBasic
mk-soft hat geschrieben: 19.05.2022 20:08 Es ist auch besser in ein CanvasGadget zu zeichnen.
@Tirreg
Ich würde dir ebenfalls empfehlen, einmalig in ein CanvasGadget oder ImageGadget zu zeichnen statt dauerhaft in der Event-Schleife, weils deutlich langsamer ist.

Re: SetWindowColor

Verfasst: 20.05.2022 17:57
von mk-soft
Auch wenn es unter Windows noch geht, sollte man das CanvasGadget nehmen.
Ausserdem braucht man bei einem CanvasGadget oder ImageGadget nur einmal zeichnen.
Wenn man auf dem Window Output zeichnet, muss man selber bei dem Ereignis 'Repaint' wieder alles zeichnen.

Wichtig ist auch die Events richtig strukturiert auszuwerten. Habe mal grob eingebaut

Code: Alles auswählen


Procedure DrawOnWindow()
  StartDrawing(WindowOutput(0))
  DrawText(10,10, "xxxxxxx")
  StopDrawing()
EndProcedure

Procedure Main()
  If OpenWindow(0, 1,1, 400,200, "Test", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget)
    SetWindowColor(0, RGB(50,100,50))
    
    DrawOnWindow()
    
    Repeat
      Select WaitWindowEvent()
        Case #PB_Event_CloseWindow
          Select EventWindow()
            Case 0
              Break
              
          EndSelect
          
        Case #PB_Event_Menu
          Select EventMenu()
              
          EndSelect
          
        Case #PB_Event_Gadget
          Select EventGadget()
              
          EndSelect
          
        Case #PB_Event_Repaint
          Select EventWindow()
            Case 0
              DrawOnWindow()
              
          EndSelect
          
      EndSelect
      
    ForEver
    
  EndIf
    
EndProcedure : Main()

Re: SetWindowColor

Verfasst: 21.05.2022 11:35
von Tirreg
Nochmals vielen Dank an alle!
Ich habe mich jetzt mit den Gadgets angefreundet, funktioniert alles prima.