. Me ha gustado mucho tu idea y la forma de mostrala
. Muy muy original el reloj binario. Si existía no lo conocía.
.
Pero te digo una cosa, el código se puede mejorar y acortar bastante.
Me ha gustado tanto que he utilizado tu código para hacer una versión mía (con tu permiso)
.
Dentro de esta versión he hecho una función para pasar un número decimal a binario. Se le puede pasar dos parámetros, uno obligado, el cual es el número decimal entero positivo a convertir, y el otro es opcional, el cual es el mínimo de longitud en bits (dígitos) que quieres que tenga el número binario devuelto.
Código: Seleccionar todo
#cs
AutoIt Version: 3.3.0.0
Author: Joaquin
Modificado por Chefito y Ximorro ;).
;Sumar los 'leds' encendidos(X) en cada columna, cuyo valor está asignado en cada fila. En el ejemplo serian las 23:49:04
8 0 X 0
4 0 X 0 0 X
2 X X 0 0 0 0
1 0 X 0 X 0 0
#ce
#Include <Constants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
TraySetIcon(@ScriptDir & "\led.ico",1)
TraySetToolTip("Reloj Binario ")
TraySetState()
Global $Pic[20]
$Form1 = GUICreate("Reloj Binario", 475, 400, 192, 124, BitOR($WS_CAPTION,$WS_POPUPWINDOW))
GUISetBkColor(0x000000)
$On = @ScriptDir & "\on.bmp"
$Off = @ScriptDir & "\off.bmp"
;1º dígito de los sg.
$Pic[0] = GUICtrlCreatePic($Off, 350, 265, 60, 60)
$Pic[1] = GUICtrlCreatePic($Off, 350, 205, 60, 60)
$Pic[2] = GUICtrlCreatePic($Off, 350, 145, 60, 60)
$Pic[3] = GUICtrlCreatePic($Off, 350, 85, 60, 60)
;2º dígito de los sg.
$Pic[4] = GUICtrlCreatePic($Off, 290, 265, 60, 60)
$Pic[5] = GUICtrlCreatePic($Off, 290, 205, 60, 60)
$Pic[6] = GUICtrlCreatePic($Off, 290, 145, 60, 60)
;1º dígito de los minutos.
$Pic[7] = GUICtrlCreatePic($Off,230, 265, 60, 60)
$Pic[8] = GUICtrlCreatePic($Off, 230, 205, 60, 60)
$Pic[9] = GUICtrlCreatePic($Off, 230, 145, 60, 60)
$Pic[10] = GUICtrlCreatePic($Off, 230, 85, 60, 60)
;2º dígito de los minutos.
$Pic[11] = GUICtrlCreatePic($Off, 170, 265, 60, 60)
$Pic[12] = GUICtrlCreatePic($Off, 170, 205, 60, 60)
$Pic[13] = GUICtrlCreatePic($Off, 170, 145, 60, 60)
;1º dígito de la hora.
$Pic[14] = GUICtrlCreatePic($Off, 110, 265, 60, 60)
$Pic[15] = GUICtrlCreatePic($Off, 110, 205, 60, 60)
$Pic[16] = GUICtrlCreatePic($Off, 110, 145, 60, 60)
$Pic[17] = GUICtrlCreatePic($Off, 110, 85, 60, 60)
;2º dígito de la hora.
$Pic[18] = GUICtrlCreatePic($Off, 50, 265, 60, 60)
$Pic[19] = GUICtrlCreatePic($Off, 50, 205, 60, 60)
$Lh = GUICtrlCreateLabel(@HOUR & " : " & @MIN & " : " & @SEC, 190, 370, 110,20)
GUICtrlSetColor(-1,0xE00000)
GUICtrlSetFont(-1, 12, 800)
Reloj()
AdlibEnable("Reloj",1000)
Func Reloj()
GUICtrlSetData($Lh, @HOUR & " : " & @MIN & " : " & @SEC)
$Lh1=Int(StringRight(@HOUR,1))
$Lh2=Int(StringLeft(@HOUR,1))
$Lm1=Int(StringRight(@MIN,1))
$Lm2=Int(StringLeft(@MIN,1))
$Ls1=Int(StringRight(@SEC,1))
$Ls2=Int(StringLeft(@SEC,1))
Local $bits=ConvDecimalBinario($Lh2,2)
$bits&=ConvDecimalBinario($Lh1,4)
$bits&=ConvDecimalBinario($Lm2,3)
$bits&=ConvDecimalBinario($Lm1,4)
$bits&=ConvDecimalBinario($Ls2,3)
$bits&=ConvDecimalBinario($Ls1,4)
For $n=0 To 19
$unBit=StringMid($bits,20-$n,1)
If $unBit="0" Then
GUICtrlSetImage($Pic[$n], $Off)
Else
GUICtrlSetImage($Pic[$n], $On)
EndIf
Next
EndFunc
GUISetState(@SW_SHOW)
Do
Sleep(10)
$nMsg=GUIGetMsg()
Until $nMsg = $GUI_EVENT_CLOSE
Exit
;Función para pasar un número decimal entero positivo a binario.
;Dos parámetro:
; - $numeroDecimal (obligado): Se le pasa un número en base decimal entero.
; - $NumBits (opcional): Se pasa el mínimo número de bits que quieres que tenga el
; número devuelto. Si no llega al número dado, lo rellena con ceros.
; Por defecto es igual a 0. Esto significa que no da ningún mínimo de longitud.
; Si no es un número entero positivo entonces @error=1 y la función
; devuelve -1.
;Realizada por Chefito el 28/11/2009. Mejorada por Ximorro el 20/11/2009.
Func ConvDecimalBinario($numeroDecimal,$NumBits=0)
If Not(IsInt($numeroDecimal)) Or $numeroDecimal<0 Then
SetError(1)
$resultado=-1
Else
Local $resultado=""
While 1
$resultado=Mod($numeroDecimal,2) & $resultado
$numeroDecimal=Int($numeroDecimal/2)
If $numeroDecimal=0 Then ExitLoop
WEnd
EndIf
$resultado = StringFormat("%0" & $NumBits & "s", $resultado)
Return $resultado
EndFunc
Espero que te guste joaquín.
.