Button mit transp. Icon und Farbänderung

  • Hi, möchte gern einen Button mit einem transp. Icon versehen. Der Button soll sich je nach Zustand einfärben, z.B. wenn ein Dienst aktiv ist soll er grün sein - ist er inaktiv dann rot. Hab schon einiges gefunden, aber irgendwie krieg ich es nicht so recht hin.

    Spoiler anzeigen
    [autoit]


    #include <ButtonConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #Region ### START Koda GUI section ### Form=
    $Form2 = GUICreate("Form1", 414, 306, 302, 218)
    $Button1 = GUICtrlCreateButton("", 6, 122, 400, 60)
    GUICtrlSetBkColor(-1, 0xFF0000)
    $Icon1 = GUICtrlCreateIcon("C:\Windows\System32\shell32.dll", -14, 190, 136, 32, 32)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit

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

    EndSwitch
    WEnd

    [/autoit]


    z.B. das Icon, es bringt die Farbe der GUI anstatt des Buttons 8| Hat einer von euch nen Tip für mich? Danke schonmal im Voraus.

  • Moin!

    Ich hab da mal was vorbereitet: 8)

    Spoiler anzeigen
    [autoit]

    #include <ButtonConstants.au3>
    #include <GuiButton.au3>

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

    Opt("GUIOnEventMode", 1)

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

    GUICreate("Shift Buttons", 232, 120)
    GUISetOnEvent(-3, "_Exit")

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

    $lPressed = GUICtrlCreateLabel("@GUI_CtrlId des Buttons: ", 48, 80)

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

    $bIcon = GUICtrlCreateButton("Icon", 20, 30, 25, 25, $BS_ICON) ;==> $BS_ICON weglassen für Buttons mit Text UND Icon (siehe unten)
    _GUICtrlButton_SetImage($bIcon, "shell32.dll", -24) ;==> _GUICtrlButton_SetImage passt die grösse des Icons an, im Gegensatz zu GUICtrlSetImage
    GUICtrlSetOnEvent(-1, "_pressed")

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

    $bColor = GUICtrlCreateButton("Color", 50, 30, 35, 25)
    GUICtrlSetBkColor(-1, 0x00FF00)
    GUICtrlSetOnEvent(-1, "_pressed")

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

    $bIconText = GUICtrlCreateButton(" Icon UND Text", 90, 30, 120, 25)
    _GUICtrlButton_SetImage($bIconText, "shell32.dll", -239)
    GUICtrlSetOnEvent(-1, "_pressed")

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

    GUISetState()

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

    While 1
    Sleep(5000)
    WEnd

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

    Func _pressed()
    Switch @GUI_CtrlId
    Case $bIcon ;==> es kann auch direkt die CtrlId des geklickten Buttons abgefragefragt werden, also hier 4
    Local Static $changeBtn4 ;==> "Static" bedeutet, dass der Wert der Variablen innerhalb der Funktion erhalten bleibt, ansonsten müsste $change als globale Variable angelegt werden
    If $changeBtn4 = 1 Then
    $changeBtn4 = 0
    _GUICtrlButton_SetImage($bIcon, "shell32.dll", -24)
    Else
    $changeBtn4 = 1
    _GUICtrlButton_SetImage($bIcon, "shell32.dll", -16783)
    EndIf
    Case $bColor ;==> es kann auch direkt die CtrlId des geklickten Buttons abgefragefragt werden, also hier 5
    Local Static $changeBtn5
    If $changeBtn5 = 1 Then
    $changeBtn5 = 0
    GUICtrlSetBkColor($bColor, 0x00FF00)
    Else
    $changeBtn5 = 1
    GUICtrlSetBkColor($bColor, 0xFF0000)
    EndIf
    Case $bIconText ;==> es kann auch direkt die CtrlId des geklickten Buttons abgefragefragt werden, also hier 6
    Local Static $changeBtn6
    If $changeBtn6 = 1 Then
    $changeBtn6 = 0
    _GUICtrlButton_SetImage($bIconText, "shell32.dll", -239)
    GUICtrlSetData($bIconText, " Icon UND Text")
    Else
    $changeBtn6 = 1
    _GUICtrlButton_SetImage($bIconText, "shell32.dll", -240)
    GUICtrlSetData($bIconText, " ICON und TEXT")
    EndIf
    EndSwitch
    GUICtrlSetData($lPressed, "@GUI_CtrlId des Buttons: " & @GUI_CtrlId)
    EndFunc ;==>_pressed

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

    Func _Exit()
    Exit
    EndFunc ;==>_Exit

    [/autoit]


    Sollte ziemlich selbsterklärend sein, sonst frag halt... :rolleyes:

    *edit*
    netter Nick...wir passen gut zusammen :D

  • Hier mal eine andere Lösung. ;)

    [autoit]


    #AutoIt3Wrapper_AU3Check_Parameters=-d -w 1 -w 2 -w 3 -w 4 -w 5 -w 6
    #include <ButtonConstants.au3>
    #include <WindowsConstants.au3>
    ;~ +> $WS_CLIPSIBLINGS —> WindowsConstants.au3
    ;~ +> $BS_BOTTOM —> ButtonConstants.au3
    ;~ +> $BS_MULTILINE —> ButtonConstants.au3

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

    Global $msg, $tate = 1, $sMsg[2], $Color[2] = [0xFF0000, 0x00FF00]
    $sMsg[0] = '\nViel Spaß wünscht\nRitzelrocker04 !'
    $sMsg[1] = '\nDas ist ein\nmehrzeiliger Text\nin einem\nfarbigen Button'

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

    GUICreate('Colored_image_Button-Tut', 300, 150)
    GUICtrlCreateIcon("shell32.dll", -14, 40, 40, 32, 32, 0)
    Global $btnColor = GUICtrlCreateButton(StringFormat($sMsg[1]), 10, 10, 230, 100, BitOR($WS_CLIPSIBLINGS, $BS_BOTTOM, $BS_MULTILINE))
    GUICtrlSetBkColor(-1, 0x00FF00)
    GUISetState()

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

    While True
    $msg = GUIGetMsg()
    Switch $msg
    Case -3 ;$GUI_EVENT_CLOSE
    MsgBox(64, 'tata... ;)', StringFormat($sMsg[0]), 3)
    ExitLoop
    Case $btnColor
    $tate = BitXOR($tate, 0, 1)
    For $k = 0 To 1 ;i statisch kein Ubound
    GUICtrlSetData($btnColor, StringFormat($sMsg[$tate]))
    GUICtrlSetBkColor($btnColor, $Color[$tate])
    Next
    EndSwitch
    WEnd
    ; Ende

    [/autoit]
  • Friesel & RR04
    Danke euch für die Antworten! Ich dachte aber eher in die Richtung...

    Spoiler anzeigen
    [autoit]


    #include <ButtonConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #Region ### START Koda GUI section ### Form=
    $Form2 = GUICreate("Form1", 414, 306, 302, 218)
    $Button1 = GUICtrlCreateButton("", 6, 122, 400, 60)
    $Icon1 = GUICtrlCreateIcon("C:\Windows\System32\shell32.dll", -14, 190, 136, 32, 32)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    AdlibRegister("_change", 250)

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit

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

    EndSwitch
    WEnd

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

    Func _change()
    If ProcessExists('mspaint.exe') Then
    GUICtrlSetbkColor($Button1, 0x00ff00)
    Else
    GUICtrlSetbkColor($Button1, 0xFF0000)
    EndIf
    EndFunc

    [/autoit]


    Also wenn meinprog läuft oder gestartet wird, soll gleich der Status von mspaint.exe geprüft und die entspr. Farbe auf den Button gelegt werden. Allerdings blinkt der Button noch wie verrückt ?( und das Icon lässt den Hintergrund vom Gui durchblitzen. Vllt. kann man auch eine andere Grafik verwenden?

  • Er blinkt, weil du alle 250 ms die Farbe änderst bzw. neu setzt.

    Um Missverständnisse zu vermeiden, mein Name rührt vom Sternenbild und nicht vom Shop her :D


    Rainbow Dash :rock:

    "Das, wobei unsere Berechnungen versagen, nennen wir Zufall." (Albert Einstein)

  • Spoiler anzeigen
    [autoit]


    #AutoIt3Wrapper_AU3Check_Parameters=-d -w 1 -w 2 -w 3 -w 4 -w 5 -w 6
    #region ### START Koda GUI section ###
    GUICreate("ProcessExists", 400, 300)
    Global $nMsg, $Button = GUICtrlCreateButton("", 10, 122, 380, 60)
    GUICtrlCreateIcon("shell32.dll", -14, 190, 136, 32, 32, 0)
    GUISetState(@SW_SHOW)
    #endregion ### END Koda GUI section ###

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

    ;i Einmaliger Aufruf der Funktion, gleich nach Programmstart.
    _change()
    ;i Aufruf der Funktion, alle 5000 ms.
    AdlibRegister("_change", 5000)

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

    ;i Das Flackern wird durch zu schnelles wiederholtes Zeichnen verursacht!
    ;~ AdlibRegister("_change", 250)

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

    While True
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case -3
    Exit
    EndSwitch
    WEnd

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

    Func _change()
    Local $color = 0xFF0000
    If ProcessExists('mspaint.exe') Then $color = 0x00FF00
    GUICtrlSetBkColor($Button, $color)
    EndFunc ;==>_change
    ; Ende

    [/autoit]
  • RR04
    Danke für das weitere Beispiel! Bin aber irgendwie noch nicht so recht überzeugt davon. Gibt es evtl. andere Varianten/Möglichkeiten um einen Status anzeigen zu lassen? Z.B. so wie im Forum wenn man on- oder offline ist?