Color Picker

  • Hallo :)
    Bin noch Anfänger in AutoIt und wollte etwas nützliches machen.
    Angezeigt wird die Farbe über der die Maus gerade ist im RGB und Hex Format. Ausserdem sieht man noch ein kleines Bildchen als Vorschau.
    Sobald man die Linke Maustaste drückt bleiben die werte bestehen.
    Mit dem Reset-Button kann man es wieder zurücksetzten.

    Spoiler anzeigen
    [autoit]


    #NoTrayIcon
    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_icon=..\..\Desktop\favicon.ico
    #AutoIt3Wrapper_outfile=ColorPicker.exe
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
    #include <GUIConstantsEx.au3>
    #include <Constants.au3>
    #include <Misc.au3>
    #include <Color.au3>
    #include <String.au3>

    [/autoit] [autoit][/autoit] [autoit]

    Opt("GUIOnEventMode", 1)
    Opt("TrayMenuMode",1)
    Global $TrayShow = TrayCreateItem('Anzeigen')
    Global $TrayExit = TrayCreateItem('Beenden')
    TraySetClick(16)

    [/autoit] [autoit][/autoit] [autoit]

    Dim $pressed = False

    [/autoit] [autoit][/autoit] [autoit]

    #Region GUI
    $GUI = GUICreate("ColorPicker", 194, 90, 192, 114, -1, 0x00000008)
    GUISetCursor (3)

    [/autoit] [autoit][/autoit] [autoit]

    $color = GUICtrlCreateLabel("R G B ", 7, 13, 31, 17)
    $hex = GUICtrlCreateLabel("Hex Wert", 7, 35, 49, 17)
    $colorInput = GUICtrlCreateInput("", 60, 8, 85, 21, 0x0800)
    $hexInput = GUICtrlCreateInput("", 60, 32, 85, 21, 0x0800)
    $Graphic = GUICtrlCreateGraphic(152, 8, 34, 44)
    GUICtrlSetBkColor(-1, 0x000000)

    [/autoit] [autoit][/autoit] [autoit]

    $Reset = GUICtrlCreateButton("Reset", 8, 59, 65, 25)
    GUICtrlSetOnEvent(-1, "_Reset")

    [/autoit] [autoit][/autoit] [autoit]

    GUISetOnEvent($GUI_EVENT_CLOSE, "Close")
    GUISetOnEvent($GUI_EVENT_MINIMIZE, "Minimize")
    GUISetState(@SW_SHOW)
    #EndRegion

    [/autoit] [autoit][/autoit] [autoit]

    While True
    If _IsPressed("01") Then $pressed = True

    [/autoit] [autoit][/autoit] [autoit]

    If Not $pressed Then
    $MousePos = MouseGetPos()
    $colorOnPixel = PixelGetColor($MousePos[0], $MousePos[1])
    $hexOnPixel = Hex($colorOnPixel)
    $r = _ColorGetRed($colorOnPixel)
    $g = _ColorGetGreen($colorOnPixel)
    $b = _ColorGetBlue($colorOnPixel)

    [/autoit] [autoit][/autoit] [autoit]

    $Hex = "0x" & StringRight($hexOnPixel, 6)

    [/autoit] [autoit][/autoit] [autoit]

    GUICtrlSetBkColor($Graphic, $Hex)
    GUICtrlSetData($colorInput, $r &" "& $g &" "& $b)
    GUICtrlSetData($hexInput, $Hex)
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    Sleep(100)

    [/autoit] [autoit][/autoit] [autoit]

    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    Func Close()
    Exit 0
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func Minimize()
    Opt("TrayIconHide", 0)
    GUISetState(@SW_HIDE, $GUI)
    TrayTip("ColorPicker", "Ihr Programm wird weiter ausgeführt. Klicken Sie hier um es Sichtbar zu machen.", 15, 1) ; Tray-Tip anzeigen bei Minimierung

    [/autoit] [autoit][/autoit] [autoit]

    While True
    $TrayMsg = TrayGetMsg()

    [/autoit] [autoit][/autoit] [autoit]

    Switch $TrayMsg
    Case $TRAY_EVENT_PRIMARYDOUBLE ; Doppelklick auf das Tray Icon
    Opt('TrayIconHide', 1)
    GUISetState(@SW_SHOW, $GUI)
    GUISetState(@SW_RESTORE, $GUI)
    ExitLoop

    [/autoit] [autoit][/autoit] [autoit]

    Case $TrayShow ; Anzeigen wurde ausgewählt
    Opt('TrayIconHide', 1)
    GUISetState(@SW_SHOW, $GUI)
    GUISetState(@SW_RESTORE, $GUI)
    ExitLoop

    [/autoit] [autoit][/autoit] [autoit]

    Case $TrayExit ; Beenden wurde ausgewählt
    Exit

    [/autoit] [autoit][/autoit] [autoit]

    EndSwitch
    WEnd
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _Reset()
    $pressed = False
    EndFunc

    [/autoit]

    Ist nichts besonderes, würde mich aber sehr über eure Meinung freuen & Verbesserungen hören.
    Falls es Fehler gibt würde ich sie gerne hören =)

  • du bist noch ein autoit neuling ?
    o.Ô
    dann ist das ma ne richtig große leistung...^^
    ich weiß nicht ob ich soetwas scripten könnte :D

  • Also ohne mir das jetzt genauer angeguckt zu haben wäre es mit Sicherheit praktisch noch was einzubauen um den aktuellen Farbwert zu kopieren.

  • Danke :)
    @ eF_Hacks: Meinst du ein Button der den aktuellen Farbwert des Inputs in die Zwischenablage kopiert?

    Hat noch jemand verbesserungsvorschläge oder was zusagen? :) :) :)

    • Offizieller Beitrag

    Wilkommen hier im Forum.

    Habe gesehen das du in deinem Script den OnEventMode benutz. Kennst du auch $GUI_EVENT_PRIMARYDOWN? Nachzulesen in der Hilfe unter GuiSetOnEvent. Damit könntest du dir die IsPressed abfrage sparen. ;)

  • Das ist auch eine gute Idee, fiel mir garnicht ein :P
    Aber ein großen Unterschied macht das ja eh nicht, oder?

  • als ich angefangen hab, hatte ich auch mal sowas geschrieben, um bei html-codes immer gleich die passenden hexwerte rausfinden zu können.
    fands interessant wie du das ganze gelöst hast, vllt gefällt dir ja meins auch :)

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>
    #NoTrayIcon
    HotKeySet("{F10}", "Pixelfarbe")
    Global $maus, $farbe

    [/autoit] [autoit][/autoit] [autoit]

    $Wurm = GUICreate("Colorname", 242, 320, 194, 127)
    GUICtrlCreateGroup("Farbe:", 120, 8, 113, 49)
    GUICtrlCreateGroup("", 8, 56, 225, 65)
    GUICtrlCreateGroup("Rot", 16, 64, 65, 49)
    GUICtrlCreateGroup("Grün", 88, 64, 65, 49)
    GUICtrlCreateGroup("Blau", 160, 64, 65, 49)
    $Rot = GUICtrlCreateInput("0", 25, 81, 48, 25, 0x2001)
    GUICtrlSetLimit(GUICtrlCreateUpdown($Rot), 255, 0)
    $Gruen = GuiCtrlCreateInput("0", 97, 81, 48, 25, 0x2001)
    GUICtrlSetLimit(GUICtrlCreateUpdown($Gruen), 255, 0)
    $Blau = GuiCtrlCreateInput("0", 169, 81, 48, 25, 0x2001)
    GUICtrlSetLimit(GUICtrlCreateUpdown($Blau), 255, 0)
    GUICtrlCreateGroup("Hexwert", 8, 8, 105, 49)
    $Color = GUICtrlCreateInput("", 17, 24, 86, 24)
    GUICtrlSetLimit($Color, 6)
    GUICtrlSetFont(-1, 10, 400, 0, "MS Sans Serif")
    GUICtrlSetResizing(-1, $GUI_DOCKAUTO)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    $Graphic = GUICtrlCreateGraphic(128, 24, 94, 21)
    If FileExists(@MyDocumentsDir & "\Farbpalette.bmp") = 0 Then
    Fileinstall("C:\Dokumente und Einstellungen\gm30307\Desktop\Farbpalette.bmp", @MyDocumentsDir & "\Farbpalette.bmp")
    FileSetAttrib(@MyDocumentsDir & "\Farbpalette.bmp", "+H")
    EndIf
    GUICtrlCreatePic( @MyDocumentsDir & "\Farbpalette.bmp", 15, 132, 212, 180)

    [/autoit] [autoit][/autoit] [autoit]

    GUISetState(@SW_SHOW)
    WinSetOnTop("Colorname", "", 1)

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Color
    GUICtrlSetBkColor($Graphic, "0x"&GUICtrlRead($Color))
    GUICtrlSetData( $Rot, Dec(StringLeft(GUICtrlRead($Color), 2)))
    GUICtrlSetData( $Gruen, Dec(StringMid(GUICtrlRead($Color), 3, 2)))
    GUICtrlSetData( $Blau, Dec(StringRight(GUICtrlRead($Color), 2)))
    Case $Rot
    GUICtrlSetData( $Color, StringRight(Hex(Guictrlread($Rot)), 2) & StringRight(Hex(GUICtrlRead($Gruen)), 2) & StringRight(Hex(Guictrlread($Blau)), 2))
    GUICtrlSetBkColor($Graphic, "0x"&GUICtrlRead($Color))
    Case $Gruen
    GUICtrlSetData( $Color, StringRight(Hex(Guictrlread($Rot)), 2) & StringRight(Hex(GUICtrlRead($Gruen)), 2) & StringRight(Hex(Guictrlread($Blau)), 2))
    GUICtrlSetBkColor($Graphic, "0x"&GUICtrlRead($Color))
    Case $Blau
    GUICtrlSetData( $Color, StringRight(Hex(Guictrlread($Rot)), 2) & StringRight(Hex(GUICtrlRead($Gruen)), 2) & StringRight(Hex(Guictrlread($Blau)), 2))
    GUICtrlSetBkColor($Graphic, "0x"&GUICtrlRead($Color))
    EndSwitch
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    Func Pixelfarbe()
    $maus = MouseGetPos()
    $farbe = PixelGetColor( $maus[0], $maus[1])
    GUICtrlSetData( $Color, StringRight(Hex($farbe), 6))
    GUICtrlSetBkColor($Graphic, "0x"&guictrlread($Color))
    GUICtrlSetData( $Rot, Dec(StringLeft(GUICtrlRead($Color), 2)))
    GUICtrlSetData( $Gruen, Dec(StringMid(GUICtrlRead($Color), 3, 2)))
    GUICtrlSetData( $Blau, Dec(StringRight(GUICtrlRead($Color), 2)))
    EndFunc

    [/autoit]
  • Hi,
    "in Ausgewachsen" gibts so etwas HIER