select-case abfrage wird scheinbar mehrfach ausgeführt?
Verfasst: 01.11.2008 13:33
[Sorry, ich glaube ich habe den ersten Beitrag falsch gepostet, da er nirgends aufgeschienen ist, deshalb 2 Versuch]
Hallo zusammen!
Bin seit längerem eine passiver Besucher dieses Forums gewesen und habe bisher immer Lösungen für meine Fragen finden können (Dankeschön!). Jetzt weiß ich alledings nicht weiter und hab mich entschlossen auch als aktiver Benutzer dem Forum beizutreten. Ich programmiere zwar schon eine Weile, würde mich jedoch nicht als erfahrenen Programierer sehen. Meist reichte intensives tüfteln, um meine Ideen zu realisieren.
>
>
Jetzt steck ich jedoch fest: Ich brauche für ein Projekt einen Colorpicker, der ein paar Farben vordefiniert anbietet, einen Farbmischer enthält und Helligkeitsstufen für gemischte Farben anbietet. Folgendes hab ich mir zusammengeschraubt:
Zwei Probleme beschäftigen mich:
1) die anklickbaren Farbfelder rechts wollte ich ursprünglich mit einem Containergadget realisieren, um Gadgetfarbe einfach mit setgadgetcolor-getgadgetcolor zu verändern. Das hat nicht geklappt, da Eventgadget() die Klicks auf die containergadgets nicht zurückgegeben hat. Also habe ich ein Stringgadget gewählt, was jedoch den Cursor verändert (was ich noch gerne irgendwie verhindern würde)
2) Im Moment kann man die Schieber verwenden um Farben zu mischen und die vorgefertigten Farben anklicken. Wenn man jedoch auf die Helligkeitsstufen klickt, wird die Farbe links oben nicht korrekt übernommen. Der Debugger zeigt mir an, dass jeder Einzelklick die Casebedingung 2-3x durchlaufenlässt und sich die Farbwerte dabei verändern. Nur hab ich keine Ahnung - warum?
Hoffe der Code ist nicht zu umständlich lesbar und korrekt gepostet und bin für alle Hinweise dankbar!
LG und Thx
PS: Bin im Forenbenutzen ziemlich am Anfang, deshalb hoffe ich mal, dass dieses Posting im richtigen Thread landet.
Hallo zusammen!
Bin seit längerem eine passiver Besucher dieses Forums gewesen und habe bisher immer Lösungen für meine Fragen finden können (Dankeschön!). Jetzt weiß ich alledings nicht weiter und hab mich entschlossen auch als aktiver Benutzer dem Forum beizutreten. Ich programmiere zwar schon eine Weile, würde mich jedoch nicht als erfahrenen Programierer sehen. Meist reichte intensives tüfteln, um meine Ideen zu realisieren.



