ColorChooser Au3
ColorChooser Au3
#cs
WM_COMMAND
WM_NCRBUTTONDOWN
WM_SETCURSOR
WM_SYSCOMMAND
Available functions:
_ColorChooserDialog
Example1:
#Include <ColorChooser.au3>
Opt('MustDeclareVars', 1)
While 1
$Msg = GUIGetMsg()
Switch $Msg
Case $GUI_EVENT_CLOSE
ExitLoop
Case $Button
$Data = _ColorChooserDialog($Color, $hForm)
If $Data > -1 Then
GUICtrlSetBkColor($Label, $Data)
$Color = $Data
EndIf
EndSwitch
WEnd
#Include <ColorChooser.au3>
#Include <ColorPicker.au3>
Opt('MustDeclareVars', 1)
Global $hForm, $Msg, $Label, $Picker
While 1
$Msg = GUIGetMsg()
Switch $Msg
Case $GUI_EVENT_CLOSE
ExitLoop
Case $Picker
GUICtrlSetBkColor($Label, _GUIColorPicker_GetColor($Picker))
EndSwitch
WEnd
#ce
#Include-once
#Include <Constants.au3>
#Include <EditConstants.au3>
#Include <GUIConstantsEx.au3>
#Include <GDIPlus.au3>
#Include <Memory.au3>
#Include <StaticConstants.au3>
#Include <WinAPI.au3>
#Include <WindowsConstants.au3>
#EndRegion Header
#cs
DO NOT USE THIS ARRAY IN THE SCRIPT, INTERNAL USE ONLY!
#ce
For $i = 1 To UBound($ccPalette) - 1
$ccPalette[$i][0] = -1
Next
#cs
#ce
Global $__CC_WM0111 = 0
Global $__CC_WM0020 = 0
#EndRegion Local Variables and Constants
#Region Initialization
; IMPORTANT! If you register the following window messages in your code, you should
call handlers from this library until
; you return from your handlers, otherwise the Clor Chooser dialog box will not
work properly. For example:
;
; Func MY_WM_SETCURSOR($hWnd, $iMsg, $wParam, $lParam)
; Local $Result = CC_WM_SETCURSOR($hWnd, $iMsg, $wParam, $lParam)
; If Not $Result Then
; Return 0
; EndIf
; ...
; Return $GUI_RUNDEFMSG
; EndFunc ;==>MY_WM_SETCURSOR
GUIRegisterMsg($CC_WM_COMMAND, 'CC_WM_COMMAND')
GUIRegisterMsg($CC_WM_NCRBUTTONDOWN, 'CC_WM_NCRBUTTONDOWN')
GUIRegisterMsg($CC_WM_SETCURSOR, 'CC_WM_SETCURSOR')
GUIRegisterMsg($CC_WM_SYSCOMMAND, 'CC_WM_SYSCOMMAND')
#EndRegion Initialization
; #FUNCTION#
===================================================================================
=================================
; Name...........: _ColorChooserDialog
; Description....: Creates a "Color Chooser" dialog box that enables the user to
select a color.
; Syntax.........: _ColorChooserDialog ( [$iColor [, $hParent [, $iRefType [,
$iReturnType [, $iFlags [, $sTitle]]]]]] )
; Parameters.....: $iColor - Default selected color. Type of this parameter
depends on the $iRefType value and
; should be one of the following types.
;
; RGB (Red, Green, Blue)
; Value of RGB color, like 0xRRGGBB.
;
; HSL (Hue, Saturation, Lightness)
; 3-item array of values for the Hue, Saturation,
and Lightness, respectively.
;
; [0] - H (0-240)
; [1] - S (0-240)
; [2] - L (0-240)
;
; HSB (Hue, Saturation, Brightness)
; 3-item array of values for the Hue, Saturation,
and Brightness, respectively.
;
; [0] - H (0-360)�
; [1] - S (0-100)%
; [2] - B (0-100)%
;
; $hParent - Handle to the window that owns the dialog box.
; $iRefType - Type of $iColor passed in, valid values:
; |0 - RGB
; |1 - HSL
; |2 - HSB
; $iReturnType - Determines return type, valid values:
; |0 - RGB
; |1 - HSL
; |2 - HSB
; $iFlags - The flags that defines a style of the "Color
Chooser" dialog box. This parameter can be
; a combination of the following values.
;
; $CC_FLAG_SOLIDCOLOR
; $CC_FLAG_CAPTURECOLOR
; $CC_FLAG_USERCOLOR
; $CC_FLAG_DEFAULT
;
; (See constants section in this library)
;
; If this parameter contains $CC_FLAG_USERCOLOR
flag, you can save up to 20 color values (in RGB).
; These values are in the following registry hive
and will be available for other programs that
; use _ColorChooserDialog() function.
;
; HKEY_CURRENT_USER\SOFTWARE\Y's Common Data\Color
Chooser\Palette
;
; $sTitle - Title of the "Color Chooser" dialog box.
; Return values..: Success - Selected color depending on value of the
$iReturnType parameter (see above).
; Failure - (-1)
; Author.........: Yashied
; Modified.......:
; Remarks........: This function is fully compatible with the ColorPicker.au3 UDF
library (v1.5) and can be used as a custom
; function for a "Color Chooser" dialog box (see examples). Since
both these libraries use the same window messages,
; when using these messages in your code, you should refer to only
one message from any library (see above).
; Related........:
; Link...........:
; Example........: Yes
;
===================================================================================
============================================
_GDIPlus_Startup()
$ccData[8 ] = _Image_Arrow()
Local $hPopup = 0, $Msg, $Xp, $Yp, $Pos, $Cursor, $Index, $H1 = 0, $H2 = 0,
$Pressed = False, $Return = False
Local $H1 = 69 * (BitAND($iFlags, $CC_FLAG_SOLIDCOLOR) = $CC_FLAG_SOLIDCOLOR)
LocaL $H2 = 56 * (BitAND($iFlags, $CC_FLAG_USERCOLOR) = $CC_FLAG_USERCOLOR)
Local $GUIOnEventMode = Opt('GUIOnEventMode', 0)
Local $GUICloseOnESC = Opt('GUICloseOnESC', 1)
GUISetState(@SW_DISABLE, $hParent)
For $i = 10 To 18
GUICtrlSetLimit($ccData[$i], 3)
Next
CC_SetPalette()
CC_SetPicker()
CC_ValidateColor($iColor, $iRefType)
CC_Update($ccData[20])
CC_SetColor($__CC_RGB)
GUISetState(@SW_SHOW, $ccData[0])
$ccData[22] = 0
While 1
$Msg = 0
$Cursor = GUIGetCursorInfo($ccData[0])
If (Not @error) And (BitAND(WinGetState($ccData[0]), 8)) Then
If $Cursor[2] Then
If $Cursor[4] = $ccData[1] Then
If Not $Pressed Then
$Msg = $GUI_EVENT_PRIMARYDOWN
EndIf
Else
$Pressed = 1
EndIf
Else
$Pressed = 0
EndIf
EndIf
If Not $Msg Then
$Msg = GUIGetMsg(1)
If $Msg[1] = $ccData[0] Then
$Msg = $Msg[0]
Else
ContinueLoop
EndIf
If $Msg = $GUI_EVENT_PRIMARYDOWN Then
ContinueLoop
EndIf
EndIf
Switch $Msg
Case $GUI_EVENT_PRIMARYDOWN
GUICtrlSetState($ccData[23], $GUI_FOCUS)
$Xp = Default
While CC_IsPressed(0x01)
$Pos = CC_GetCursor($ccData[1])
If Not @error Then
If ($Pos[0] <> $Xp) Or ($Pos[1] <> $Yp) Then
For $i = 1 To 2
$__CC_HSB[$i] = Round($Pos[$i -
1] / 240 * 100)
If $__CC_HSB[$i] > 100 Then
$__CC_HSB[$i] = 100
EndIf
If $__CC_HSB[$i] < 0 Then
$__CC_HSB[$i] = 0
EndIf
Next
$__CC_HSB[2] = 100 - $__CC_HSB[2]
CC_Update(3, 0)
$Xp = $Pos[0]
$Yp = $Pos[1]
EndIf
EndIf
WEnd
Case 0
ContinueLoop
Case $GUI_EVENT_CLOSE
ExitLoop
Case $ccData[2], $ccData[3], $ccData[4]
GUICtrlSetState($ccData[23], $GUI_FOCUS)
$Xp = Default
While CC_IsPressed(0x01)
$Pos = CC_GetCursor($ccData[2])
If Not @error Then
If $Pos[1] <> $Yp Then
$__CC_HSB[0] = Round((240 - $Pos[1] +
4) / 240 * 359)
If $__CC_HSB[0] > 359 Then
$__CC_HSB[0] = 359
EndIf
If $__CC_HSB[0] < 0 Then
$__CC_HSB[0] = 0
EndIf
CC_Update(3, 1)
$Xp = $Pos[0]
$Yp = $Pos[1]
EndIf
EndIf
WEnd
Case $ccData[7]
GUICtrlSetState($ccData[23], $GUI_FOCUS)
If Not $ccData[5] Then
$hPopup = GUICreate('', 95, 95, -1, -1, $WS_POPUP,
$WS_EX_TOPMOST, $ccData[0])
GUISetBkColor(0x000000)
$ccData[5] = GUICtrlCreatePic('', 1, 1, 93, 93,
$SS_WHITERECT)
GUICtrlSetState(-1, $GUI_DISABLE)
EndIf
$Xp = Default
While CC_IsPressed(0x01)
$Pos = CC_GetCursor()
If Not @error Then
If ($Pos[0] <> $Xp) Or ($Pos[1] <> $Yp) Then
If $hPopup Then
WinMove($hPopup, '', $Pos[0] + 16,
$Pos[1] + 16)
If Not BitAND(WinGetState($hPopup),
2) Then
GUISetState(@SW_SHOWNOACTIVATE, $hPopup)
EndIf
CC_SetBitmap($ccData[5],
CC_Capture($Pos[0] - 15, $Pos[1] - 15, 31, 31, 93, 93))
Else
CC_SetBitmap($ccData[5],
CC_Capture($Pos[0] - 20, $Pos[1] - 9, 41, 19, 123, 57))
EndIf
$Xp = $Pos[0]
$Yp = $Pos[1]
EndIf
EndIf
WEnd
If $hPopup Then
GUIDelete($hPopup)
$ccData[5] = 0
EndIf
$__CC_RGB = CC_SplitColor($ccData[21])
CC_Update(1)
Case $ccData[23]
$Return = 1
ExitLoop
Case $ccData[24]
$Index = GUICtrlRead($ccData[24])
If $Index Then
CC_Update($Index, 1, 1)
EndIf
Case $ccData[27]
$Index = GUICtrlRead($ccData[27])
Switch $Index
Case 0
$ccData[22] = 1
GUISetState(@SW_ENABLE, $hParent)
GUIDelete($ccData[0])
$ccData[0 ] = 0
Opt('GUIOnEventMode', $GUIOnEventMode)
Opt('GUICloseOnESC', $GUICloseOnESC)
_GDIPlus_ImageDispose($ccData[8])
_GDIPlus_Shutdown()
If $Return Then
Switch $iReturnType
Case 1
Return $__CC_HSL
Case 2
Return $__CC_HSB
Case Else
Return CC_RGB($__CC_RGB)
EndSwitch
Else
Return -1
EndIf
EndFunc ;==>_ColorChooserDialog
#EndRegion Public Functions
Func CC_Beep()
DllCall('user32.dll', 'int', 'MessageBeep', 'int', 0)
EndFunc ;==>CC_Beep
$hWnd = _WinAPI_GetDesktopWindow()
$hDC = _WinAPI_GetDC($hWnd)
$hSrcDC = _WinAPI_CreateCompatibleDC($hDC)
$hScreen = _WinAPI_CreateCompatibleBitmap($hDC, $iSrcWidth, $iSrcHeight)
_WinAPI_SelectObject($hSrcDC, $hScreen)
_WinAPI_BitBlt($hSrcDC, 0, 0, $iSrcWidth, $iSrcHeight, $hDC, $iX, $iY,
$SRCCOPY)
$tRECT = DllStructCreate($tagRECT)
DllStructSetData($tRECT, 1, $Pos[0] - $iX + 21 )
DllStructSetData($tRECT, 2, $Pos[1] - $iY + 274)
DllStructSetData($tRECT, 3, $Pos[0] - $iX + 21 + 123)
DllStructSetData($tRECT, 4, $Pos[1] - $iY + 274 + 57 )
$hBrush = _WinAPI_CreateSolidBrush(0)
_WinAPI_FillRect($hSrcDC, DllStructGetPtr($tRECT), $hBrush)
_WinAPI_DeleteObject($hBrush)
$hDstDC = _WinAPI_CreateCompatibleDC($hDC)
$hBitmap = _WinAPI_CreateCompatibleBitmap($hDC, $iDstWidth, $iDstHeight)
_WinAPI_SelectObject($hDstDC, $hBitmap)
DllCall('gdi32.dll', 'int', 'SetStretchBltMode', 'hwnd', $hDstDC, 'int', 3)
DllCall('gdi32.dll', 'int', 'StretchBlt', 'hwnd', $hDstDC, 'int', 0, 'int',
0, 'int', $iDstWidth, 'int', $iDstHeight, 'hwnd', $hSrcDC, 'int', 0, 'int', 0,
'int', $iSrcWidth, 'int', $iSrcHeight, 'dword', $SRCCOPY)
_WinAPI_ReleaseDC($hWnd, $hDC)
_WinAPI_DeleteDC($hDstDC)
_WinAPI_DeleteDC($hSrcDC)
_WinAPI_DeleteObject($hScreen)
$hImage = _GDIPlus_BitmapCreateFromHBITMAP($hBitmap)
_WinAPI_DeleteObject($hBitmap)
$ccData[21] = __GDIPlus_BitmapGetPixel($hImage, $iDstWidth / 2, $iDstHeight /
2)
$hGraphics = _GDIPlus_ImageGetGraphicsContext($hImage)
$hPen = _GDIPlus_PenCreate(0x60FF0000, 3)
_GDIPlus_GraphicsDrawLine($hGraphics, 0, $iDstHeight / 2, $iDstWidth / 2 - 4,
$iDstHeight / 2, $hPen)
_GDIPlus_GraphicsDrawLine($hGraphics, $iDstWidth / 2 + 5, $iDstHeight / 2,
$iDstWidth, $iDstHeight / 2, $hPen)
_GDIPlus_GraphicsDrawLine($hGraphics, $iDstWidth / 2, 0, $iDstWidth / 2,
$iDstHeight / 2 - 4, $hPen)
_GDIPlus_GraphicsDrawLine($hGraphics, $iDstWidth / 2, $iDstHeight / 2 + 5,
$iDstWidth / 2, $iDstHeight, $hPen)
_GDIPlus_GraphicsDrawRect($hGraphics, $iDstWidth / 2 - 3, $iDstHeight / 2 -
3, 6, 6, $hPen)
_GDIPlus_PenDispose($hPen)
_GDIPlus_GraphicsDispose($hGraphics)
$hBitmap = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hImage)
_GDIPlus_ImageDispose($hImage)
Return $hBitmap
EndFunc ;==>CC_Capture
Func CC_GetBValue($iRGB)
Return BitAND($iRGB, 0x0000FF)
EndFunc ;==>CC_GetBValue
Func CC_GetClientPos($hWnd)
For $i = 1 To 2
DllStructSetData($tPOINT, $i, 0)
Next
_WinAPI_ClientToScreen($hWnd, $tPOINT)
If @error Then
Return SetError(1, 0, 0)
EndIf
Local $Pos[4]
For $i = 0 To 1
$Pos[$i] = DllStructGetData($tPOINT, $i + 1)
Next
For $i = 2 To 3
$Pos[$i] = $Size[$i - 2]
Next
Return $Pos
EndFunc ;==>CC_GetClientPos
Func CC_GetCursor($hWnd = 0)
If @error Then
Return SetError(1, 0, 0)
EndIf
Local $Pos[2]
For $i = 0 To 1
$Pos[$i] = DllStructGetData($tPOINT, $i + 1)
Next
Return $Pos
EndFunc ;==>CC_GetCursor
Func CC_GetGValue($iRGB)
Return BitShift(BitAND($iRGB, 0x00FF00), 8)
EndFunc ;==>CC_GetGValue
Func CC_GetRValue($iRGB)
Return BitShift(BitAND($iRGB, 0xFF0000), 16)
EndFunc ;==>CC_GetRValue
Func CC_IsDark($iRGB)
If CC_GetRValue($iRGB) + CC_GetGValue($iRGB) + CC_GetBValue($iRGB) < 3 *
255 / 2 Then
Return 1
Else
Return 0
EndIf
EndFunc ;==>CC_IsDark
Func CC_IsPressed($iKey)
If @error Then
Return SetError(1, 0, 0)
EndIf
Return Number(BitAND($Ret[0], 0x8000) <> 0)
EndFunc ;==>CC_IsPressed
$bData = Binary($bImage)
$Lenght = BinaryLen($bData)
$hData = _MemGlobalAlloc($Lenght, 2)
$pData = _MemGlobalLock($hData)
$tData = DllStructCreate('byte[' & $Lenght & ']', $pData)
DllStructSetData($tData, 1, $bData)
_MemGlobalUnlock($hData)
$hStream = DllCall('ole32.dll', 'int', 'CreateStreamOnHGlobal', 'ptr',
$hData, 'int', 1, 'ptr*', 0)
$hImage = __GDIPlus_BitmapCreateFromStream($hStream[3])
; If Not $hImage Then
; _MemGlobalFree($hData)
; EndIf
Return $hImage
EndFunc ;==>CC_LoadImageFromMem
Func CC_LoadUserColor()
For $i = 1 To UBound($ccPalette) - 1
$ccPalette[$i][0] = RegRead($CC_REG_COMMONDATA, StringFormat('#%02d',
$i))
If (@error) Or (BitAND(0xFF000000, $ccPalette[$i][0])) Then
$ccPalette[$i][0] = -1
EndIf
Next
EndFunc ;==>CC_LoadUserColor
Func CC_RGB($aRGB)
Return BitOR(BitShift($aRGB[0], -16), BitShift($aRGB[1], -8), $aRGB[2])
EndFunc ;==>CC_RGB
Func CC_SaveUserColor()
For $i = 1 To UBound($ccPalette) - 1
RegWrite($CC_REG_COMMONDATA, StringFormat('#%02d', $i), 'REG_DWORD',
$ccPalette[$i][0])
Next
EndFunc ;==>CC_SaveUserColor
Local $hObj
$Pos1 = WinGetPos($hChild)
If (@error) Or (Not IsArray($Pos2)) Then
Return SetError(1, 0, 0)
EndIf
If $iX = Default Then
$X = $Pos2[0] + ($Pos2[2] - $Pos1[2]) / 2
Else
$X = $Pos2[0] + $iX
EndIf
If $iY = Default Then
$Y = $Pos2[1] + ($Pos2[3] - $Pos1[3]) / 2
Else
$Y = $Pos2[1] + $iY
EndIf
$tRECT = DllStructCreate($tagRECT)
$Ret = DllCall('user32.dll', 'int', 'SystemParametersInfo', 'int', 48, 'int',
0, 'ptr', DllStructGetPtr($tRECT), 'int', 0)
If (@error) Or ($Ret[0] = 0) Then
$Height = @DesktopHeight
Else
$Height = DllStructGetData($tRECT, 4)
EndIf
; If $X < 0 Then
; $X = 0
; EndIf
If $X > @DesktopWidth - $Pos1[2] Then
$X = @DesktopWidth - $Pos1[2]
EndIf
; If $Y < 0 Then
; $Y = 0
; EndIf
If $Y > $Height - $Pos1[3] Then
$Y = $Height - $Pos1[3]
EndIf
If Not WinMove($hChild, '', $X, $Y) Then
Return SetError(1, 0, 0)
EndIf
Return 1
EndFunc ;==>CC_SetChildPos
Func CC_SetColor($RGB)
Func CC_SetPalette()
Func CC_SetPicker()
Local $hGraphics, $hBrush, $hPicker, $hImage, $hBitmap
Func CC_SplitColor($iColor)
Local $RGB[3]
$RGB[0] = CC_GetRValue($iColor)
$RGB[1] = CC_GetGValue($iColor)
$RGB[2] = CC_GetBValue($iColor)
Return $RGB
EndFunc ;==>CC_SplitColor
Func CC_SwitchColor($iColor)
Return BitOR(BitAND($iColor, 0x00FF00), BitShift(BitAND($iColor, 0x0000FF), -
16), BitShift(BitAND($iColor, 0xFF0000), 16))
EndFunc ;==>CC_SwitchColor
Switch $iIndex
Case 4 ; HEX
ContinueCase
Case 1 ; RGB
$__CC_HSL = _RGB2HSL($__CC_RGB)
$__CC_HSB = _RGB2HSB($__CC_RGB)
Case 2 ; HSL
$__CC_RGB = _HSL2RGB($__CC_HSL)
$__CC_HSB = _RGB2HSB($__CC_RGB)
Case 3 ; HSB
$__CC_RGB = _HSB2RGB($__CC_HSB)
$__CC_HSL = _RGB2HSL($__CC_RGB)
EndSwitch
If $fPalette Then
$hBitmap = _WinAPI_CreateBitmap(8, 249, 1, 32)
$hImage = _GDIPlus_BitmapCreateFromHBITMAP($hBitmap)
_WinAPI_DeleteObject($hBitmap)
$hGraphics = _GDIPlus_ImageGetGraphicsContext($hImage)
$hBrush = _GDIPlus_BrushCreateSolid(BitOR(0xFF000000,
CC_SwitchColor(_WinAPI_GetSysColor($COLOR_3DFACE))))
_GDIPlus_GraphicsFillRect($hGraphics, 0, 0, 8, 249, $hBrush)
_GDIPlus_BrushDispose($hBrush)
_GDIPlus_GraphicsDrawImageRect($hGraphics, $ccData[8], 0, Round((359 -
$__CC_HSB[0]) / 359 * 240), 8, 9)
_GDIPlus_GraphicsDispose($hGraphics)
$hBitmap = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hImage)
CC_SetBitmap($ccData[2], $hBitmap)
__GDIPlus_ImageRotateFlip($hImage, 4)
$hBitmap = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hImage)
_GDIPlus_ImageDispose($hImage)
CC_SetBitmap($ccData[3], $hBitmap)
EndIf
$HSB = $__CC_HSB
$HSB[1] = 100
$HSB[2] = 100
$RGB = _HSB2RGB($HSB)
$hBitmap = _WinAPI_CreateBitmap(241, 241, 1, 32)
$hImage = _GDIPlus_BitmapCreateFromHBITMAP($hBitmap)
_WinAPI_DeleteObject($hBitmap)
$hGraphics = _GDIPlus_ImageGetGraphicsContext($hImage)
$hBrush = __GDIPlus_LineBrushCreate(0, 0, 241, 0, 0xFFFFFFFF,
BitOR(0xFF000000, CC_RGB($RGB)))
_GDIPlus_GraphicsFillRect($hGraphics, 0, 0, 241, 241, $hBrush)
_GDIPlus_BrushDispose($hBrush)
$hBrush = __GDIPlus_LineBrushCreate(0, 0, 0, 241, 0, 0xFF000000)
_GDIPlus_GraphicsFillRect($hGraphics, 0, 0, 241, 241, $hBrush)
_GDIPlus_BrushDispose($hBrush)
$X = Round($__CC_HSB[1] / 100 * 241)
$Y = Round((1 - $__CC_HSB[2] / 100) * 241)
If CC_IsDark(CC_RGB($__CC_RGB)) Then
$ARGB = 0xFFFFFFFF
Else
$ARGB = 0xFF000000
EndIf
$hPen = _GDIPlus_PenCreate($ARGB, 2)
_GDIPlus_GraphicsDrawLine($hGraphics, $X - 7, $Y, $X - 3, $Y, $hPen)
_GDIPlus_GraphicsDrawLine($hGraphics, $X + 3, $Y, $X + 7, $Y, $hPen)
_GDIPlus_GraphicsDrawLine($hGraphics, $X, $Y - 7, $X, $Y - 3, $hPen)
_GDIPlus_GraphicsDrawLine($hGraphics, $X, $Y + 3, $X, $Y + 7, $hPen)
_GDIPlus_PenDispose($hPen)
_GDIPlus_GraphicsDispose($hGraphics)
$hBitmap = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hImage)
_GDIPlus_ImageDispose($hImage)
CC_SetBitmap($ccData[1], $hBitmap)
If $ccData[5] Then
$hBitmap = _WinAPI_CreateBitmap(123, 57, 1, 32)
$hImage = _GDIPlus_BitmapCreateFromHBITMAP($hBitmap)
_WinAPI_DeleteObject($hBitmap)
$hGraphics = _GDIPlus_ImageGetGraphicsContext($hImage)
$hBrush = _GDIPlus_BrushCreateSolid(BitOR(0xFF000000,
CC_RGB($__CC_RGB)))
_GDIPlus_GraphicsFillRect($hGraphics, 0, 0, 123, 57, $hBrush)
_GDIPlus_BrushDispose($hBrush)
_GDIPlus_GraphicsDispose($hGraphics)
$hBitmap = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hImage)
_GDIPlus_ImageDispose($hImage)
CC_SetBitmap($ccData[5], $hBitmap)
EndIf
$ccData[22] = 1
If ($iIndex <> 1) Or (Not $fSkip) Then
For $i = 10 To 12
GUICtrlSetData($ccData[$i], $__CC_RGB[$i - 10])
Next
EndIf
If ($iIndex <> 2) Or (Not $fSkip) Then
For $i = 13 To 15
GUICtrlSetData($ccData[$i], $__CC_HSL[$i - 13])
Next
EndIf
If ($iIndex <> 3) Or (Not $fSkip) Then
For $i = 16 To 18
GUICtrlSetData($ccData[$i], $__CC_HSB[$i - 16])
Next
EndIf
If ($iIndex <> 4) Or (Not $fSkip) Then
GUICtrlSetData($ccData[19], Hex(CC_RGB($__CC_RGB), 6))
EndIf
$ccData[22] = 0
If Not $fSkip Then
GUICtrlSetState($ccData[23], $GUI_FOCUS)
EndIf
EndFunc ;==>CC_Update
Func _HSL2RGB($aHSL)
If Not $aHSL[1] Then
$aHSL[0] = 160
EndIf
If IsArray($Ret) Then
$RGB = CC_SplitColor(CC_SwitchColor($Ret[0]))
EndIf
Return $RGB
EndFunc ;==>_HSL2RGB
Func _HSB2RGB($aHSB)
For $i = 1 To 2
$aHSB[$i] /= 100
Next
If $aHSB[1] = 0 Then
For $i= 0 To 2
$RGB[$i] = $aHSB[2]
Next
Else
$H = $aHSB[0] / 60
$L = Floor($H)
$F = $H - $L
$P = $aHSB[2] * (1 - $aHSB[1])
$Q = $aHSB[2] * (1 - $aHSB[1] * $F)
$T = $aHSB[2] * (1 - $aHSB[1] * (1 - $F))
Switch $L
Case 1
$RGB[0] = $Q
$RGB[1] = $aHSB[2]
$RGB[2] = $P
Case 2
$RGB[0] = $P
$RGB[1] = $aHSB[2]
$RGB[2] = $T
Case 3
$RGB[0] = $P
$RGB[1] = $Q
$RGB[2] = $aHSB[2]
Case 4
$RGB[0] = $T
$RGB[1] = $P
$RGB[2] = $aHSB[2]
Case 5
$RGB[0] = $aHSB[2]
$RGB[1] = $P
$RGB[2] = $Q
Case Else
$RGB[0] = $aHSB[2]
$RGB[1] = $T
$RGB[2] = $P
EndSwitch
EndIf
For $i = 0 To 2
$RGB[$i] = Round($RGB[$i] * 255)
Next
Return $RGB
EndFunc ;==>_HSB2RGB
Func _RGB2HSL($aRGB)
If IsArray($Ret) Then
$HSL[0] = $Ret[2]
$HSL[1] = $Ret[4]
$HSL[2] = $Ret[3]
EndIf
Return $HSL
EndFunc ;==>_RGB2HSL
Func _RGB2HSB($aRGB)
For $i = 0 To 2
If $aRGB[$i] > $Max Then
$Max = $aRGB[$i]
EndIf
If $aRGB[$i] < $Min Then
$Min = $aRGB[$i]
EndIf
Next
If $Min = $Max Then
$HSB[0] = 0
$HSB[1] = 0
$HSB[2] = $Max / 255
Else
If $aRGB[0] = $Min Then
$D = $aRGB[1] - $aRGB[2]
$H = 3
Else
If $aRGB[1] = $Min Then
$D = $aRGB[2] - $aRGB[0]
$H = 5
Else
$D = $aRGB[0] - $aRGB[1]
$H = 1
EndIf
EndIf
$HSB[0] = ($H - ($D / ($Max - $Min))) / 6
$HSB[1] = ($Max - $Min) / $Max
$HSB[2] = $Max / 255
EndIf
$HSB[0] = Round($HSB[0] * 360)
If $HSB[0] = 360 Then
$HSB[0] = 0
EndIf
For $i = 1 To 2
$HSB[$i] = Round($HSB[$i] * 100)
Next
Return $HSB
EndFunc ;==>_RGB2HSB
Func __GDIPlus_BitmapCreateFromStream($hStream)
If @error Then
Return SetError(@error, @extended, 0)
EndIf
Return $aResult[2]
EndFunc ;==>__GDIPlus_BitmapCreateFromStream
If @error Then
Return SetError(@error, @extended, 0)
EndIf
Return $aResult[4]
EndFunc ;==>__GDIPlus_BitmapGetPixel
If @error Then
Return SetError(@error, @extended, False)
EndIf
Return $aResult[0] = 0
EndFunc ;==>__GDIPlus_ImageRotateFlip
DllStructSetData($tPoint1, 1, $nX1)
DllStructSetData($tPoint1, 2, $nY1)
DllStructSetData($tPoint2, 1, $nX2)
DllStructSetData($tPoint2, 2, $nY2)
If @error Then
Return SetError(@error, @extended, 0)
EndIf
Return $aResult[6]
EndFunc ;==>__GDIPlus_LineBrushCreate
If @error Then
Return SetError(@error, @extended, False)
EndIf
Return $aResult[0] = 0
EndFunc ;==>__GDIPlus_LineBrushSetTransform
Func _Image_Arrow()
Local $bArrow = _
'0x89504E470D0A1A0A0000000D49484452000000080000000908060000000F536D' &
_
'2E000000097048597300000B1300000B1301009A9C180000000467414D410000' &
_
'B18E7CFB5193000000206348524D00007A25000080830000F9FF000080E90000' &
_
'75300000EA6000003A980000176F925FC546000000474944415478DA8490410A' &
_
'C0300804C77C7CDD97DB4B0A364DDA010FB283C2465561BB98480A3A99599DB9' &
_
'73CF6041D2E3E24B58A5ADD0A5A3601B4931BEC2ED8B1E02C45F0FD70083FA3C' &
_
'F26952F43C0000000049454E44AE426082'
Return CC_LoadImageFromMem($bArrow)
EndFunc ;==>_Image_Arrow
Func _Image_Picker()
Local $bPicker = _
'0x89504E470D0A1A0A0000000D4948445200000013000000130806000000725036' &
_
'CC000000097048597300000B1300000B1301009A9C180000000467414D410000' &
_
'B18E7CFB5193000000206348524D00007A25000080830000F9FF000080E90000' &
_
'75300000EA6000003A980000176F925FC5460000028C4944415478DAAC943F4F' &
_
'DB4018C67F8E53207692A24AC05586A0B46AAAB62A95BA77AED8D3853F22A253' &
_
'D70A3E010B9E2BBE40D86040480858C2D02EA81EBA958E20085872D421C47F62' &
_
'70AECB11514429489CF4CAF6DDBD3F3FEFFBE84E9352725F23C53D8EB4A66977' &
_
'4FD2F5DE9142210238383878F27870F000907756A6EB7A66A450886CDB06E88C' &
_
'8E8E3A4992F402A95BC12C21B462B1288177854221B06D1BC771181E1E6E03A6' &
_
'AEEB7DC083D46D408F06063AB66D532A95BE5E80767777393A3ACA343CEF3DD0' &
_
'0BE8FAFF403D994C67616101C77188A288B5B5359ACD66727878D8764F4E3EF5' &
_
'E7F33F811868DF08CB67B3DA97A5A55F737373E566B3C9FEFE3E8661100441EA' &
_
'E4F8F8737F3EFF0D88801068DF68E5C6C6C607CFF356E238667171B13B6F9A26' &
_
'BEEF1387E133A0A522FA67CF363737CB9EE7AD542A15E238667C7CBCBBA6691A' &
_
'7118BE52E545EA995C0BDBDEDE2E371A8DD54AA582EFFBECEDED51AD5689C3F0' &
_
'2DC06FCF7B039C5D8AA4EEBA327D15B4B5B555765D77756666862008D8D9D961' &
_
'79799987D9EC1820E3307C099CAB3E45EABD0390BE0AF23CAF0BAAD56A4C4D4D' &
_
'9137CD319514036DA5A6ADE2FCDA1E55AB5529A594AD564BAEAFAFCB5C2E272D' &
_
'215E5B42BCB08418B58418B084C80332679AD95C36DB6309D135310D303F3F6F' &
_
'341A8DD5E9E9E96E6993939317A59D0381722C54EA6805419FA669F2B4D58AFF' &
_
'BA353ECECE96007CDFA756AB313131711D28A8BBAE5F77DD330029A5D7E9745A' &
_
'8001E800694B08EDBBE3FC2897CB0C0D0D015C0B02E2B4AEF79D2749166800CF' &
_
'95CA8CDA9B68961029A0E73408C29C613C55E74CAA92BA20A05377DD945AF781' &
_
'E2A59FB581E4C24D2D67180380A9EC3E531BC34B2009246ADE548A42F50DC09F' &
_
'010041B73CFDB70CCD6E0000000049454E44AE426082'
Return CC_LoadImageFromMem($bPicker)
EndFunc ;==>_Image_Picker
Switch $hWnd
Case $ccData[0]
Switch $hWnd
Case $ccData[0]
Switch $wParam
Case 0x08, 0x09, 0x14, 0x15 ; HTMINBUTTON, HTMAXBUTTON,
HTCLOSE, HTHELP
Return 0
EndSwitch
EndSwitch
Return $GUI_RUNDEFMSG
EndFunc ;==>CC_WM_NCRBUTTONDOWN
Local $Result
Switch $hWnd
Case $ccData[0]
If $ccData[9] Then
Switch $hWnd
Case $ccData[0]
Switch $wParam
Case 0xF100 ; SC_KEYMENU
Return 0
EndSwitch
EndSwitch
Return $GUI_RUNDEFMSG
EndFunc ;==>CC_WM_SYSCOMMAND