Что нового

Часы из GUICtrlCreateGraphic

angro

Новичок
Сообщения
31
Репутация
1
AutoIt: 3.3.14.3
Версия: 1.0

Категория: Приколы, Элементы GUI, Разное

Описание:
Часы с развёрткой всех "светодиодов" в цикле из одной GUICtrlCreateGraphic.
Изменение размеров "светодиодов". вычисление всех цветов из базового, изменение количества полей.
Удобное редактирование шрифта отображения знаков.
Через некоторое время работы подвисают. Созданы в качестве "Привет Мир"
Воодушевлялся старыми Электроника 7

Код:
Код:
;#NoTrayIcon
#include <WinAPI.au3>
#include <WindowsConstants.au3>
#include <GuiConstantsEx.au3>
#include <StaticConstants.au3>
#include <FontConstants.au3>

While 1
    Switch GUIGetMsg()
        Case $GUI_EVENT_CLOSE
            ExitLoop
    EndSwitch
    Sleep(333)
    Electronica7()
WEnd

; #FUNCTION# ====================================================================================================================
; Author ........: angro
; url.......: https://youtu.be/thA-B9O_y8I
; ===============================================================================================================================
Func Electronica7($Size = 15, $Field = 6, $BgColor = 0x000000, $LedColor = 0x00D9E5)

    Local Static $GUI, $Led, $HSBArr, $MatrixColor[3][$Size + 1]
    Local Static $MatrixChange[7][13][8], $BuildColor[3], $FlagStart = True

	If $FlagStart Then
		
		$GUI  = GUICreate('Electronica7', ((($Size * 7) * 3) * $Field), (($Size * 11) * 3), Default, Default, $WS_POPUP, BitOR($WS_EX_CONTROLPARENT, $WS_EX_COMPOSITED))
		$Led = GUICtrlCreateGraphic(0, 0)
		GUISetBkColor($BgColor, $GUI)
	    GUISetState(@SW_SHOWNORMAL, $GUI)
	
		For $TeakF = 1 To $Field
            $MatrixChange[$TeakF][0][1] = 'F'
            $MatrixChange[$TeakF][0][2] = 'F'
        Next
	
	    $HSBArr = _RGB2HSB(_ColorGetRGB($LedColor))
		For $NumColor = $Size To 1 Step -1
			;disabled
			$Saturation = $HSBArr[1]
			$Brightness = (100 / ($NumColor / 1.1))
			If $Saturation > 80 Then $Saturation = 80
			If $Brightness > 80 Then $Brightness = 80
			$BuildColor[0] =  $HSBArr[0]
			$BuildColor[1] =  $Saturation
			$BuildColor[2] =  $Brightness
			$RGBArr = _HSB2RGB($BuildColor)
			$MatrixColor[1][$NumColor] = '0x' & StringFormat('%02X%02X%02X', $RGBArr[0], $RGBArr[1], $RGBArr[2])
			;enabled
			$Saturation = $HSBArr[1] + 10
			$Brightness = (100 / $NumColor) + 80
			If $Saturation > 100 Then $Saturation = 100
			If $Brightness > 100 Then $Brightness = 100
			$BuildColor[0] =  $HSBArr[0]
			$BuildColor[1] =  $Saturation
			$BuildColor[2] =  $Brightness
			$RGBArr = _HSB2RGB($BuildColor)
			$MatrixColor[2][$NumColor] = '0x' & StringFormat('%02X%02X%02X', $RGBArr[0], $RGBArr[1], $RGBArr[2])
		Next

		For $TeakF = 1 To $Field
			For $TeakY = 1 To 12
				For $TeakX = 1 To 7
					$ShiftX = (($Size * 2 + ($Size / 10 + 2)) * $TeakX) + ((($Size * 7) * 3) * ($TeakF - 1))
					$ShiftY = ($Size * 2 + ($Size / 10 + 2)) * $TeakY
					GUICtrlSetGraphic($Led, $GUI_GR_COLOR, $BgColor, $BgColor)
					For $CalcSize = $Size To 1 Step -1
						GUICtrlSetGraphic($Led, $GUI_GR_COLOR, $MatrixColor[1][$CalcSize], $MatrixColor[1][$CalcSize])
						GUICtrlSetGraphic($Led, $GUI_GR_PIE, $ShiftX, $ShiftY, $CalcSize, 270, 360)
					Next
				Next
			Next
		Next
		
	    $FlagStart = False

    EndIf
	
#Region Font
; y |, x -
Local Static $Sign0[13][8] = [[0,0,0,0,0,0,0,0], _
							  [0,0,1,1,1,1,1,0], _
							  [0,1,1,1,1,1,1,1], _
							  [0,1,1,0,0,0,1,1], _
							  [0,1,1,0,0,0,1,1], _
							  [0,1,1,0,0,0,1,1], _
							  [0,1,1,0,0,0,1,1], _
							  [0,1,1,0,0,0,1,1], _
							  [0,1,1,0,0,0,1,1], _
							  [0,1,1,0,0,0,1,1], _
							  [0,1,1,0,0,0,1,1], _
							  [0,1,1,1,1,1,1,1], _
							  [0,0,1,1,1,1,1,0]]
; ??
Local Static $Sign1[13][8] = [[0,0,0,0,0,0,0,0], _
							  [0,0,0,0,0,0,1,1], _
							  [0,0,0,0,0,1,1,1], _
							  [0,0,0,0,1,1,1,1], _
							  [0,0,0,1,1,0,1,1], _
							  [0,0,0,1,0,0,1,1], _
							  [0,0,0,0,0,0,1,1], _
							  [0,0,0,0,0,0,1,1], _
							  [0,0,0,0,0,0,1,1], _
							  [0,0,0,0,0,0,1,1], _
							  [0,0,0,0,0,0,1,1], _
							  [0,0,0,0,0,0,1,1], _
							  [0,0,0,0,0,0,1,1]]
							
Local Static $Sign2[13][8] = [[0,0,0,0,0,0,0,0], _
							  [0,0,1,1,1,1,1,0], _
							  [0,1,1,1,1,1,1,1], _
							  [0,0,0,0,0,0,1,1], _
							  [0,0,0,0,0,0,1,1], _
							  [0,0,0,0,0,0,1,1], _
							  [0,0,1,1,1,1,1,1], _
							  [0,1,1,1,1,1,1,0], _
							  [0,1,1,0,0,0,0,0], _
							  [0,1,1,0,0,0,0,0], _
							  [0,1,1,0,0,0,0,0], _
							  [0,1,1,1,1,1,1,1], _
							  [0,0,1,1,1,1,1,0]]
							
Local Static $Sign3[13][8] = [[0,0,0,0,0,0,0,0], _
							  [0,0,1,1,1,1,1,0], _
							  [0,1,1,1,1,1,1,1], _
							  [0,0,0,0,0,0,1,1], _
							  [0,0,0,0,0,0,1,1], _
							  [0,0,0,0,0,0,1,1], _
							  [0,0,0,1,1,1,1,1], _
							  [0,0,0,1,1,1,1,1], _
							  [0,0,0,0,0,0,1,1], _
							  [0,0,0,0,0,0,1,1], _
							  [0,0,0,0,0,0,1,1], _
							  [0,1,1,1,1,1,1,1], _
							  [0,0,1,1,1,1,1,0]]
; ??							
Local Static $Sign4[13][8] = [[0,0,0,0,0,0,0,0], _
							  [0,0,1,0,0,0,1,0], _
							  [0,1,1,0,0,0,1,1], _
							  [0,1,1,0,0,0,1,1], _
							  [0,1,1,0,0,0,1,1], _
							  [0,1,1,0,0,0,1,1], _
							  [0,1,1,1,1,1,1,1], _
							  [0,0,1,1,1,1,1,1], _
							  [0,0,0,0,0,0,1,1], _
							  [0,0,0,0,0,0,1,1], _
							  [0,0,0,0,0,0,1,1], _
							  [0,0,0,0,0,0,1,1], _
							  [0,0,0,0,0,0,1,1]]
							
Local Static $Sign5[13][8] = [[0,0,0,0,0,0,0,0], _
							  [0,0,1,1,1,1,1,0], _
							  [0,1,1,1,1,1,1,1], _
							  [0,1,1,0,0,0,0,0], _
							  [0,1,1,0,0,0,0,0], _
							  [0,1,1,0,0,0,0,0], _
							  [0,1,1,1,1,1,1,0], _
							  [0,0,1,1,1,1,1,1], _
							  [0,0,0,0,0,0,1,1], _
							  [0,0,0,0,0,0,1,1], _
							  [0,0,0,0,0,0,1,1], _
							  [0,1,1,1,1,1,1,1], _
							  [0,0,1,1,1,1,1,0]]
							
Local Static $Sign6[13][8] = [[0,0,0,0,0,0,0,0], _
							  [0,0,1,1,1,1,1,0], _
							  [0,1,1,1,1,1,1,1], _
							  [0,1,1,0,0,0,0,0], _
							  [0,1,1,0,0,0,0,0], _
							  [0,1,1,0,0,0,0,0], _
							  [0,1,1,1,1,1,1,0], _
							  [0,1,1,1,1,1,1,1], _
							  [0,1,1,0,0,0,1,1], _
							  [0,1,1,0,0,0,1,1], _
							  [0,1,1,0,0,0,1,1], _
							  [0,1,1,1,1,1,1,1], _
							  [0,0,1,1,1,1,1,0]]
; ??							
Local Static $Sign7[13][8] = [[0,0,0,0,0,0,0,0], _
							  [0,1,1,1,1,1,1,0], _
							  [0,0,1,1,1,1,1,1], _
							  [0,0,0,0,0,0,1,1], _
							  [0,0,0,0,0,0,1,1], _
							  [0,0,0,0,0,0,1,1], _
							  [0,0,0,0,0,0,1,1], _
							  [0,0,0,0,0,0,1,1], _
							  [0,0,0,0,0,0,1,1], _
							  [0,0,0,0,0,0,1,1], _
							  [0,0,0,0,0,0,1,1], _
							  [0,0,0,0,0,0,1,1], _
							  [0,0,0,0,0,0,1,1]]
							
Local Static $Sign8[13][8] = [[0,0,0,0,0,0,0,0], _
							  [0,0,1,1,1,1,1,0], _
							  [0,1,1,1,1,1,1,1], _
							  [0,1,1,0,0,0,1,1], _
							  [0,1,1,0,0,0,1,1], _
							  [0,1,1,0,0,0,1,1], _
							  [0,1,1,1,1,1,1,1], _
							  [0,1,1,1,1,1,1,1], _
							  [0,1,1,0,0,0,1,1], _
							  [0,1,1,0,0,0,1,1], _
							  [0,1,1,0,0,0,1,1], _
							  [0,1,1,1,1,1,1,1], _
							  [0,0,1,1,1,1,1,0]]
							
Local Static $Sign9[13][8] = [[0,0,0,0,0,0,0,0], _
							  [0,0,1,1,1,1,1,0], _
							  [0,1,1,1,1,1,1,1], _
							  [0,1,1,0,0,0,1,1], _
							  [0,1,1,0,0,0,1,1], _
							  [0,1,1,0,0,0,1,1], _
							  [0,1,1,1,1,1,1,1], _
							  [0,0,1,1,1,1,1,1], _
							  [0,0,0,0,0,0,1,1], _
							  [0,0,0,0,0,0,1,1], _
							  [0,0,0,0,0,0,1,1], _
							  [0,1,1,1,1,1,1,1], _
							  [0,0,1,1,1,1,1,0]]
							
Local Static $SignF[13][8] = [[0,0,0,0,0,0,0,0], _
							  [0,0,0,0,0,0,0,0], _
							  [0,0,0,0,0,0,0,0], _
							  [0,0,0,0,0,0,0,0], _
							  [0,0,0,0,0,0,0,0], _
							  [0,0,0,0,0,0,0,0], _
							  [0,0,0,0,0,0,0,0], _
							  [0,0,0,0,0,0,0,0], _
							  [0,0,0,0,0,0,0,0], _
							  [0,0,0,0,0,0,0,0], _
							  [0,0,0,0,0,0,0,0], _
							  [0,0,0,0,0,0,0,0], _
							  [0,0,0,0,0,0,0,0]]