Jetzt steck ich jedoch fest: Ich brauche für ein Projekt einen Colorpicker, der ein paar Farben vordefiniert anbietet, einen Farbmischer enthält und Helligkeitsstufen für gemischte Farben anbietet. Folgendes hab ich mir zusammengeschraubt:
Code: Alles auswählen
OpenWindow(15,0,0,400,150,"Farbe wählen",#PB_Window_ScreenCentered | #PB_Window_SystemMenu)
;StickyWindow(15,1)
CreateGadgetList(WindowID(15))
xpos=37 : ypos=10
ContainerGadget(1501,xpos,ypos,25,25, #PB_Container_Double) : CloseGadgetList() : xpos+35
; Schattierungen
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)
SetGadgetColor(1501,#PB_Gadget_BackColor, RGB(GetGadgetState(1509),GetGadgetState(1511),GetGadgetState(1513)))
; Schattierungen
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
; refresh
SetGadgetColor(1501,#PB_Gadget_BackColor, RGB(GetGadgetState(1509),GetGadgetState(1511),GetGadgetState(1513)))
;Schattierungen
frstep=(255-GetGadgetState(1509))/6
fgstep=(255-GetGadgetState(1511))/6
fbstep=(255-GetGadgetState(1513))/6
SetGadgetColor(1502,#PB_Gadget_BackColor, RGB(GetGadgetState(1509)+frstep,GetGadgetState(1511)+fgstep,GetGadgetState(1513)+fbstep))
SetGadgetColor(1503,#PB_Gadget_BackColor, RGB(GetGadgetState(1509)+(frstep*2),GetGadgetState(1511)+(fgstep*2),GetGadgetState(1513)+(fbstep*2)))
SetGadgetColor(1504,#PB_Gadget_BackColor, RGB(GetGadgetState(1509)+(frstep*3),GetGadgetState(1511)+(fgstep*3),GetGadgetState(1513)+(fbstep*3)))
SetGadgetColor(1505,#PB_Gadget_BackColor, RGB(GetGadgetState(1509)+(frstep*4),GetGadgetState(1511)+(fgstep*4),GetGadgetState(1513)+(fbstep*4)))
SetGadgetColor(1506,#PB_Gadget_BackColor, RGB(GetGadgetState(1509)+(frstep*5),GetGadgetState(1511)+(fgstep*5),GetGadgetState(1513)+(fbstep*5)))
SetGadgetColor(1507,#PB_Gadget_BackColor, RGB(GetGadgetState(1509)+(frstep*6),GetGadgetState(1511)+(fgstep*6),GetGadgetState(1513)+(fbstep*6)))
Case 1502 To 1507, 1515 To 1526 ; wenn auf ein gadget geklickt wird Farbe neu einstellen
fetchcol.l=GetGadgetColor(EventGadget(),#PB_Gadget_BackColor)
SetGadgetColor(1501,#PB_Gadget_BackColor,fetchcol)
Debug Str(EventGadget())+": "+Str(Red(fetchcol)) +" * "+ Str(Green(fetchcol))+" * "+ Str(Blue(fetchcol))
; schieber einstellen auf neue Farbe
SetGadgetState(1509,Red(fetchcol))
SetGadgetState(1511,Green(fetchcol))
SetGadgetState(1513,Blue(fetchcol))
; Schattierungen nachstellen
frstep=(255-Red(fetchcol))/6
fgstep=(255-Green(fetchcol))/6
fbstep=(255-Blue(fetchcol))/6
SetGadgetColor(1502,#PB_Gadget_BackColor, RGB(GetGadgetState(1509)+frstep,GetGadgetState(1511)+fgstep,GetGadgetState(1513)+fbstep))
SetGadgetColor(1503,#PB_Gadget_BackColor, RGB(GetGadgetState(1509)+(frstep*2),GetGadgetState(1511)+(fgstep*2),GetGadgetState(1513)+(fbstep*2)))
SetGadgetColor(1504,#PB_Gadget_BackColor, RGB(GetGadgetState(1509)+(frstep*3),GetGadgetState(1511)+(fgstep*3),GetGadgetState(1513)+(fbstep*3)))
SetGadgetColor(1505,#PB_Gadget_BackColor, RGB(GetGadgetState(1509)+(frstep*4),GetGadgetState(1511)+(fgstep*4),GetGadgetState(1513)+(fbstep*4)))
SetGadgetColor(1506,#PB_Gadget_BackColor, RGB(GetGadgetState(1509)+(frstep*5),GetGadgetState(1511)+(fgstep*5),GetGadgetState(1513)+(fbstep*5)))
SetGadgetColor(1507,#PB_Gadget_BackColor, RGB(GetGadgetState(1509)+(frstep*6),GetGadgetState(1511)+(fgstep*6),GetGadgetState(1513)+(fbstep*6)))
;
SetActiveGadget(1501)
EndSelect
EndIf
Until EventID = #PB_Event_CloseWindow
End
1) die anklickbaren Farbfelder rechts wollte ich ursprünglich mit einem Containergadget realisieren, um Gadgetfarbe einfach mit setgadgetcolor-getgadgetcolor zu verändern. Das hat nicht geklappt, da Eventgadget() die Klicks auf die containergadgets nicht zurückgegeben hat. Also habe ich ein Stringgadget gewählt, was jedoch den Cursor verändert (was ich noch gerne irgendwie verhindern würde)
2) Im Moment kann man die Schieber verwenden um Farben zu mischen und die vorgefertigten Farben anklicken. Wenn man jedoch auf die Helligkeitsstufen klickt, wird die Farbe links oben nicht korrekt übernommen. Der Debugger zeigt mir an, dass jeder Einzelklick die Casebedingung 2-3x durchlaufenlässt und sich die Farbwerte dabei verändern. Nur hab ich keine Ahnung - warum?

Hoffe der Code ist nicht zu umständlich lesbar und korrekt gepostet und bin für alle Hinweise dankbar!
LG und Thx
PS: Bin im Forenbenutzen ziemlich am Anfang, deshalb hoffe ich mal, dass dieses Posting im richtigen Thread landet.