Wenn man den Code mit 4.3 zu einer Exe compiliert, ist diese ca 30 Kb groß
mit 4.5rc2 leider ca 60 Kb. Man sollte also die alten Versionen ncht löschen.
Code: Alles auswählen
;PB ab 4.3 x86 - Windows XP - von HJBremer
;Design nach einer Idee aus dem Codearchiv
Structure FarbEinsteller
window.i
wFarbe.i
eventid.i
wButton.i
consp.i ;normalerweise null
conze.i ;normalerweise null
conbr.i ;Containerbreite wird in INI festgelegt
conhh.i ;Containerhöhe
connr.i ;Container pbnr
confb.i ;Container BackColor,
zr.i ;Abstand von Button zu Button, Zwischenraum
hh.i ;Höhe der Buttons
tbr1.i ;Breite der Buttons
tbr2.i
tbr3.i
trackbr.i ;Breite Trackbar
imagebr.i ;Breite Image
tracktic.f ;für Callback
zeile.i[6]
spalte.i[8]
tracknr.i[4] ;PB Buttonnummern
charLks.i[4]
charRts.i[4]
textHex.i[6]
textDez.i[6]
img1.i ;PB Imagenummern
img2.i
imgnr1.i
imgnr2.i
r.c ;Farbwerte intern
g.c
b.c
farbwert.i ;Farbwert intern
RGBwert.i ;Rückgabewert als Zahl
RGBhex.s ;oder als String
EndStructure
EnableExplicit
Global farbEinsteller.FarbEinsteller
Macro SetHex(x,y)
RSet(Hex(x),y,"0")
EndMacro
Procedure myFarbEinstellerCallback(hwnd, msg, wParam, lParam)
Protected result = #PB_ProcessPureBasicEvents
Protected point.point, pp.f
Static flag
With farbEinsteller
If msg = #WM_HSCROLL
GetCursorPos_(point)
ScreenToClient_(lparam, point)
pp = (point\x - 7) / farbEinsteller\tracktic ; Justage ist hier -7
If lparam = GadgetID(\tracknr[1]): SetGadgetState(\tracknr[1], pp)
ElseIf lparam = GadgetID(\tracknr[2]): SetGadgetState(\tracknr[2], pp)
ElseIf lparam = GadgetID(\tracknr[3]): SetGadgetState(\tracknr[3], pp)
EndIf
ElseIf msg = #WM_NCLBUTTONDBLCLK And wParam = #HTCAPTION
Select flag
Case 0
flag = 1
StickyWindow(\window, 0)
StatusBarText(0, 1, "StickyWindow: off")
Case 1
flag = 0
StickyWindow(\window, 1)
StatusBarText(0, 1, "StickyWindow: on")
EndSelect
EndIf
EndWith
ProcedureReturn result
EndProcedure
Procedure myFarbEinstellerToolTip()
With farbEinsteller
GadgetToolTip(\textHex[1], "rot, Hexwert, Klick = minus 16")
GadgetToolTip(\charLks[1], "rot, Klick = minus 1")
GadgetToolTip(\charRts[1], "rot, Klick = plus 1")
GadgetToolTip(\textDez[1], "rot, Dezimalwert, Klick = plus 16")
GadgetToolTip(\textHex[2], "grün, Hexwert, Klick = minus 16")
GadgetToolTip(\charLks[2], "grün, Klick = minus 1")
GadgetToolTip(\charRts[2], "grün, Klick = plus 1")
GadgetToolTip(\textDez[2], "grün, Dezimalwert, Klick = plus 16")
GadgetToolTip(\textHex[3], "blau, Hexwert, Klick = minus 16")
GadgetToolTip(\charLks[3], "blau, Klick = minus 1")
GadgetToolTip(\charRts[3], "blau, Klick = plus 1")
GadgetToolTip(\textDez[3], "blau, Dezimalwert, Klick = plus 16")
GadgetToolTip(\textHex[4], "Hexwert 24 Bit, Klick = alle minus 16")
GadgetToolTip(\textDez[4], "Dezimalwert 24 Bit, Klick = alle plus 16")
GadgetToolTip(\textHex[5], "Hexwert RGB, Klick = Hex to Clipboard")
GadgetToolTip(\textDez[5], "Dezimalwert RGB, Klick = Dez to Clipboard")
GadgetToolTip(\imgnr2, "mit F5 Farbwert der Mausposi holen, FarbEinsteller muß den Focus haben")
EndWith
EndProcedure
Procedure myFarbEinstellerIni()
With farbEinsteller
\zr = 5
\hh = 20
\tbr1 = 26
\tbr2 = 15
\tbr3 = 56
\trackbr = 500 - (4*\zr) - (2*\tbr1) - (2*\tbr2) - 4
\imagebr = 500 - (4*\zr) - (2*\tbr3) - \zr
\zeile[1] = \zr + 1
\zeile[2] = \zeile[1] + \zr + \hh
\zeile[3] = \zeile[2] + \zr + \hh
\zeile[4] = \zeile[3] + \zr + \hh
\zeile[5] = \zeile[4] + \zr + \hh
\conhh = \zeile[5] + \hh + \zr + \zr
\spalte[1] = \zr
\spalte[2] = \spalte[1] + \tbr1
\spalte[3] = \spalte[2] + \tbr2 + \zr
\spalte[4] = \spalte[3] + \trackbr + \zr
\spalte[5] = \spalte[4] + \tbr2
\spalte[6] = \spalte[1] + \tbr3 + \zr
\spalte[7] = \spalte[6] + \imagebr + \zr
\conbr = \spalte[7] + \tbr3 + \zr + \zr
\connr = ContainerGadget(#PB_Any,\consp,\conze,\conbr,\conhh,#PB_Container_Double)
;die Container BackColor
If \confb = 0: \confb = $DBDBDB: EndIf
SetGadgetColor(\connr, #PB_Gadget_BackColor, \confb)
;rot
\textHex[1] = TextGadget (#PB_Any, \spalte[1], \zeile[1], \tbr1, \hh, "0", #WS_DLGFRAME|#SS_NOTIFY)
\charLks[1] = TextGadget (#PB_Any, \spalte[2], \zeile[1], \tbr2, \hh, "R", #WS_DLGFRAME|#SS_NOTIFY)
\tracknr[1] = TrackBarGadget(#PB_Any, \spalte[3], \zeile[1], \trackbr,\hh, 0, 255)
\charRts[1] = TextGadget (#PB_Any, \spalte[4], \zeile[1], \tbr2, \hh, "R", #WS_DLGFRAME|#SS_NOTIFY)
\textDez[1] = TextGadget (#PB_Any, \spalte[5], \zeile[1], \tbr1, \hh, "0", #WS_DLGFRAME|#SS_NOTIFY)
;grün
\textHex[2] = TextGadget (#PB_Any, \spalte[1], \zeile[2], \tbr1, \hh, "0", #WS_DLGFRAME|#SS_NOTIFY)
\charLks[2] = TextGadget (#PB_Any, \spalte[2], \zeile[2], \tbr2, \hh, "G" , #WS_DLGFRAME|#SS_NOTIFY)
\tracknr[2] = TrackBarGadget(#PB_Any, \spalte[3], \zeile[2], \trackbr,\hh, 0, 255)
\charRts[2] = TextGadget (#PB_Any, \spalte[4], \zeile[2], \tbr2, \hh, "G", #WS_DLGFRAME|#SS_NOTIFY)
\textDez[2] = TextGadget (#PB_Any, \spalte[5], \zeile[2], \tbr1, \hh, "0", #WS_DLGFRAME|#SS_NOTIFY)
;blau
\textHex[3] = TextGadget (#PB_Any, \spalte[1], \zeile[3], \tbr1, \hh, "0", #WS_DLGFRAME|#SS_NOTIFY)
\charLks[3] = TextGadget (#PB_Any, \spalte[2], \zeile[3], \tbr2, \hh, "B", #WS_DLGFRAME|#SS_NOTIFY)
\tracknr[3] = TrackBarGadget(#PB_Any, \spalte[3], \zeile[3], \trackbr,\hh, 0, 255)
\charRts[3] = TextGadget (#PB_Any, \spalte[4], \zeile[3], \tbr2, \hh, "B", #WS_DLGFRAME|#SS_NOTIFY)
\textDez[3] = TextGadget (#PB_Any, \spalte[5], \zeile[3], \tbr1, \hh, "0", #WS_DLGFRAME|#SS_NOTIFY)
\tracktic = (\trackbr - 13) / 256 ; Justage ist hier 13 für Rand vom Trackbar, 256 ist maxwert 0 bis 255
SetGadgetColor(\charLks[1],#PB_Gadget_FrontColor,#Red)
SetGadgetColor(\charLks[2],#PB_Gadget_FrontColor,$B000) ;#Green
SetGadgetColor(\charLks[3],#PB_Gadget_FrontColor,#Blue)
SetGadgetColor(\charRts[1],#PB_Gadget_FrontColor,#Red)
SetGadgetColor(\charRts[2],#PB_Gadget_FrontColor,$B000) ;#Green
SetGadgetColor(\charRts[3],#PB_Gadget_FrontColor,#Blue)
;untere Buttons
\textHex[4] = TextGadget(#PB_Any, \spalte[1], \zeile[4], \tbr3, \hh, "$000000",#WS_DLGFRAME|#SS_NOTIFY)
\textDez[4] = TextGadget(#PB_Any, \spalte[7], \zeile[4], \tbr3, \hh, "0" ,#WS_DLGFRAME|#SS_NOTIFY)
\textHex[5] = TextGadget(#PB_Any, \spalte[1], \zeile[5], \tbr3, \hh, "$000000",#WS_DLGFRAME|#SS_NOTIFY)
\textDez[5] = TextGadget(#PB_Any, \spalte[7], \zeile[5], \tbr3, \hh, "0" ,#WS_DLGFRAME|#SS_NOTIFY)
\img1 = CreateImage(#PB_Any, \imagebr, \hh-2)
\img2 = CreateImage(#PB_Any, \imagebr, \hh-2)
\imgnr1 = ImageGadget(#PB_Any, \spalte[6]-2, \zeile[4],0,0,ImageID(\img1),#PB_Image_Border)
\imgnr2 = ImageGadget(#PB_Any, \spalte[6]-2, \zeile[5],0,0,ImageID(\img2),#PB_Image_Border)
EndWith
myFarbEinstellerToolTip()
EndProcedure
Procedure myFarbEinstellerState()
With farbEinsteller
Select \wButton
;rot
Case \tracknr[1], \textHex[1], \textDez[1], \charLks[1], \charRts[1]
\r = GetGadgetState(\tracknr[1])
Select \wButton
Case \tracknr[1]
Case \textHex[1]: \r - 16
Case \textDez[1]: \r + 16
Case \charLks[1]: \r - 1
Case \charRts[1]: \r + 1
EndSelect
SetGadgetState(\tracknr[1], \r)
SetGadgetText(\textHex[1], SetHex(\r,2))
SetGadgetText(\textDez[1], Str(\r))
SetGadgetText(\textHex[4], "$0000" + SetHex(\r,2))
SetGadgetColor(\textHex[4],#PB_Gadget_FrontColor,#Red)
\farbwert = \r
;grün
Case \tracknr[2], \textHex[2], \textDez[2], \charLks[2], \charRts[2]
\g = GetGadgetState(\tracknr[2])
Select \wButton
Case \tracknr[2]
Case \textHex[2]: \g - 16
Case \textDez[2]: \g + 16
Case \charLks[2]: \g - 1
Case \charRts[2]: \g + 1
EndSelect
SetGadgetState(\tracknr[2], \g)
SetGadgetText(\textHex[2], SetHex(\g,2))
SetGadgetText(\textDez[2], Str(\g))
SetGadgetText(\textHex[4], "$00" + SetHex(\g,2)+"00")
SetGadgetColor(\textHex[4],#PB_Gadget_FrontColor,$B000) ;#Green
\farbwert = \g << 8
;blau
Case \tracknr[3], \textHex[3], \textDez[3], \charLks[3], \charRts[3]
\b = GetGadgetState(\tracknr[3])
Select \wButton
Case \tracknr[3]
Case \textHex[3]: \b - 16
Case \textDez[3]: \b + 16
Case \charLks[3]: \b - 1
Case \charRts[3]: \b + 1
EndSelect
SetGadgetState(\tracknr[3], \b)
SetGadgetText (\textHex[3], SetHex(\b,2))
SetGadgetText (\textDez[3], Str(\b))
SetGadgetText (\textHex[4], "$" + SetHex(\b,2) + "0000")
SetGadgetColor(\textHex[4], #PB_Gadget_FrontColor, #Blue)
\farbwert = \b << 16
;rgb
Case \textHex[4], \textDez[4]
\r = GetGadgetState(\tracknr[1])
\g = GetGadgetState(\tracknr[2])
\b = GetGadgetState(\tracknr[3])
If \wButton = \textHex[4]
\r - 16: \g - 16: \b - 16
Else
\r + 16: \g + 16: \b + 16
EndIf
SetGadgetState(\tracknr[1], \r)
SetGadgetState(\tracknr[2], \g)
SetGadgetState(\tracknr[3], \b)
SetGadgetText(\textHex[1], SetHex(\r,2))
SetGadgetText(\textHex[2], SetHex(\g,2))
SetGadgetText(\textHex[3], SetHex(\b,2))
SetGadgetText(\textDez[1], Str(\r))
SetGadgetText(\textDez[2], Str(\g))
SetGadgetText(\textDez[3], Str(\b))
SetGadgetText(\textHex[4], "$"+SetHex(\b,2) + "0000")
SetGadgetColor(\textHex[4],#PB_Gadget_FrontColor,#Blue)
\farbwert = \b << 16
Case \textHex[5]: SetClipboardText(GetGadgetText(\textHex[5]))
;\eventid = #PB_Event_CloseWindow
Case \textDez[5]: SetClipboardText(GetGadgetText(\textDez[5]))
;\eventid = #PB_Event_CloseWindow
Default: ProcedureReturn -1 ;oder null etc. also tue nix
EndSelect
SetGadgetText(\textDez[4], StrU(\farbwert,#PB_Long))
\RGBwert = (\b << 16) | (\g << 8) | (\r)
\RGBhex = Hex(\RGBwert)
SetGadgetText(\textHex[5], "$"+SetHex(\b,2)+SetHex(\g,2)+SetHex(\r,2))
SetGadgetText(\textDez[5], StrU(\RGBwert,#PB_Long))
StartDrawing(ImageOutput(\img1))
;Box(0, 0, \imagebr, \hh, \confb)
Box(0, 0, \imagebr, \hh/3, \r)
Box(0, 1*(\hh/3), \imagebr, \hh/3, \g << 8)
Box(0, 2*(\hh/3), \imagebr, \hh/3, \b << 16)
StopDrawing()
SetGadgetState(\imgnr1,ImageID(\img1))
StartDrawing(ImageOutput(\img2))
Box(0, 0, \imagebr, \hh, \RGBwert)
DrawingMode(#PB_2DDrawing_Transparent)
FrontColor(~ \RGBwert & $FFFFFF) ;invertiert die Farbe
DrawText(0,2,"RGB")
StopDrawing()
SetGadgetState(\imgnr2,ImageID(\img2))
ProcedureReturn \RGBwert
EndWith
EndProcedure
Procedure myFarbEinstellerSet()
With farbEinsteller
\r = Red(\wfarbe)
SetGadgetState(\tracknr[1],\r)
\wButton = \tracknr[1]
myFarbEinstellerState()
\g = Green(\wfarbe)
SetGadgetState(\tracknr[2],\g)
\wButton = \tracknr[2]
myFarbEinstellerState()
\b = Blue(\wfarbe)
SetGadgetState(\tracknr[3],\b)
\wButton = \tracknr[3]
myFarbEinstellerState()
EndWith
EndProcedure
Procedure GetColorUnderMouse()
Protected cursorPos.POINT
Protected hDC = GetDC_(0)
GetCursorPos_(cursorPos)
Protected farbe = GetPixel_(hDC, cursorPos\x, cursorPos\y)
ReleaseDC_(0, hDC)
ProcedureReturn farbe
EndProcedure
;===============================
With farbEinsteller
\window = OpenWindow(#PB_Any, 220, 220, 0, 0, " FarbEinsteller by HJBremer", #PB_Window_SystemMenu)
SetWindowLongPtr_(WindowID(\window), #GWL_EXSTYLE, #WS_EX_TOOLWINDOW)
CreateStatusBar(0, WindowID(\window))
AddStatusBarField(#PB_Ignore)
AddStatusBarField(#PB_Ignore)
StatusBarText(0, 0, "F5 = GetColorUnderMouse", #PB_StatusBar_Center)
StatusBarText(0, 1, "DoppelClick auf Titelleiste = StickyWindow on/off")
AddKeyboardShortcut(\window, #PB_Shortcut_F5, #PB_Shortcut_F5)
AddKeyboardShortcut(\window, #PB_Shortcut_Escape, #PB_Shortcut_Escape)
\wFarbe = GetColorUnderMouse()
myFarbEinstellerIni()
myFarbEinstellerSet()
ResizeWindow(\window,#PB_Ignore,#PB_Ignore,\conbr,\conhh + StatusBarHeight(0))
StickyWindow(\window, 1)
SetWindowCallback(@myFarbEinstellerCallback())
Repeat: \EventID = WaitWindowEvent() ;:Debug \eventid
If \EventID = #PB_Event_Gadget Or \EventID = #PB_Event_Menu
\wButton = EventGadget()
Select \wButton
Case #PB_Shortcut_Escape: Break
Case #PB_Shortcut_F5:
\wFarbe = GetColorUnderMouse(): myFarbEinstellerSet()
Default: myFarbEinstellerState()
EndSelect
EndIf
Until \EventID = #PB_Event_CloseWindow
CloseWindow(\window)
EndWith
End