SetWindowColor

Anfängerfragen zum Programmieren mit PureBasic.
Tirreg
Beiträge: 5
Registriert: 19.05.2022 12:13

SetWindowColor

Beitrag 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!
jogo
Beiträge: 64
Registriert: 22.11.2020 20:05
Computerausstattung: 'ne Handvoll gebrauchte Laptops & PCs mit Mint Mate

Re: SetWindowColor

Beitrag 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..
--
Ideen gibt es viele - man muss sie nur haben...
Mint 18.3/19.3/21.x/LMDE5 // PureBasic 5.73 / 6.02
Benutzeravatar
mk-soft
Beiträge: 3691
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: SetWindowColor

Beitrag von mk-soft »

Es ist auch besser in ein CanvasGadget zu zeichnen.
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Tirreg
Beiträge: 5
Registriert: 19.05.2022 12:13

Re: SetWindowColor

Beitrag 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
Benutzeravatar
RSBasic
Admin
Beiträge: 8022
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: SetWindowColor

Beitrag 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.
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
mk-soft
Beiträge: 3691
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: SetWindowColor

Beitrag 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()
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Tirreg
Beiträge: 5
Registriert: 19.05.2022 12:13

Re: SetWindowColor

Beitrag von Tirreg »

Nochmals vielen Dank an alle!
Ich habe mich jetzt mit den Gadgets angefreundet, funktioniert alles prima.
Antworten