Seite 2 von 2

Verfasst: 01.11.2008 17:46
von finnkerchief
Eine Kleinigkeit noch: meine erste Frage bezüglich einem Gadget, dass sich leicht einfärben lässt. Mein erster Lösungsansatz war in der Tat ein Imagegadget. Jedoch musste ich dann immer eine Prozedur aufrufen, die ein kleines farblich passendes Bildchen generierte, um dieses dann in Imagegadget zu laden. Das erschien mir umständlich. Ich hatte gehofft, dass die Containergadgets (die man ja farblich verändern kann) anklickbar sind und damit hätte ich mir Arbeit gespart. Letztendlich bin ich dann bei den readonly Stringgadgets gelandet und habs als halb-ok work-around akzeptiert. Vielleicht ändere ich es noch um.

Lg

Verfasst: 01.11.2008 19:07
von finnkerchief
Hallo, jetzt hab ich mich zu früh gefreut, oder ich übersehe etwas grundlegendes. Ich habe den Code angepasst:

Code: Alles auswählen

OpenWindow(15,0,0,400,150,"Farbe wählen",#PB_Window_ScreenCentered | #PB_Window_SystemMenu)
CreateGadgetList(WindowID(15))
 
xpos=37 : ypos=10
ContainerGadget(1501,xpos,ypos,25,25, #PB_Container_Double) : CloseGadgetList() : xpos+35 ; Hauptfarbfeld

; Felder mit Helligkeitsstufen
StringGadget(1502,xpos,ypos,20,20,"", #PB_String_ReadOnly) :  xpos+25
StringGadget(1503,xpos,ypos,20,20,"", #PB_String_ReadOnly) :  xpos+25
StringGadget(1504,xpos,ypos,20,20,"", #PB_String_ReadOnly) :  xpos+25
StringGadget(1505,xpos,ypos,20,20,"", #PB_String_ReadOnly) :  xpos+25
StringGadget(1506,xpos,ypos,20,20,"", #PB_String_ReadOnly) :  xpos+25
StringGadget(1507,xpos,ypos,20,20,"", #PB_String_ReadOnly) 

xpos=10: ypos+40 
TextGadget(1508,xpos,ypos,20,20,"R")  : TrackBarGadget(1509,xpos+20,ypos,195, 20, 0,255) : ypos+30
TextGadget(1510,xpos,ypos,20,20,"G")  : TrackBarGadget(1511,xpos+20,ypos,195, 20, 0,255) : ypos+30
TextGadget(1512,xpos,ypos,20,20,"B")  : TrackBarGadget(1513,xpos+20,ypos,195, 20, 0,255) 
 
; Schieberstellung bestimmt Farbe im Hauptfenster
SetGadgetColor(1501,#PB_Gadget_BackColor, RGB(GetGadgetState(1509),GetGadgetState(1511),GetGadgetState(1513)))

; vordefinierte Farbfelder
xpos=240 : ypos=10
StringGadget(1515,xpos,ypos,20,20,"", #PB_String_ReadOnly) : xpos+25
StringGadget(1516,xpos,ypos,20,20,"", #PB_String_ReadOnly) : xpos+25
StringGadget(1517,xpos,ypos,20,20,"", #PB_String_ReadOnly) : xpos+25
StringGadget(1518,xpos,ypos,20,20,"", #PB_String_ReadOnly) : xpos+25
StringGadget(1519,xpos,ypos,20,20,"", #PB_String_ReadOnly) : xpos+25
StringGadget(1520,xpos,ypos,20,20,"", #PB_String_ReadOnly) 

xpos=240 : ypos+25
StringGadget(1521,xpos,ypos,20,20,"", #PB_String_ReadOnly) : xpos+25
StringGadget(1522,xpos,ypos,20,20,"", #PB_String_ReadOnly) : xpos+25
StringGadget(1523,xpos,ypos,20,20,"", #PB_String_ReadOnly) : xpos+25
StringGadget(1524,xpos,ypos,20,20,"", #PB_String_ReadOnly) : xpos+25
StringGadget(1525,xpos,ypos,20,20,"", #PB_String_ReadOnly) : xpos+25
StringGadget(1526,xpos,ypos,20,20,"", #PB_String_ReadOnly) : xpos+25

; vordefinierte Farben setzen
SetGadgetColor(1515,#PB_Gadget_BackColor, RGB(0,0,0))
SetGadgetColor(1516,#PB_Gadget_BackColor, RGB(255,0,0))
SetGadgetColor(1517,#PB_Gadget_BackColor, RGB(0,255,0))
SetGadgetColor(1518,#PB_Gadget_BackColor, RGB(0,0,255))
SetGadgetColor(1519,#PB_Gadget_BackColor, RGB(255,255,0))
SetGadgetColor(1520,#PB_Gadget_BackColor, RGB(0,255,255))

SetGadgetColor(1521,#PB_Gadget_BackColor, RGB(255,0,255))
SetGadgetColor(1522,#PB_Gadget_BackColor, RGB(255,200,0))
SetGadgetColor(1523,#PB_Gadget_BackColor, RGB(200,0,255))
SetGadgetColor(1524,#PB_Gadget_BackColor, RGB(0,50,200))
SetGadgetColor(1525,#PB_Gadget_BackColor, RGB(0,0,0))
SetGadgetColor(1526,#PB_Gadget_BackColor, RGB(0,0,0))

Repeat
 EventID = WaitWindowEvent()

If  EventID = #PB_Event_Gadget
     
  Select EventGadget()
      
    Case 1509, 1511, 1513   ; Farbeinstellung über Schieber
        
      schieberred=GetGadgetState(1509)
      schiebergreen=GetGadgetState(1511)
      schieberblue=GetGadgetState(1513)
                
      SetGadgetColor(1501,#PB_Gadget_BackColor, RGB(schieberred,schiebergreen,schieberblue))
                
      ;Helligkeitsstufen
      frstep=(255-schieberred)/6
      fgstep=(255-schiebergreen)/6
      fbstep=(255-schieberblue)/6
                
      SetGadgetColor(1502,#PB_Gadget_BackColor, RGB(schieberred+frstep,schiebergreen+fgstep,schieberblue+fbstep))
      SetGadgetColor(1503,#PB_Gadget_BackColor, RGB(schieberred+(frstep*2),schiebergreen+(fgstep*2),schieberblue+(fbstep*2)))
      SetGadgetColor(1504,#PB_Gadget_BackColor, RGB(schieberred+(frstep*3),schiebergreen+(fgstep*3),schieberblue+(fbstep*3)))
      SetGadgetColor(1505,#PB_Gadget_BackColor, RGB(schieberred+(frstep*4),schiebergreen+(fgstep*4),schieberblue+(fbstep*4)))
      SetGadgetColor(1506,#PB_Gadget_BackColor, RGB(schieberred+(frstep*5),schiebergreen+(fgstep*5),schieberblue+(fbstep*5)))
      SetGadgetColor(1507,#PB_Gadget_BackColor, RGB(schieberred+(frstep*6),schiebergreen+(fgstep*6),schieberblue+(fbstep*6)))

         
               
   Case 1502 To 1507, 1515 To 1526 ; wenn auf ein stringgadget geklickt wird Farbe neu einstellen

     If EventType()= #PB_EventType_LeftClick ; <== deaktieviert man diese Abfrage wird debug 3x ausgeführt? 
    
       fetchcol.l=GetGadgetColor(EventGadget(),#PB_Gadget_BackColor) ; Farbe des angeklickten Gadgets auslesen
       SetGadgetColor(1501,#PB_Gadget_BackColor,fetchcol)  ; Hauptfeld mit dieser Farbe einfärben
              
       Debug "Gadgetnr: "+ Str(EventGadget())+"- Rot: "+Str(Red(fetchcol)) +" - Grün:"+ Str(Green(fetchcol))+" - Blau:"+ Str(Blue(fetchcol))

       ; schieberstellung einstellen auf neue Farbe
       SetGadgetState(1509,Red(fetchcol))
       SetGadgetState(1511,Green(fetchcol))
       SetGadgetState(1513,Blue(fetchcol))
        
       schieberred=GetGadgetState(1509)
       schiebergreen=GetGadgetState(1511)
       schieberblue=GetGadgetState(1513)
              
       ; Helligkeitsstufen nachstellen
       frstep=(255-Red(fetchcol))/6
       fgstep=(255-Green(fetchcol))/6
       fbstep=(255-Blue(fetchcol))/6
                  
       SetGadgetColor(1502,#PB_Gadget_BackColor, RGB(schieberred+frstep,schiebergreen+fgstep,schieberblue+fbstep))
       SetGadgetColor(1503,#PB_Gadget_BackColor, RGB(schieberred+(frstep*2),schiebergreen+(fgstep*2),schieberblue+(fbstep*2)))
       SetGadgetColor(1504,#PB_Gadget_BackColor, RGB(schieberred+(frstep*3),schiebergreen+(fgstep*3),schieberblue+(fbstep*3)))
       SetGadgetColor(1505,#PB_Gadget_BackColor, RGB(schieberred+(frstep*4),schiebergreen+(fgstep*4),schieberblue+(fbstep*4)))
       SetGadgetColor(1506,#PB_Gadget_BackColor, RGB(schieberred+(frstep*5),schiebergreen+(fgstep*5),schieberblue+(fbstep*5)))
       SetGadgetColor(1507,#PB_Gadget_BackColor, RGB(schieberred+(frstep*6),schiebergreen+(fgstep*6),schieberblue+(fbstep*6)))

       SetActiveGadget(1501)
     EndIf
           
   EndSelect  

EndIf

Until EventID = #PB_Event_CloseWindow 
 
End   
Die eventtype() Bedingung verhindert die Ausführung der darin befindlichen Befehle. Aktiviert man sie, bzw. versetzt sie an verschiedene Stellen, wirkt es sich immer so aus, dass die Bedingung scheinbar nicht erfüllt wird. Deaktiviert man sie, dann wird der Code 3 x ausgeführt. Interessant: betrachtet man die Gadgetnummern, dann verändern sich diese, obwohl man nur ein Gadget angeklickt hat.

Nach rumprobieren und Hilfe nachlesen, steh ich jetzt wieder im Eck. Ich dachte Eventtype() läßt mich die Art des Ereignisses an einem Gadget näher untersuchen - in dem Fall wird der linke Mausklick aber nicht als solcher erkannt? (und filtert somit andere Events aus)

Lg mit ?

Verfasst: 01.11.2008 20:58
von Kaeru Gaman
ich bekomme VIER debuglines, immer das selbe gadget aber teilw. verschiedene farben.

und zwar die events 256, -1, 14000 und 14001
einfach ein Debug EventType eingesetzt statt deines If EventType...

müßte in der liste zu finden sein:
http://www.purebasic.fr/english/viewtopic.php?t=28663


ja chique... da is nur #WM_KEYDOWN (256) drin.
kein plan was 14000 ist und warum da ne -1 auftaucht... *hrmpf*

...

ok 14000 ist GetFocus und 14001 ist LostFocus.
letzteren produzierst du scharweinlich selber, weil du ja am end ein SetActiveGadget drin hast.


ach und bzl. GadgetTyp:
ich meine, man müßte auch einem leeren ImageGadget ne Farbe zuweisen können...

Verfasst: 01.11.2008 21:49
von finnkerchief
Hmmm, also ich hab den Debug Eventtype() eingesetzt und er produziert bei mir nur 3 Einträge: 256, 14000, 14001.

Ich schätze, ich werde mir einen anderen Weg einfallen lassen müssen... vor allem überlege ich wie das eigentlich beim PB Editor internen Colorpicker gelöst wurde.

Das Färben von Imagegadgets ohne Umweg über ein Bildchen ist mir nicht gelungen. Hier ist das Exempel zum Test dazu (wahlweise Front/BackColor):

Code: Alles auswählen

OpenWindow(0,0,0,200,100,"Farbe wählen",#PB_Window_ScreenCentered | #PB_Window_SystemMenu)
CreateGadgetList(WindowID(0))
 
xpos=37 : ypos=10

ContainerGadget(1,xpos,ypos,20,20, #PB_Container_Double) : CloseGadgetList() 
TextGadget(2, xpos+30,ypos,150,20,"Containergadget") : ypos+35 
ImageGadget(3,xpos,ypos,20,20,0, #PB_Image_Border)
TextGadget(4, xpos+30,ypos,150,20,"Imagegadget")

SetGadgetColor(1,#PB_Gadget_BackColor, RGB(255,0,255))

SetGadgetColor(3,#PB_Gadget_BackColor, RGB(255,0,255))

;SetGadgetColor(3,#PB_Gadget_FrontColor, RGB(255,0,255))

;
Repeat
 EventID = WaitWindowEvent()

 If  EventID = #PB_Event_Gadget
     
  Select EventGadget()
      
   Case 1 
           
   EndSelect  

 EndIf

Until EventID = #PB_Event_CloseWindow 
 
End 
Ich werde mal weiter überlegen, ob ich einen anderen Zugang zum Problem finde - danke fürs durchchecken von diesem Code Kaeru! Ich war schon etwas verzweifelt, weil ich dachte ich, übersehe irgendwas Grundlegendes.

Lg, Finnkerchief

Verfasst: 01.11.2008 22:23
von Kaeru Gaman
keine ahnung wo bei mir die -1 herkam, ist auch egal.

du könntest auf die 256 reagieren, z.b. indem du den Eventtype gegen #WM_KEYDOWN prüfst,
auch wenn das wahrscheinlich garnicht die echte entsprechung ist.

oder sauberer, schreib an den anfang deines codes

Code: Alles auswählen

#PB_EventType_KeyDown = $100
dann hast du deinen gegenwert zum prüfen. ;)

... oder prüf halt auf #PB_EventType_Focus ...


und das mit dem imagegadget ohne image einfärben.... hm.. ich dachte das ginge, sorry.
hab auch grad geschaut, ob man das Image stretchen könnte, dass es
automatisch das ganze gadget füllt und man nur 1pixel nehmen muss,
aber auf die schnelle nix gefunden.

aber bezüglich on-the-fly anpassen:
du kannst auch auf ein bestehenden Image Drawen, und einfach mit Box mit einer Farbe füllen,
wenn du es dann neu dem Gadget zuweist, mit SetGadgetState( #ImageGadget, ImageID( Image ) )
wird es beim nächsten Event-durchlauf auch angezeigt.

Verfasst: 01.11.2008 22:57
von hjbremer
Das anklicken eines ContainerGadgets kann man recht simpel abfragen

Code: Alles auswählen


Procedure MouseOver(hWnd)
  ;aus dem Forum 
  GetCursorPos_(Cursor.POINT) 
  MapWindowPoints_(0, hWnd, Cursor, 1) 
  ProcedureReturn ChildWindowFromPoint_(hWnd, Cursor\x, Cursor\y) 
EndProcedure 

flag = #PB_Window_SystemMenu|1
hwnd = OpenWindow(0,0,0,400,200,"Test",flag) 
       CreateGadgetList(hwnd)
       
       container1_nr = ContainerGadget(#PB_Any,5,5,44,44,#PB_Container_Raised)
       container1_id = GadgetID(container1_nr)
       CloseGadgetList()       
       SetGadgetColor(container1_nr, #PB_Gadget_BackColor, #Blue)
       
       container2_nr = ContainerGadget(#PB_Any,55,5,44,44,#PB_Container_Raised)
       container2_id = GadgetID(container2_nr)
       CloseGadgetList()       
       SetGadgetColor(container2_nr, #PB_Gadget_BackColor, #Green)
       
       container3_nr = ContainerGadget(#PB_Any,105,5,44,44,#PB_Container_Raised)
       container3_id = GadgetID(container3_nr)
       CloseGadgetList()       
       SetGadgetColor(container3_nr, #PB_Gadget_BackColor, #Red)
       
Repeat
  
       event = WaitWindowEvent() : ;Debug event
      
             
       If Event = #PB_Event_Gadget Or Event = #PB_Event_Menu 
              
           welcherButton = EventGadget()  
                      
           Select welcherButton
           EndSelect
                
       ElseIf event = #WM_LBUTTONDOWN  ;513
      
           id = MouseOver(hWnd)      
          
           Select id
           
              Case container1_id
                  Debug "Container1"
                  farbe = GetGadgetColor(container1_nr, #PB_Gadget_BackColor) ! $FFFFFF                                            
                  SetGadgetColor(container1_nr, #PB_Gadget_BackColor, farbe)
                  
              Case container2_id
                  Debug "Container2"
                  farbe = GetGadgetColor(container2_nr, #PB_Gadget_BackColor) ! $FFFFFF                                            
                  SetGadgetColor(container2_nr, #PB_Gadget_BackColor, farbe)
                  
              Case container3_id
                  Debug "Container3"
                  farbe = GetGadgetColor(container3_nr, #PB_Gadget_BackColor) ! $FFFFFF                                            
                  SetGadgetColor(container3_nr, #PB_Gadget_BackColor, farbe)
                  
           EndSelect
           
       EndIf

Until event = #PB_Event_CloseWindow 

End       

Und zum Thema Farbauswahl gibt es im Forum + Codearchiv einige Beispiele

Verfasst: 02.11.2008 00:01
von edel
Das geht sehr einfach ohne Api

Code: Alles auswählen

;{ [...]
Structure PB_GadgetVT 
  GadgetType.l 
  SizeOf.l 
  GadgetCallback.l 
  FreeGadget.l 
  GetGadgetState.l 
  SetGadgetState.l 
  GetGadgetText.l 
  SetGadgetText.l 
  AddGadgetItem2.l 
  AddGadgetItem3.l 
  RemoveGadgetItem.l 
  ClearGadgetItemList.l 
  ResizeGadget.l 
  CountGadgetItems.l 
  GetGadgetItemState.l 
  SetGadgetItemState.l 
  GetGadgetItemText.l 
  SetGadgetItemText.l 
  OpenGadgetList2.l 
  GadgetX.l 
  GadgetY.l 
  GadgetWidth.l 
  GadgetHeight.l 
  HideGadget.l 
  AddGadgetColumn.l 
  RemoveGadgetColumn.l 
  GetGadgetAttribute.l 
  SetGadgetAttribute.l 
  GetGadgetItemAttribute2.l 
  SetGadgetItemAttribute2.l 
  SetGadgetColor.l 
  GetGadgetColor.l 
  SetGadgetItemColor2.l 
  GetGadgetItemColor2.l 
  SetGadgetItemData.l 
  GetGadgetItemData.l 
EndStructure 

Structure PB_Gadget 
  Gadget.l 
  *VT.PB_GadgetVT 
  UserData.l 
  OldCallback.l 
  Daten.l[4] 
EndStructure

Procedure mycolorproc(*gadget.PB_Gadget,type,color)
  
  If IsImage(*gadget\Daten[3]) = 0
    *gadget\Daten[3] = CreateImage(#PB_Any,16,16)
  EndIf 
  
  StartDrawing(ImageOutput(*gadget\Daten[3]))
    Box(0,0,16,16,color)
  StopDrawing()

  SetGadgetState(*gadget\daten[2],ImageID(*gadget\Daten[3]))    
    
EndProcedure


Procedure SetImageGadgetColorProc(id)
  
  Protected *gadget.pb_gadget
  
  *gadget = IsGadget(id)
  
  If *gadget
    *gadget\vt\SetGadgetColor = @mycolorproc()
    *gadget\daten[2] = id
  EndIf 
    
EndProcedure

Procedure MyImageGadget(id,x,y,cx,cy,color,flags=0)
  
  ImageGadget(id,x,y,cx,cy,0,flags)
  SetImageGadgetColorProc(id)
  SetGadgetColor(id,0,color)
  
EndProcedure

Macro ImageGadget(id,x,y,cx,cy,color,flags=0)
  MyImageGadget(id,x,y,cx,cy,color,flags)
EndMacro 

;}

Code: Alles auswählen

;######################################################################
;#
;#    Test
;#
;######################################################################

hwnd = OpenWindow(0,#PB_Ignore,#PB_Ignore,300,300,"")

ImageGadget(0,10,10,20,20,$2C64D3)
ImageGadget(1,30,10,20,20,$75658A)
ImageGadget(2,50,10,20,20,$C5833A)

Repeat
  event = WaitWindowEvent()
  
  If event = #PB_Event_Gadget
  
    If EventType() = #PB_EventType_LeftClick
            
      Select EventGadget() 
        Case 0
          Debug "imagegadget 0"
        Case 1
          Debug "imagegadget 1"
        Case 2
          Debug "imagegadget 2"
      EndSelect      
      
    EndIf 
    
  EndIf 
  
Until event = #PB_Event_CloseWindow
Es wird dem ImageGadget einfach eine Procedure, fuer das setzen der
Farbe, uebergegeben. In dieser wird auf ein Image gemalt und gesetzt.

Verfasst: 02.11.2008 01:13
von Kaeru Gaman
@edel

ist es dir entgangen, dass dies hier der Anfänger-Bereich ist?

es ist ja sehr schick, das du das alles kannst, aber einem Kollegen,
der noch keine 24 stunden im Board ist und sich mit Einsteigersachen runschlägt,
ne komplette Objektdefinition mit VTable und eigener Color Methode vor den Latz zu knallen,
und das ohne die geringste Beschreibung was du da tust...

ich mein, was soll man davon halten? /:->

Verfasst: 02.11.2008 11:01
von finnkerchief
Guten Morgen, danke für die ganzen Vorschläge!
Ich werde mit Eventtype() noch rumexperimentieren. Im Notfall löse ich die Sache mittels Imagegadget und dem on the fly generierten Image.

Den Code von hjbremer werde ich mir zu Lernzwecken genau ansehen (danke), mit API kenn ich mich nur wenig aus, aber man soll ja nicht im Status quo versauern <) Ausserdem bemühe ich mich alles so zu programmieren, dass es eventuell auch mal auf einem OSX läuft. Jedoch waren meine bisherigen Erfahrungen bei der Portierung, auch bei kleinen Programmen, eher schlecht.

@edel.... :shock: Ich weiß den guten Willen zu schätzen, gestehe aber, dass mein bescheidener Wissenshorizont gesprengt wurde :roll: Natürlich werd ich mich an dem Code auch noch versuchen, aber da fehlen mir noch einige Zwischenschritte...

Vielen Dank jedenfalls, ich werde an dem Colorpicker weiterarbeiten und sehen, dass was draus wird. Schönen Sonntag!

Verfasst: 22.11.2008 01:07
von finnkerchief
Hallo!
Zu Komplettierung des Threads, hier meine Lösung eines simplen Colorpickers. Ich habe letztendlich Imagegadgets verwendet, die Bildchen der jeweils passenden Farben zeigen. Vielleicht hilfts jemandem...

Code: Alles auswählen

;============  Prozeduren

Procedure coloredbox(imnr,length,width,color.l)      ; zeichnet eine 20x20 box in ein Image
CreateImage(imnr,length,width) 
StartDrawing(ImageOutput(imnr)) 
Box(0,0,length-1,width-1,color) 
StopDrawing()

EndProcedure

Procedure.l getboxcolor(imnr)      ; ermittelt die Farbe eines Images
Protected result.l
StartDrawing(ImageOutput(imnr)) 
result.l=Point(0,0)
StopDrawing()
ProcedureReturn result.l
EndProcedure

; ============== Hauptprogramm

OpenWindow(15,0,0,400,150,"Farbe wählen",#PB_Window_ScreenCentered | #PB_Window_SystemMenu)
CreateGadgetList(WindowID(15))
 
xpos=37 : ypos=10

coloredbox(1502,20,20,0)

ImageGadget(1501,xpos,ypos,20,20, ImageID(1502), #PB_Image_Border) : xpos+35 ; Hauptfarbfeld

; Felder für Helligkeitsstufen
ImageGadget(1502,xpos,ypos,20,20,ImageID(1502), #PB_Image_Border) :  xpos+25
ImageGadget(1503,xpos,ypos,20,20,ImageID(1502), #PB_Image_Border) :  xpos+25
ImageGadget(1504,xpos,ypos,20,20,ImageID(1502), #PB_Image_Border) :  xpos+25
ImageGadget(1505,xpos,ypos,20,20,ImageID(1502), #PB_Image_Border) :  xpos+25
ImageGadget(1506,xpos,ypos,20,20,ImageID(1502), #PB_Image_Border) :  xpos+25
ImageGadget(1507,xpos,ypos,20,20,ImageID(1502), #PB_Image_Border) 

xpos=10: ypos+40 
TextGadget(1508,xpos,ypos,20,20,"R")  : TrackBarGadget(1509,xpos+20,ypos,195, 20, 0,255) : ypos+30
TextGadget(1510,xpos,ypos,20,20,"G")  : TrackBarGadget(1511,xpos+20,ypos,195, 20, 0,255) : ypos+30
TextGadget(1512,xpos,ypos,20,20,"B")  : TrackBarGadget(1513,xpos+20,ypos,195, 20, 0,255) 
 
; Schieberstellung bestimmt Farbe im Hauptfenster
SetGadgetColor(1501,#PB_Gadget_BackColor, RGB(GetGadgetState(1509),GetGadgetState(1511),GetGadgetState(1513)))

; Felder für vordefinierte Farben
coloredbox(1515,20,20,RGB(0,0,0))
coloredbox(1516,20,20,RGB(255,0,0))
coloredbox(1517,20,20,RGB(0,255,0))
coloredbox(1518,20,20,RGB(0,0,255))
coloredbox(1519,20,20,RGB(255,255,0))
coloredbox(1520,20,20,RGB(0,255,255))

xpos=240 : ypos=10
ImageGadget(1515,xpos,ypos,20,20,ImageID(1515), #PB_Image_Border) :  xpos+25
ImageGadget(1516,xpos,ypos,20,20,ImageID(1516), #PB_Image_Border) :  xpos+25
ImageGadget(1517,xpos,ypos,20,20,ImageID(1517), #PB_Image_Border) :  xpos+25
ImageGadget(1518,xpos,ypos,20,20,ImageID(1518), #PB_Image_Border) :  xpos+25
ImageGadget(1519,xpos,ypos,20,20,ImageID(1519), #PB_Image_Border) :  xpos+25
ImageGadget(1520,xpos,ypos,20,20,ImageID(1520), #PB_Image_Border) 

coloredbox(1521,20,20,RGB(255,0,255))
coloredbox(1522,20,20,RGB(255,200,0))
coloredbox(1523,20,20,RGB(200,0,255))
coloredbox(1524,20,20,RGB(0,50,200))
coloredbox(1525,20,20,RGB(0,0,0))
coloredbox(1526,20,20,RGB(0,0,0))

xpos=240 : ypos+25
ImageGadget(1521,xpos,ypos,20,20,ImageID(1521), #PB_Image_Border) :  xpos+25
ImageGadget(1522,xpos,ypos,20,20,ImageID(1522), #PB_Image_Border) :  xpos+25
ImageGadget(1523,xpos,ypos,20,20,ImageID(1523), #PB_Image_Border) :  xpos+25
ImageGadget(1524,xpos,ypos,20,20,ImageID(1524), #PB_Image_Border) :  xpos+25
ImageGadget(1525,xpos,ypos,20,20,ImageID(1525), #PB_Image_Border) :  xpos+25
ImageGadget(1526,xpos,ypos,20,20,ImageID(1526), #PB_Image_Border) 

Repeat
 EventID = WaitWindowEvent()

If  EventID = #PB_Event_Gadget
     
  Select EventGadget()
      
    Case 1509, 1511, 1513   ; Farbeinstellung über Schieber
        
      schieberred=GetGadgetState(1509)
      schiebergreen=GetGadgetState(1511)
      schieberblue=GetGadgetState(1513)
                
      coloredbox(1501,20,20,RGB(schieberred,schiebergreen,schieberblue))
      SetGadgetState(1501,ImageID(1501))
                
      ;Helligkeitsstufen
      frstep=(255-schieberred)/6
      fgstep=(255-schiebergreen)/6
      fbstep=(255-schieberblue)/6
      
      coloredbox(1502,20,20, RGB(schieberred+frstep,schiebergreen+fgstep,schieberblue+fbstep))
      coloredbox(1503,20,20, RGB(schieberred+(frstep*2),schiebergreen+(fgstep*2),schieberblue+(fbstep*2)))
      coloredbox(1504,20,20, RGB(schieberred+(frstep*3),schiebergreen+(fgstep*3),schieberblue+(fbstep*3)))
      coloredbox(1505,20,20, RGB(schieberred+(frstep*4),schiebergreen+(fgstep*4),schieberblue+(fbstep*4)))
      coloredbox(1506,20,20, RGB(schieberred+(frstep*5),schiebergreen+(fgstep*5),schieberblue+(fbstep*5)))
      coloredbox(1507,20,20, RGB(schieberred+(frstep*6),schiebergreen+(fgstep*6),schieberblue+(fbstep*6)))      
      
      SetGadgetState(1502,ImageID(1502))
      SetGadgetState(1503,ImageID(1503))
      SetGadgetState(1504,ImageID(1504))
      SetGadgetState(1505,ImageID(1505))
      SetGadgetState(1506,ImageID(1506))
      SetGadgetState(1507,ImageID(1507))
             
   Case 1502 To 1507, 1515 To 1526 ; wenn auf ein stringgadget geklickt wird Farbe neu einstellen
   
       clickedgadget=EventGadget()
       SetGadgetState(1501,ImageID(clickedgadget))
       fetchcol.l=Getboxcolor(clickedgadget) ; Farbe des angeklickten Gadgets auslesen
              
       ; schieberstellung einstellen auf neue Farbe
       SetGadgetState(1509,Red(fetchcol))
       SetGadgetState(1511,Green(fetchcol))
       SetGadgetState(1513,Blue(fetchcol))
        
       schieberred=GetGadgetState(1509)
       schiebergreen=GetGadgetState(1511)
       schieberblue=GetGadgetState(1513)
              
       ; Helligkeitsstufen nachstellen
       frstep=(255-Red(fetchcol))/6
       fgstep=(255-Green(fetchcol))/6
       fbstep=(255-Blue(fetchcol))/6
                  
       coloredbox(1502,20,20, RGB(schieberred+frstep,schiebergreen+fgstep,schieberblue+fbstep))
       coloredbox(1503,20,20, RGB(schieberred+(frstep*2),schiebergreen+(fgstep*2),schieberblue+(fbstep*2)))
       coloredbox(1504,20,20, RGB(schieberred+(frstep*3),schiebergreen+(fgstep*3),schieberblue+(fbstep*3)))
       coloredbox(1505,20,20, RGB(schieberred+(frstep*4),schiebergreen+(fgstep*4),schieberblue+(fbstep*4)))
       coloredbox(1506,20,20, RGB(schieberred+(frstep*5),schiebergreen+(fgstep*5),schieberblue+(fbstep*5)))
       coloredbox(1507,20,20, RGB(schieberred+(frstep*6),schiebergreen+(fgstep*6),schieberblue+(fbstep*6)))      
      
       SetGadgetState(1502,ImageID(1502))
       SetGadgetState(1503,ImageID(1503))
       SetGadgetState(1504,ImageID(1504))
       SetGadgetState(1505,ImageID(1505))
       SetGadgetState(1506,ImageID(1506))
       SetGadgetState(1507,ImageID(1507))
      
       SetActiveGadget(1501)
               
   EndSelect  

EndIf

Until EventID = #PB_Event_CloseWindow 
 
End


Die hohen Image- und Gadgetnummern sind nur wegen der Einbindung des Codes in mein eigentliches Projekt notwendig und sind ein Überbleibsel.

Lg, finnkerchief