Seite 1 von 1

Farbe in einem ImageGadget ändern.

Verfasst: 08.01.2005 18:19
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

Verfasst: 08.01.2005 19:15
von Franky
SetGadgetState fehlt, du veränderst das bild, setzt es dann aber nicht auf das gadget :D

Verfasst: 08.01.2005 22:36
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 

Verfasst: 08.01.2005 22:40
von Franky
:shock:

Du musst ja auch den state angeben.

Versuche mal UseImage() mit dem bild, das du brauchst

Verfasst: 08.01.2005 22:49
von Pelagio
Oh Franky,

du bist Fix aber leider funktioniert es mit UseImage auch nicht.

Verfasst: 08.01.2005 22:54
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 

Verfasst: 08.01.2005 23:08
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.

Verfasst: 08.01.2005 23:24
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: