Farbe in einem ImageGadget ändern.

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
Pelagio
Beiträge: 424
Registriert: 11.11.2004 17:52
Computerausstattung: AMD Ryzen 5 7600 6-Core Prozessor 3.80 GHz
16,0 GB Arbeitsspeicher
Windows 11 Pro Betriebssystem
Wohnort: Bremen

Farbe in einem ImageGadget ändern.

Beitrag von Pelagio »

Hallo Leidensgenossen :bluescreen:

Ich habe wieder mal ein Problem welches sicherlich einfach zu lösen ist, dessen Lösung ich aber leider nirgends finden konnte.

Über den Druck auf ein Button soll sich ein Bereich des Fensters entsprechend färben, ohne das durch das verschieben des Fensters über den Display hinaus oder das abdecken durch ein anderes Fenster diese Färbung verschwindet. Diesbezüglich stelle ich ein Code herein und hoffe, glaube das ihr mir den Fehler erleutern könnt.

Code: Alles auswählen

Enumeration
   #Window
   #Image
   #Graphic
   #Button_0
   #Button_1
   #Button_2
EndEnumeration
#Gruen.l = $00FF00
#Rot.l   = $FF0000
#Blau.l  = $0000FF

Declare DrawColor(Value.l)

If OpenWindow(#Window, 100, 200, 400, 300, #PB_Window_SystemMenu |#PB_Window_ScreenCentered, "PureBasic Window")
   CreateImage (#Graphic, 100, 100)
   If CreateGadgetList(WindowID(#Window))   
      ImageGadget (#Image,    150, 100, 100, 100, UseImage(#Graphic), #PB_Image_Border) 
      ButtonGadget(#Button_0, 300, 260, 60, 20, "Gruen") 
      ButtonGadget(#Button_1, 040, 260, 60, 20, "Rot")
      ButtonGadget(#Button_2, 170, 260, 60, 20, "Blau")
   EndIf
   Repeat
      EventID.l = WaitWindowEvent()
      If EventID = #PB_Event_CloseWindow  ; If the user has pressed on the close button
         Quit = 1
      ElseIf EventID = #PB_Event_Gadget
         Select EventGadgetID() 
            Case #Button_0
               DrawColor(#Gruen)
            Case #Button_1
               DrawColor(#Rot)
            Case #Button_1
               DrawColor(#Blau)
         EndSelect
      EndIf
   Until Quit = 1
EndIf

End   

Procedure DrawColor(Value.l)
   StartDrawing(ImageOutput())
   Box(0, 0, 100, 100, Value)
   DrawImage(UseImage(#Graphic), 100, 100)
   StopDrawing()
EndProcedure
Benutzeravatar
Franky
Beiträge: 1132
Registriert: 29.08.2004 16:31
Wohnort: Münsterland
Kontaktdaten:

Beitrag von Franky »

SetGadgetState fehlt, du veränderst das bild, setzt es dann aber nicht auf das gadget :D
Falsch zugeordnetes Zitat des Tages: "O'zapft is" - Edward Snowden :)
Benutzeravatar
Pelagio
Beiträge: 424
Registriert: 11.11.2004 17:52
Computerausstattung: AMD Ryzen 5 7600 6-Core Prozessor 3.80 GHz
16,0 GB Arbeitsspeicher
Windows 11 Pro Betriebssystem
Wohnort: Bremen

Beitrag von Pelagio »

Danke Franky für deine Antwort aber: :?:

Ich hatte SetGadgetState schon eingebaut, lies es aber weg weil es keinen Erfolg brachte.
Auch jetzt habe ich es, nach deiner Antwort, noch einmal versucht aber das ImageGadget bleibt schwarz.

Code: Alles auswählen

Procedure DrawColor(Value.l) 
   StartDrawing(ImageOutput()) 
   Box(0, 0, 100, 100, Value) 
   DrawImage(UseImage(#Graphic), 100, 100) 
   StopDrawing()
   SetGadgetState(#Image, 0)
EndProcedure 
Benutzeravatar
Franky
Beiträge: 1132
Registriert: 29.08.2004 16:31
Wohnort: Münsterland
Kontaktdaten:

Beitrag von Franky »

:shock:

Du musst ja auch den state angeben.

Versuche mal UseImage() mit dem bild, das du brauchst
Falsch zugeordnetes Zitat des Tages: "O'zapft is" - Edward Snowden :)
Benutzeravatar
Pelagio
Beiträge: 424
Registriert: 11.11.2004 17:52
Computerausstattung: AMD Ryzen 5 7600 6-Core Prozessor 3.80 GHz
16,0 GB Arbeitsspeicher
Windows 11 Pro Betriebssystem
Wohnort: Bremen

Beitrag von Pelagio »

Oh Franky,

du bist Fix aber leider funktioniert es mit UseImage auch nicht.
Benutzeravatar
Andre
PureBasic Team
Beiträge: 1765
Registriert: 11.09.2004 16:35
Computerausstattung: MacBook Core2Duo mit MacOS 10.6.8
Lenovo Y50 i7 mit Windows 10
Wohnort: Saxony / Deutscheinsiedel
Kontaktdaten:

Beitrag von Andre »

So läuft's:

(beachte die geänderten Farbwerte, DrawColor() Prozedur etwas angepasst und die Gadget-Konstanten etwas sortiert)

Code: Alles auswählen

Enumeration 
   #Window 
   #Image 
   #Graphic 
   #Button_0 
   #Button_1 
   #Button_2 
EndEnumeration 
#Rot.l   = $0000FF    ; wird von hinten her eingelesen, daher Hex-Werte geändert
#Blau.l  = $FF0000    ;  - " -
#Gruen.l = $00FF00    

Declare DrawColor(Value.l) 

If OpenWindow(#Window, 100, 200, 400, 300, #PB_Window_SystemMenu |#PB_Window_ScreenCentered, "PureBasic Window") 
   CreateImage (#Graphic, 100, 100) 
   If CreateGadgetList(WindowID(#Window))    
      ImageGadget (#Image,    150, 100, 100, 100, UseImage(#Graphic), #PB_Image_Border) 
      ButtonGadget(#Button_0,  40, 260, 60, 20, "Rot") 
      ButtonGadget(#Button_1, 170, 260, 60, 20, "Blau") 
      ButtonGadget(#Button_2, 300, 260, 60, 20, "Gruen") 
   EndIf 
   Repeat 
      EventID.l = WaitWindowEvent() 
      If EventID = #PB_Event_CloseWindow  ; If the user has pressed on the close button 
         Quit = 1 
      ElseIf EventID = #PB_Event_Gadget 
         Select EventGadgetID() 
            Case #Button_0
               DrawColor(#Rot) 
            Case #Button_1 
               DrawColor(#Blau) 
            Case #Button_2 
               DrawColor(#Gruen) 
         EndSelect 
      EndIf 
   Until Quit = 1 
EndIf 

End    

Procedure DrawColor(Value.l) 
   UseImage(#Graphic)
   StartDrawing(ImageOutput()) 
   Box(0, 0, 100, 100, Value) 
   StopDrawing() 
   SetGadgetState(#Image,ImageID())
EndProcedure 
Bye,
...André
(PureBasicTeam::Docs - PureArea.net | Bestellen:: PureBasic | PureVisionXP)
Benutzeravatar
Pelagio
Beiträge: 424
Registriert: 11.11.2004 17:52
Computerausstattung: AMD Ryzen 5 7600 6-Core Prozessor 3.80 GHz
16,0 GB Arbeitsspeicher
Windows 11 Pro Betriebssystem
Wohnort: Bremen

Beitrag von Pelagio »

Danke Andre, :allright:

das ist die Antwort.
Ich bin davon ausgegengen, das ich bei SetGadgetState(#Gadget, Status) für den Status nur 0 oder 1 eintragen durfte. Ich Glaube ich muß die Hilfetexte etwas freizügiger interpretiren.
Benutzeravatar
Andre
PureBasic Team
Beiträge: 1765
Registriert: 11.09.2004 16:35
Computerausstattung: MacBook Core2Duo mit MacOS 10.6.8
Lenovo Y50 i7 mit Windows 10
Wohnort: Saxony / Deutscheinsiedel
Kontaktdaten:

Beitrag von Andre »

Pelagio hat geschrieben:Danke Andre, :allright:

das ist die Antwort.
Ich bin davon ausgegengen, das ich bei SetGadgetState(#Gadget, Status) für den Status nur 0 oder 1 eintragen durfte. Ich Glaube ich muß die Hilfetexte etwas freizügiger interpretiren.
Eine genauere Beschreibung davon hättest Du aber bei der Beschreibung des ImageGadget gefunden. :wink:
Bye,
...André
(PureBasicTeam::Docs - PureArea.net | Bestellen:: PureBasic | PureVisionXP)
Antworten