select-case abfrage wird scheinbar mehrfach ausgeführt?
-
- Beiträge: 17
- Registriert: 01.11.2008 12:48
- Wohnort: Österreich
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
Lg
System: Win XP, SP3, PB 4.31, Pentium D 3 GHz 1 GB RAM
-
- Beiträge: 17
- Registriert: 01.11.2008 12:48
- Wohnort: Österreich
Hallo, jetzt hab ich mich zu früh gefreut, oder ich übersehe etwas grundlegendes. Ich habe den Code angepasst:
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 ?
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
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 ?
System: Win XP, SP3, PB 4.31, Pentium D 3 GHz 1 GB RAM
-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
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...
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...
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Der Weise weiß, dass er ein Narr ist.
-
- Beiträge: 17
- Registriert: 01.11.2008 12:48
- Wohnort: Österreich
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):
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
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
Lg, Finnkerchief
System: Win XP, SP3, PB 4.31, Pentium D 3 GHz 1 GB RAM
-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
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
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.
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

... 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.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Der Weise weiß, dass er ein Narr ist.
- hjbremer
- Beiträge: 822
- Registriert: 27.02.2006 22:30
- Computerausstattung: von gestern
- Wohnort: Neumünster
Das anklicken eines ContainerGadgets kann man recht simpel abfragen
Und zum Thema Farbauswahl gibt es im Forum + Codearchiv einige Beispiele
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
Purebasic 5.70 x86 5.72 X 64 - Windows 10
Der Computer hat dem menschlichen Gehirn gegenüber nur einen Vorteil: Er wird benutzt
grüße hjbremer
Der Computer hat dem menschlichen Gehirn gegenüber nur einen Vorteil: Er wird benutzt
grüße hjbremer
Das geht sehr einfach ohne Api
Es wird dem ImageGadget einfach eine Procedure, fuer das setzen der
Farbe, uebergegeben. In dieser wird auf ein Image gemalt und gesetzt.
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
Farbe, uebergegeben. In dieser wird auf ein Image gemalt und gesetzt.
-
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
@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?
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?

Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Der Weise weiß, dass er ein Narr ist.
-
- Beiträge: 17
- Registriert: 01.11.2008 12:48
- Wohnort: Österreich
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....
Ich weiß den guten Willen zu schätzen, gestehe aber, dass mein bescheidener Wissenshorizont gesprengt wurde
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!
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

@edel....


Vielen Dank jedenfalls, ich werde an dem Colorpicker weiterarbeiten und sehen, dass was draus wird. Schönen Sonntag!
System: Win XP, SP3, PB 4.31, Pentium D 3 GHz 1 GB RAM
-
- Beiträge: 17
- Registriert: 01.11.2008 12:48
- Wohnort: Österreich
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...
Die hohen Image- und Gadgetnummern sind nur wegen der Einbindung des Codes in mein eigentliches Projekt notwendig und sind ein Überbleibsel.
Lg, finnkerchief
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
System: Win XP, SP3, PB 4.31, Pentium D 3 GHz 1 GB RAM