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.