Verfasst: 19.07.2008 22:41
Bei mir scheint es auch korrekt zu sein :: XP SP3
Das deutsche PureBasic-Forum
https://www.purebasic.fr/german/
Das habe ich mich auch gefragtKaeru Gaman hat geschrieben:ich frag mich auch grad, was die form des cursors mit der ermittlung der klick-koordinate zu tunhaben soll....
Glaube ich nicht, in der alten IDE wurde ASM genutzt und da dasselbehjbremer hat geschrieben:Kaeru: Ich rechne nicht, benutze keine Formel, sondern die WinApi, genau wie es die PB Farbauswahl macht, glaube ich.
Code: Alles auswählen
;BasisRoutinen für Farbauswahl wie bei PB
;HJBremer Juli 2008 Win XP PB 4.2
Declare myImageGadgetProcIni()
Declare myImageGadgetProcMakeRGB()
Declare myImageGadgetProcMakeSlide()
Declare myImageGadgetProcMakeRgbCursor()
Declare myImageGadgetProcMakeSlideCursor()
Declare myImageGadgetProcMakeDemo()
Declare myImageGadgetProcMakeDemoNew(newcolor)
Declare myImageGadgetProcMakeSlideNew(newcolor)
Declare myImageGadgetProcRGB(hWnd, message, wParam, lParam)
Declare myImageGadgetProcSlide(hWnd, message, wParam, lParam)
Declare Api_FarbverlaufRect(*var)
Declare Api_FarbverlaufTriangle(*var)
Declare myFarbenTrackBarIni()
Declare myFarbenTrackBarSet(farbe)
Declare myFarbenTrackBarState(wb)
Structure GRADIENT_TRIANGLE ;diese Structur fehlt immer noch in PB
Vertex1.l
Vertex2.l
Vertex3.l
EndStructure
Structure myFarbVerlauf
dc.l
trifarbe.l[3]
tripos.point[3]
trivert.TRIVERTEX[3]
trirect.GRADIENT_TRIANGLE
gradrect.GRADIENT_RECT
richtung.l
EndStructure
Structure myImgGadgetProcStruktur
hdcursor.l
lpPrevFunc.l
imgnr.l
imgid.l
imgsp.l
imgze.l
imgbr.l
imghh.l
imgHV.l
imgnrA.l
imgnrB.l
imgCursor1nr.l
imgCursor1id.l
imgCursor2nr.l
imgCursor2id.l
imgCursorbr.l
imgCursorhh.l
imgColor.l
mauspress.l
curpos.point
EndStructure
Structure myFarbTrackbar
tracksp.l
trackze.l
gesamtbr.l
trackbarNrR.l
trackbarNrG.l
trackbarNrB.l
trackbarNrX.l
tracktxtNrR.l
tracktxtNrG.l
tracktxtNrB.l
tracktxtNrX.l
tracktxt.s{8}
r.c ;Farbwerte intern
g.c
b.c
wert.l
EndStructure
Enumeration
#window
#butnrRGB
#butnrDemo
#butnrSlide
EndEnumeration
Define myRGBvar.myImgGadgetProcStruktur
Define myDemovar.myImgGadgetProcStruktur
Define mySlidevar.myImgGadgetProcStruktur
Define myTrackvar.myFarbTrackbar
;==============================
Define.l hwnd, EventID, wButton
hwnd = OpenWindow(#window, 100, 100, 420, 420, "Slider", #PB_Window_SystemMenu)
CreateGadgetList(hwnd)
myImageGadgetProcIni()
Repeat
EventID = WaitWindowEvent()
If EventID = #PB_Event_Gadget
wButton = EventGadget()
myFarbenTrackBarState(wbutton)
Debug Hex(myRGBvar\imgcolor) ;Farbe aus dem großen Farbfeld
Debug Hex(mySlidevar\imgcolor) ;Farbe aus dem Farbbalken
Debug Hex(myDemovar\imgcolor) ;Farbe aus dem Demofeld <----------
;Select wButton
; case xyz
;EndSelect
EndIf
Until EventID = #PB_Event_CloseWindow
End
;==============================
Procedure myImageGadgetProcIni()
Shared myRGBvar.myImgGadgetProcStruktur
Shared myDemovar.myImgGadgetProcStruktur
Shared mySlidevar.myImgGadgetProcStruktur
Shared myTrackvar.myFarbTrackbar
;großes Farbfeld
With myRGBvar
\imgsp = 10 ;Position
\imgze = 10
\imgbr = 200 ;Größe
\imghh = 300
\imgnr = CreateImage(#PB_Any,\imgbr,\imghh)
\imgid = ImageID(\imgnr)
;Startwert für mauspress im großen Farbfeld
;wenn 0, dann muß erst ins Farbfeld geklickt werden
;wenn 1, dann werden die Farben sofort geändert sowie Maus Farbfeld berührt
; allerdings kann man Feld erst verlassen, nach drücken und loslassen der Maustaste
\mauspress = 0
myImageGadgetProcMakeRGB()
myImageGadgetProcMakeRgbCursor()
ContainerGadget(#PB_Any,\imgsp,\imgze,\imgbr + 6,\imghh + 6, #PB_Container_Raised)
ImageGadget(#butnrRGB, 0, 0, 0, 0,\imgid)
SetClassLong_(GadgetID(#butnrRGB), #GCL_HCURSOR, 0) ;muß sein, wegen flackern
\lpPrevFunc = SetWindowLong_(GadgetID(#butnrRGB), #GWL_WNDPROC, @myImageGadgetProcRGB())
CloseGadgetList()
EndWith
;Farbbalken
With mySlidevar
;ergibt waagerechten Balken
;\imgsp = 240
;\imgze = 10
;\imgbr = 160
;\imghh = 50
;\imgHV = #GRADIENT_FILL_RECT_H
;ergibt senkrechten Balken
\imgsp = 240
\imgze = 10
\imgbr = 50
\imghh = 240
\imgHV = #GRADIENT_FILL_RECT_V
\imgnr = CreateImage(#PB_Any,\imgbr,\imghh)
\imgid = ImageID(\imgnr)
If \imgHV = #GRADIENT_FILL_RECT_V
\imgnrA = CreateImage(#PB_Any,\imgbr,\imghh / 2)
\imgnrB = CreateImage(#PB_Any,\imgbr,\imghh / 2)
\curpos\y =\imghh / 2
Else
\imgnrA = CreateImage(#PB_Any,\imgbr / 2,\imghh)
\imgnrB = CreateImage(#PB_Any,\imgbr / 2,\imghh)
\curpos\x =\imgbr / 2
EndIf
\imgcolor = #Gray
myImageGadgetProcMakeSlide()
myImageGadgetProcMakeSlideCursor()
ContainerGadget(#PB_Any,\imgsp,\imgze,\imgbr + 6,\imghh + 6, #PB_Container_Raised)
ImageGadget(#butnrSlide, 0, 0, 0, 0,\imgid)
SetClassLong_(GadgetID(#butnrSlide), #GCL_HCURSOR, 0) ;muß sein, wegen flackern
\lpPrevFunc = SetWindowLong_(GadgetID(#butnrSlide), #GWL_WNDPROC, @myImageGadgetProcSlide())
CloseGadgetList()
EndWith
;Demofeld
With myDemovar
\imgsp = 240
\imgze = 260
\imgbr = 50
\imghh = 50
\imgnr = CreateImage(#PB_Any,\imgbr,\imghh)
\imgid = ImageID(\imgnr)
myImageGadgetProcMakeDemo()
ContainerGadget(#PB_Any,\imgsp,\imgze,\imgbr + 6,\imghh + 6, #PB_Container_Raised)
ImageGadget(#butnrDemo, 0, 0, 0, 0,\imgid)
CloseGadgetList()
EndWith
;Trackbars
With myTrackvar
\tracksp = 10
\trackze = 330
\gesamtbr = 300
myFarbenTrackBarIni()
EndWith
;nur zur Demo
;ImageGadget(#PB_Any, 360, 10, 0, 0,ImageID(myRGBvar\imgCursor1nr))
;ImageGadget(#PB_Any, 360, 40, 0, 0,ImageID(myRGBvar\imgCursor2nr))
;ImageGadget(#PB_Any, 360, 70, 0, 0,ImageID(mySlidevar\imgCursor1nr))
;ImageGadget(#PB_Any, 360, 120, 0, 0,ImageID(mySlidevar\imgCursor2nr))
EndProcedure
Procedure myImageGadgetProcMakeRGB()
Shared myRGBvar.myImgGadgetProcStruktur
Protected br.l, hh.l, nr.l
Protected var.myFarbverlauf
Protected farbemitte.l, farbe_rot.l, farbe_blau.l, farbe_gruen.l, farbe_gelb.l
With myRGBvar
br =\imgbr
hh =\imghh
nr =\imgnr
EndWith
With var.myFarbverlauf
\dc = StartDrawing(ImageOutput(nr))
farbemitte = $707070 ;grau
farbe_rot = #Red
farbe_blau = #Blue
farbe_gruen = $90ff00
farbe_gelb = #Yellow
; p[0] = mittelpunkt des Rechtecks bzw. Spitze des Dreiecks
; p[1] = linker punkt Basis des Dreiecks
; p[2] = rechter punkt Basis des Dreiecks
\tripos[0]\x = br / 2 ;spalte Mittelpunkt bzw. Spitze des Dreiecks
\tripos[0]\y = hh / 2 ;zeile Mittelpunkt
;Dreieck unten
\tripos[1]\x = 0 :\tripos[1]\y = hh ;linker punkt Basis des Dreiecks
\tripos[2]\x = br :\tripos[2]\y = hh ;rechter punkt Basis des Dreiecks
\trifarbe[0] = farbemitte ;Spitze des Dreiecks, bleibt immer gleich
\trifarbe[1] = farbe_rot ;linker punkt Basis des Dreiecks
\trifarbe[2] = farbe_blau ;rechter punkt Basis des Dreiecks
Api_FarbverlaufTriangle(var)
;Dreieck rechts
\tripos[1]\x = br :\tripos[1]\y = hh
\tripos[2]\x = br :\tripos[2]\y = 0
\trifarbe[1] = farbe_blau
\trifarbe[2] = farbe_gruen
Api_FarbverlaufTriangle(var)
;Dreieck oben
\tripos[1]\x = br :\tripos[1]\y = 0
\tripos[2]\x = 0 :\tripos[2]\y = 0
\trifarbe[1] = farbe_gruen
\trifarbe[2] = farbe_gelb
Api_FarbverlaufTriangle(var)
;Dreieck links
\tripos[1]\x = 0 :\tripos[1]\y = 0
\tripos[2]\x = 0 :\tripos[2]\y = hh
\trifarbe[1] = farbe_gelb
\trifarbe[2] = farbe_rot
Api_FarbverlaufTriangle(var)
StopDrawing()
EndWith
EndProcedure
Procedure myImageGadgetProcMakeRgbCursor()
;diese Images werden nicht verändert, darum kann CreateImage(#PB_Any...) hier stehen
;die Farben stehen im direkten Zusammenhang mit den Parametern
;von BitBlt_(..., #SRCPAINT) + BitBlt_(..., #SRCAND) in myImageGadgetProcRGB ()
;werden die Farben vertauscht, müssen auch die Parameter vertauscht werden !
;siehe auch Reihenfolge von Farben und Parameter in den Slide Prozeduren
Shared myRGBvar.myImgGadgetProcStruktur
With myRGBvar
\hdcursor = LoadCursor_(0, #IDC_CROSS)
\imgCursorbr = 18
\imgCursorhh = 18
\imgCursor1nr = CreateImage(#PB_Any,\imgCursorbr,\imgCursorhh)
\imgCursor1id = ImageID(\imgCursor1nr)
StartDrawing(ImageOutput(\imgCursor1nr))
Box(0, 0,\imgCursorbr,\imgCursorhh, #White) ;hier White, bei BitBlt SCRAND benutzen
StopDrawing()
\imgCursor2nr = CreateImage(#PB_Any,\imgCursorbr,\imgCursorhh)
\imgCursor2id = ImageID(\imgCursor2nr)
StartDrawing(ImageOutput(\imgCursor2nr))
Box(0, 0,\imgCursorbr,\imgCursorhh, #Black) ;hier Black, bei BitBlt SCRPAINT benutzen
;Pfeil oder kleines Kreuz
;DrawImage(LoadCursor_(0, #IDC_ARROW),-10,-9) ;
Line(0, 3, 7, 0, #White)
Line(3, 0, 0, 7, #White)
StopDrawing()
EndWith
EndProcedure
Procedure myImageGadgetProcMakeSlide()
Shared mySlidevar.myImgGadgetProcStruktur
Protected br.l, hh.l, nr.l, nrA.l, nrB.l, farbe.l, richtung.l
Protected var.myFarbverlauf
Protected tp1sp.l, tp1ze.l, nrBsp.l, nrBze.l
With mySlidevar
br =\imgbr
hh =\imghh
nr =\imgnr
nrA =\imgnrA
nrB =\imgnrB
farbe =\imgcolor
richtung =\imgHV
EndWith
With var.myFarbverlauf
;richtung
\richtung = richtung ;#GRADIENT_FILL_RECT_V oder #GRADIENT_FILL_RECT_H
If \richtung = #GRADIENT_FILL_RECT_V
tp1sp = br
tp1ze = hh / 2
nrBsp = 0
nrBze = tp1ze
Else
tp1sp = br / 2
tp1ze = hh
nrBsp = tp1sp
nrBze = 0
EndIf
;oben links vom halben Balken
\tripos[0]\x = 0 ;spalte
\tripos[0]\y = 0 ;zeile
;unten rechts vom halben Balken
\tripos[1]\x = tp1sp
\tripos[1]\y = tp1ze
\dc = StartDrawing(ImageOutput(nrA)) ;dieses dc ist für Api_FarbverlaufRect
\trifarbe[0] = $200000 ;oder #Black, Startwert für Schwarz
\trifarbe[1] = farbe
Api_FarbverlaufRect(var)
StopDrawing()
\dc = StartDrawing(ImageOutput(nrB)) ;dieses dc ist für Api_FarbverlaufRect
\trifarbe[0] = farbe
\trifarbe[1] = #White
Api_FarbverlaufRect(var)
StopDrawing()
StartDrawing(ImageOutput(nr))
DrawImage(ImageID(nrA), 0, 0)
DrawImage(ImageID(nrB), nrBsp, nrBze)
StopDrawing()
EndWith
EndProcedure
Procedure myImageGadgetProcMakeSlideCursor()
;diese Images werden nicht verändert, darum kann CreateImage(#PB_Any...) hier stehen
Shared mySlidevar.myImgGadgetProcStruktur
With mySlidevar
\hdcursor = LoadCursor_(0, #IDC_CROSS)
If \imgHV = #GRADIENT_FILL_RECT_V
\imgCursorbr =\imgbr
\imgCursorhh = 9
Else
\imgCursorbr = 9
\imgCursorhh =\imghh
EndIf
\imgCursor1nr = CreateImage(#PB_Any,\imgCursorbr,\imgCursorhh)
\imgCursor1id = ImageID(\imgCursor1nr)
StartDrawing(ImageOutput(\imgCursor1nr))
Box(0, 0,\imgCursorbr,\imgCursorhh, #White) ;hier White, bei BitBlt SCRAND benutzen
StopDrawing()
\imgCursor2nr = CreateImage(#PB_Any,\imgCursorbr,\imgCursorhh)
\imgCursor2id = ImageID(\imgCursor2nr)
StartDrawing(ImageOutput(\imgCursor2nr))
Box(0, 0,\imgCursorbr,\imgCursorhh, #Black) ;hier Black, bei BitBlt SCRPAINT benutzen
If \imgHV = #GRADIENT_FILL_RECT_V ;werden Boxwerte geändert
Box(2, 2,\imgCursorbr - 4, 6, #White) ;ändern sich auch BitBltwerte in myImageGadgetProcSlide
Box(4, 4,\imgCursorbr - 8, 2, #Magenta) ;#red geht auch
Else
Box(2, 2,\imgCursorbr - 4,\imgCursorhh - 4, #White)
Box(4, 4,\imgCursorbr - 8,\imgCursorhh - 8, #Red)
EndIf
StopDrawing()
EndWith
EndProcedure
Procedure myImageGadgetProcMakeDemo()
Shared myDemovar.myImgGadgetProcStruktur
With myDemovar
StartDrawing(ImageOutput(\imgnr))
Box(0, 0,\imgbr,\imghh,\imgcolor)
StopDrawing()
EndWith
EndProcedure
Procedure myImageGadgetProcMakeDemoNew(newcolor)
Shared myDemovar.myImgGadgetProcStruktur
myDemovar\imgcolor = newcolor
myImageGadgetProcMakeDemo()
SetGadgetState(#butnrdemo, ImageID(myDemovar\imgnr))
EndProcedure
Procedure myImageGadgetProcMakeSlideNew(newcolor)
Shared mySlidevar.myImgGadgetProcStruktur
mySlidevar\imgcolor = newcolor
myImageGadgetProcMakeSlide()
SetGadgetState(#butnrslide, ImageID(myslidevar\imgnr))
EndProcedure
Procedure myImageGadgetProcRGB(hWnd, message, wParam, lParam)
;Dank an Danilo + Fluid Byte für die Beispiele als Anregung
;die Werte für curpos + mauspress sind Static durch die Strukturvariable
Shared myRGBvar.myImgGadgetProcStruktur
Protected dc.l, hdkopie.l, hdmemdc1.l, hdmemdc2.l
Protected paint.PAINTSTRUCT, r.rect
With myRGBvar
SetCursor_(\hdcursor)
Select message
Case #WM_PAINT
dc = BeginPaint_(hwnd, paint.PAINTSTRUCT)
hdkopie = CreateCompatibleBitmap_(dc,\imgbr,\imghh)
hdmemdc1 = CreateCompatibleDC_(dc)
SelectObject_(hdmemdc1, hdkopie)
hdmemdc2 = CreateCompatibleDC_(dc)
SelectObject_(hdmemdc2,\imgid)
BitBlt_(hdmemdc1, 0, 0,\imgbr,\imghh, hdmemdc2, 0, 0, #SRCCOPY)
;Farbe holen
\imgColor = GetPixel_(hdmemdc1,\curpos\x,\curpos\y)
;Cursor
SelectObject_(hdmemdc2,\imgCursor1id)
BitBlt_(hdmemdc1,\curpos\x,\curpos\y,\imgCursorbr,\imgCursorhh, hdmemdc2, 0, 0, #SRCAND)
SelectObject_(hdmemdc2,\imgCursor2id)
BitBlt_(hdmemdc1,\curpos\x,\curpos\y,\imgCursorbr,\imgCursorhh, hdmemdc2, 0, 0, #SRCPAINT)
;Bild fertig
BitBlt_(dc, 0, 0,\imgbr,\imghh, hdmemdc1, 0, 0, #SRCCOPY)
DeleteDC_(hdmemdc1)
DeleteDC_(hdmemdc2)
DeleteObject_(hdkopie)
;\imgColor = GetPixel_(dc, \curpos\x-0, \curpos\y-0) ;anstatt 0 eine 1, verschiebt GetPixel
EndPaint_(hwnd, paint)
myImageGadgetProcMakeSlideNew(\imgcolor) ;Farbbalken aktualisieren
Case #WM_LBUTTONDOWN, #WM_MOUSEMOVE
If message = #WM_LBUTTONDOWN :\mauspress = 1 : EndIf
If \mauspress
GetWindowRect_(hwnd, r.rect) ;wo ist Image auf Screen
r\right - 1 : r\bottom - 4 ;damit Cursor nicht ganz verschwindet
ClipCursor_(r) ;sorgt dafür, das Maus im Image bleibt
GetCursorPos_(\curpos) ;wo ist Maus im Screen
ScreenToClient_(hwnd,\curpos) ;umrechnen auf Image
InvalidateRect_(hwnd, 0, 0) ;Image aktualisieren
EndIf
Case #WM_LBUTTONUP
\mauspress = 0
ClipCursor_(0)
EndSelect
ProcedureReturn CallWindowProc_(\lpPrevFunc, hWnd, message, wParam, lParam)
EndWith
EndProcedure
Procedure myImageGadgetProcSlide(hWnd, message, wParam, lParam)
;Dank an Danilo + Fluid Byte für die Beispiele als Anregung
;die Werte für curpos + mauspress sind Static durch die Strukturvariable
;die Cursorwerte für BitBlt(..., SRCINVERT) durch probieren ermittelt
Shared mySlidevar.myImgGadgetProcStruktur
Protected dc.l, hdkopie.l, hdmemdc1.l, hdmemdc2.l
Protected paint.PAINTSTRUCT, r.rect
With mySlidevar
SetCursor_(\hdcursor)
Select message
Case #WM_PAINT
dc = BeginPaint_(hwnd, paint.PAINTSTRUCT)
hdkopie = CreateCompatibleBitmap_(dc,\imgbr,\imghh)
hdmemdc1 = CreateCompatibleDC_(dc)
SelectObject_(hdmemdc1, hdkopie)
hdmemdc2 = CreateCompatibleDC_(dc)
SelectObject_(hdmemdc2,\imgid)
BitBlt_(hdmemdc1, 0, 0,\imgbr,\imghh, hdmemdc2, 0, 0, #SRCCOPY)
;Farbe holen
\imgColor = GetPixel_(dc,\curpos\x,\curpos\y)
;Cursor
SelectObject_(hdmemdc2,\imgCursor1id)
BitBlt_(hdmemdc1,\curpos\x,\curpos\y,\imgCursorbr,\imgCursorhh, hdmemdc2, 0, 0, #SRCAND)
SelectObject_(hdmemdc2,\imgCursor2id)
BitBlt_(hdmemdc1,\curpos\x,\curpos\y,\imgCursorbr,\imgCursorhh, hdmemdc2, 0, 0, #SRCPAINT)
BitBlt_(hdmemdc1,\curpos\x + 4,\curpos\y + 4,\imgCursorbr - 8,\imgCursorhh - 7, hdmemdc2, 4, 4, #SRCINVERT)
;neues Bild zum dc
BitBlt_(dc, 0, 0,\imgbr,\imghh, hdmemdc1, 0, 0, #SRCCOPY)
DeleteDC_(hdmemdc1)
DeleteDC_(hdmemdc2)
DeleteObject_(hdkopie)
EndPaint_(hwnd, paint)
myImageGadgetProcMakeDemoNew(\imgcolor) ;Demofeld aktualisieren
myFarbenTrackBarSet(\imgcolor) ;Trackbars aktualisieren
Case #WM_LBUTTONDOWN, #WM_MOUSEMOVE
If message = #WM_LBUTTONDOWN :\mauspress = 1 : EndIf
If \mauspress
GetWindowRect_(hwnd, r.rect) ;wo ist Image auf Screen
r\right - 4 : r\bottom - 4 ;damit Cursor nicht ganz verschwindet
ClipCursor_(r) ;sorgt dafür, das Maus im Image bleibt
GetCursorPos_(\curpos) ;wo ist Maus im Screen
ScreenToClient_(hwnd,\curpos) ;umrechnen auf Image
InvalidateRect_(hwnd, 0, 0) ;Image aktualisieren
If \imgHV = #GRADIENT_FILL_RECT_V
\curpos\x = 0
Else
\curpos\y = 0
EndIf
EndIf
Case #WM_LBUTTONUP
\mauspress = 0
ClipCursor_(0) ;Maus freigeben von ClipCursor-Bereich
EndSelect
ProcedureReturn CallWindowProc_(\lpPrevFunc, hWnd, message, wParam, lParam)
EndWith
EndProcedure
Procedure myFarbenTrackBarIni()
Shared myTrackvar.myFarbTrackbar
Protected fontid.l, dc.l, zr.l, hh.l, br.l, sp.l, ze1.l, ze2.l, ze3.l, ze4.l
Protected lg.LOGFONT, size.size
fontid = GetStockObject_(#ANSI_FIXED_FONT) ;Systemfont holen
GetObject_(fontid, SizeOf (LOGFONT), lg.LOGFONT) ;Eigenschaften holen
fontid = CreateFontIndirect_(lg) ;Font create
dc = StartDrawing(WindowOutput(#window))
DrawingFont(FontID)
GetTextExtentPoint32_(dc, "", 8, size.size) ;bei FixFont kann man auf Text verzichten
StopDrawing()
With myTrackvar
zr = 1
hh = size\cy + 6 ;20
br = size\cx + 1 ;60
sp =\tracksp
ze1 =\trackze
ze2 = ze1 + hh + zr
ze3 = ze2 + hh + zr
ze4 = ze3 + hh + zr
\tracktxtNrR = TextGadget(#PB_Any, sp, ze1, br, hh, "$00 000", #PB_Text_Center | #PB_Text_Border)
\tracktxtNrG = TextGadget(#PB_Any, sp, ze2, br, hh, "$00 000", #PB_Text_Center | #PB_Text_Border)
\tracktxtNrB = TextGadget(#PB_Any, sp, ze3, br, hh, "$00 000", #PB_Text_Center | #PB_Text_Border)
\tracktxtNrX = TextGadget(#PB_Any, sp, ze4, br, hh, "$000000", #PB_Text_Center | #WS_DLGFRAME | #SS_NOTIFY)
SetGadgetFont(\tracktxtNrR, fontid)
SetGadgetFont(\tracktxtNrG, fontid)
SetGadgetFont(\tracktxtNrB, fontid)
SetGadgetFont(\tracktxtNrX, fontid)
SetGadgetColor(\tracktxtNrR, #PB_Gadget_BackColor, $8080FF)
SetGadgetColor(\tracktxtNrG, #PB_Gadget_BackColor, $74B416)
SetGadgetColor(\tracktxtNrB, #PB_Gadget_BackColor, $E3776F)
SetGadgetColor(\tracktxtNrX, #PB_Gadget_BackColor, #Black)
SetGadgetColor(\tracktxtNrR, #PB_Gadget_FrontColor, #White)
SetGadgetColor(\tracktxtNrG, #PB_Gadget_FrontColor, #White)
SetGadgetColor(\tracktxtNrB, #PB_Gadget_FrontColor, #White)
SetGadgetColor(\tracktxtNrX, #PB_Gadget_FrontColor, #White)
GadgetToolTip(\tracktxtNrX, "Hex-Farbwert zum Clipboard")
sp + br + zr
br =\gesamtbr - sp
ze1 =\trackze
ze2 = ze1 + hh + zr
ze3 = ze2 + hh + zr
ze4 = ze3 + hh + zr
\trackbarNrR = TrackBarGadget(#PB_Any, sp, ze1, br, hh, 0, 255)
\trackbarNrG = TrackBarGadget(#PB_Any, sp, ze2, br, hh, 0, 255)
\trackbarNrB = TrackBarGadget(#PB_Any, sp, ze3, br, hh, 0, 255)
\trackbarNrX = TrackBarGadget(#PB_Any, sp, ze4, br, hh, 0, 64)
EndWith
EndProcedure
Procedure myFarbenTrackBarSet(farbe)
Shared myTrackvar.myFarbTrackbar
With myTrackvar
\wert = farbe
\r = Red(farbe) : SetGadgetState(\trackbarNrR,\r)
\g = Green(farbe) : SetGadgetState(\trackbarNrG,\g)
\b = Blue(farbe) : SetGadgetState(\trackbarNrB,\b)
;r = \r / 8: g = \g / 8: b = \b / 8
;SetGadgetState(\trackbarNrX, r+g+b)
\tracktxt = "$" + RSet(Hex(\r), 2, "0") + " " + RSet(Str(\r), 3, "0")
SetGadgetText(\tracktxtNrR,\tracktxt)
\tracktxt = "$" + RSet(Hex(\g), 2, "0") + " " + RSet(Str(\g), 3, "0")
SetGadgetText(\tracktxtNrG,\tracktxt)
\tracktxt = "$" + RSet(Hex(\b), 2, "0") + " " + RSet(Str(\b), 3, "0")
SetGadgetText(\tracktxtNrB,\tracktxt)
\tracktxt = "$" + RSet(Hex(farbe), 6, "0")
SetGadgetText(\tracktxtNrX,\tracktxt)
EndWith
EndProcedure
Procedure myFarbenTrackBarState(wb)
Static x, xx
Shared myTrackvar.myFarbTrackbar
With myTrackvar
Select wB
Case \tracktxtNrX : SetClipboardText("$" + RSet(Hex(\wert), 6, "0"))
Case \trackbarNrR :\r = GetGadgetState(\trackbarnrR) :\wert = RGB(\r,\g,\b) : myFarbenTrackBarSet(\wert)
Case \trackbarNrG :\g = GetGadgetState(\trackbarnrG) :\wert = RGB(\r,\g,\b) : myFarbenTrackBarSet(\wert)
Case \trackbarNrB :\b = GetGadgetState(\trackbarnrB) :\wert = RGB(\r,\g,\b) : myFarbenTrackBarSet(\wert)
Case \trackbarNrX
If EventwParam() = 1
xx = GetGadgetState(\trackbarnrX)
If xx > x
\r + 8 :\g + 8 :\b + 8
ElseIf xx < x
\r - 8 :\g - 8 :\b - 8
EndIf
x = xx
\wert = RGB(\r,\g,\b)
myFarbenTrackBarSet(\wert)
EndIf
EndSelect
myImageGadgetProcMakeDemoNew(\wert)
EndWith
EndProcedure
Procedure Api_FarbverlaufRect(*var.myFarbverlauf)
;richtung
;#GRADIENT_FILL_RECT_V = 1
;#GRADIENT_FILL_RECT_H = 0
With *var
;UpperLeft = oben links vom Viereck
\trivert[0]\x =\tripos[0]\x
\trivert[0]\y =\tripos[0]\y
\trivert[0]\Red = Red(\trifarbe[0]) << 8
\trivert[0]\Green = Green(\trifarbe[0]) << 8
\trivert[0]\Blue = Blue(\trifarbe[0]) << 8
;LowerRight = unten rechts
\trivert[1]\x =\tripos[1]\x
\trivert[1]\y =\tripos[1]\y
\trivert[1]\Red = Red(\trifarbe[1]) << 8
\trivert[1]\Green = Green(\trifarbe[1]) << 8
\trivert[1]\Blue = Blue(\trifarbe[1]) << 8
\gradrect\UpperLeft = 0 ;an diesen Werten nicht rumspielen
\gradrect\LowerRight = 1 ;sonst Memory Fehler
Gradientfill_(\dc,\trivert, 2,\gradrect, 1,\richtung)
EndWith
EndProcedure
Procedure Api_FarbverlaufTriangle(*var.myFarbverlauf)
With *var
;oben
\trivert[0]\x =\tripos[0]\x
\trivert[0]\y =\tripos[0]\y
\trivert[0]\Red = Red(\trifarbe[0]) << 8
\trivert[0]\Green = Green(\trifarbe[0]) << 8
\trivert[0]\Blue = Blue(\trifarbe[0]) << 8
;links
\trivert[1]\x =\tripos[1]\x
\trivert[1]\y =\tripos[1]\y
\trivert[1]\Red =(Red(\trifarbe[1]) << 8)
\trivert[1]\Green =(Green(\trifarbe[1]) << 8)
\trivert[1]\Blue =(Blue(\trifarbe[1]) << 8)
;rechts
\trivert[2]\x =\tripos[2]\x
\trivert[2]\y =\tripos[2]\y
\trivert[2]\Red =(Red(\trifarbe[2]) << 8)
\trivert[2]\Green =(Green(\trifarbe[2]) << 8)
\trivert[2]\Blue =(Blue(\trifarbe[2]) << 8)
\trirect\Vertex1 = 0 ;nicht rumspielen
\trirect\Vertex2 = 1 ;sonst Memory Fehler
\trirect\Vertex3 = 2
Gradientfill_(\dc,\trivert, 3,\trirect, 1, #GRADIENT_FILL_TRIANGLE)
EndWith
EndProcedure