#EndRegion Font

	
	For $TeakF = 1 To $Field
	    For $TeakY = 1 To 12
		    For $TeakX = 1 To 7
                $MatrixChange[$TeakF][$TeakY][$TeakX] = Null
	        Next
        Next
    Next

	For $TeakF = 1 To $Field
		If $MatrixChange[$TeakF][0][1] <> $MatrixChange[$TeakF][0][2] Then
			For $TeakY = 1 To 12
				For $TeakX = 1 To 7
					If Eval('Sign' & $MatrixChange[$TeakF][0][1])[$TeakY][$TeakX] = 1 And Eval('Sign' & $MatrixChange[$TeakF][0][2])[$TeakY][$TeakX] = 0 Then $MatrixChange[$TeakF][$TeakY][$TeakX] = 1
					If Eval('Sign' & $MatrixChange[$TeakF][0][1])[$TeakY][$TeakX] = 0 And Eval('Sign' & $MatrixChange[$TeakF][0][2])[$TeakY][$TeakX] = 1 Then $MatrixChange[$TeakF][$TeakY][$TeakX] = 0
					If Eval('Sign' & $MatrixChange[$TeakF][0][1])[$TeakY][$TeakX] = 1 And $MatrixChange[$TeakF][$TeakY][$TeakX] = Null Then $MatrixChange[$TeakF][$TeakY][$TeakX] = 1
				Next
			Next
		$MatrixChange[$TeakF][0][2] = $MatrixChange[$TeakF][0][1]
		EndIf
    Next

	For $TeakF = 1 To $Field
		For $TeakY = 1 To 12
			For $TeakX = 1 To 7
				$ShiftX = (($Size * 2 + ($Size / 10 + 2)) * $TeakX) + ((($Size * 7) * 3) * ($TeakF - 1))
				$ShiftY = ($Size * 2 + ($Size / 10 + 2)) * $TeakY
	            For $CalcSize = $Size To 1 Step -1
                    ;disabled
                    If $MatrixChange[$TeakF][$TeakY][$TeakX] = 0 Then
                        GUICtrlSetGraphic($Led, $GUI_GR_COLOR, $MatrixColor[1][$CalcSize], $MatrixColor[1][$CalcSize])
	                    GUICtrlSetGraphic($Led, $GUI_GR_PIE, $ShiftX, $ShiftY, $CalcSize, 270, 360)
                    EndIf
                    ;enabled
                    If $MatrixChange[$TeakF][$TeakY][$TeakX] = 1 Then
                        GUICtrlSetGraphic($Led, $GUI_GR_COLOR, $MatrixColor[2][$CalcSize], $MatrixColor[2][$CalcSize])
	                    GUICtrlSetGraphic($Led, $GUI_GR_PIE, $ShiftX, $ShiftY, $CalcSize, 270, 360)
                    EndIf
                Next
	        Next
        Next
    Next

    GUICtrlSetGraphic($Led, $GUI_GR_REFRESH)

    ; Author ........: SadBunny
    $MatrixChange[1][0][1] = Int(@HOUR / 10)
    $MatrixChange[2][0][1] = Mod(@HOUR, 10)
    $MatrixChange[3][0][1] = Int(@MIN / 10)
    $MatrixChange[4][0][1] = Mod(@MIN, 10)
    $MatrixChange[5][0][1] = Int(@SEC / 10)
    $MatrixChange[6][0][1] = Mod(@SEC, 10)

EndFunc

; #FUNCTION# ====================================================================================================================
; Author ........: jpm
; Modified.......:
; ===============================================================================================================================
Func _ColorGetRGB($iColor, Const $_iCurrentExtended = @extended)
	If BitAND($iColor, 0xFF000000) Then Return SetError(1, 0, 0) ; invalid color value
	Local $aColor[3]
	$aColor[0] = BitAND(BitShift($iColor, 16), 0xFF)
	$aColor[1] = BitAND(BitShift($iColor, 8), 0xFF)
	$aColor[2] = BitAND($iColor, 0xFF)
	Return SetExtended($_iCurrentExtended, $aColor)
EndFunc   ;==>_ColorGetRGB

; #FUNCTION# ====================================================================================================================
; Author ........: Yashied
; Modified.......:
; ===============================================================================================================================
Func _RGB2HSB($aRGB)

    Local $Min = 255, $Max = 0
    Local $HSB[3], $D, $H

    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

; #FUNCTION# ====================================================================================================================
; Author ........: Yashied
; Modified.......:
; ===============================================================================================================================
Func _HSB2RGB($aHSB)

    Local $RGB[3], $H, $L, $F, $P, $Q, $T

    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

Автор(ы): angro
 

Вложения

  • clock2.jpg
    clock2.jpg
    152.3 КБ · Просмотры: 24
Верх