On/Off Button erstellen

  • Hay Leute!
    Ich woll grade nen on/off button erstellen aber irgendwie krieg ich es nicht hin :(
    ich glaube das skript sagt schon wie genau das aussehen soll

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

    #include <ButtonConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Form1", 126, 92, 531, 416)
    $Button1 = GUICtrlCreateButton("On/Off", 8, 32, 65, 25, 0)
    $Pic1 = GUICtrlCreatePic("", 80, 32, 33, 25, BitOR($SS_NOTIFY,$WS_GROUP,$WS_CLIPSIBLINGS))
    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]

    Case $Button1
    GUICtrlSetData($Pic1,"on.jpg")
    EndSwitch
    WEnd

    [/autoit][autoit][/autoit][autoit][/autoit]
  • Hier mal ein bsp. (musst halt noch ändern das das mit nem bild ist)

    Spoiler anzeigen
    [autoit]

    #include <ButtonConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Form1", 126, 92, 531, 416)
    $Button1 = GUICtrlCreateButton("Off", 8, 32, 65, 25, 0)
    $Label1 = GuictrlcreateLabel("", 80,20,40,43)
    GUICtrlSetBkColor($Label1,0xff0000)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    While 1
    $nMsg = GUIGetMsg()
    Select
    Case $nMsg = $GUI_EVENT_CLOSE
    Exit
    Case $nMsg = $Button1 and GUICtrlRead($Button1) = "Off"
    GUICtrlSetData($Button1,"On")
    GUICtrlSetBkColor($Label1,0x00ff00)
    Case $nMsg = $Button1 and GUICtrlRead($Button1) = "On"
    GUICtrlSetData($Button1,"Off")
    GUICtrlSetBkColor($Label1,0xff0000)
    EndSelect
    WEnd

    [/autoit]
    [autoit]


    Func Ulam($n)
    Return 1
    EndFunc

    [/autoit]


    Rekursion FTW :D

    • Offizieller Beitrag

    Hier, so gehts (Text oder Bild - Style beachten, Iconstyle, Bitmapstyle, s. Hilfe)

    Spoiler anzeigen
    [autoit]

    Global $IconPath = "DEIN PFAD......\Eigene Bilder\"
    Global $OnState1 = 0, $OnState2 = 0
    $Form1 = GUICreate("Form1", 126, 92, 531, 416)
    $Button1 = GUICtrlCreateButton("On", 8, 32, 65, 25, 0)
    $Button2 = GUICtrlCreateButton('', 80, 32, 36, 36, $BS_ICON)
    GUICtrlSetImage(-1, $IconPath & 'restart.ico')
    GUISetState(@SW_SHOW)

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Button1
    $OnState1 = BitXOR($OnState1, 1)
    If $OnState1 Then
    GUICtrlSetData($Button1, "Off")
    Else
    GUICtrlSetData($Button1, "On")
    EndIf
    Case $Button2
    $OnState2 = BitXOR($OnState2, 1)
    If $OnState2 Then
    GUICtrlSetImage($Button2, $IconPath & 'shutdown.ico')
    Else
    GUICtrlSetImage($Button2, $IconPath & 'restart.ico')
    EndIf
    EndSwitch
    WEnd

    [/autoit]

    Hier mal die verwendeten Icon zum Testen: autoit.de/wcf/attachment/7728/

  • ok thanks an euch beide wobei ich das skript von bugfix sogut wie garnicht verstehe ;( .
    Aber trotzdem danke das von retrokid ist leicht und verständlich sowas braucht ein 14 jähriger ^^

    • Offizieller Beitrag

    ok thanks an euch beide wobei ich das skript von bugfix sogut wie garnicht verstehe ;( .
    Aber trotzdem danke das von retrokid ist leicht und verständlich sowas braucht ein 14 jähriger ^^


    Wenn du es nicht verstehst, kannst du doch fragen. Es wird einfach der Status des Button in einer Variablen gespeichert (0=Off=Titel"On", 1=On=Titel"Off"). BitXor switcht den Wert, wenn er 0 war, wird er 1 und umgekehrt.
    Dann wird in Abhängigkeit zum Status der Titel (das Bild) neu gesetzt, hier würde auch dein zugehöriger Code reinkommen.

    btw: Du wolltest ein Bild setzen - die Lösung von retrokid ermöglicht das aber nicht.. :whistling:


  • Wenn du es nicht verstehst, kannst du doch fragen. Es wird einfach der Status des Button in einer Variablen gespeichert (0=Off=Titel"On", 1=On=Titel"Off"). BitXor switcht den Wert, wenn er 0 war, wird er 1 und umgekehrt.
    Dann wird in Abhängigkeit zum Status der Titel (das Bild) neu gesetzt, hier würde auch dein zugehöriger Code reinkommen.

    btw: Du wolltest ein Bild setzen - die Lösung von retrokid ermöglicht das aber nicht.. :whistling:

    doch schon man muss halt nur das label durch ein bild ersetzen also guictrlcreatepic(...)
    und dann guictrlsetdata($bild,"bildpfad") :huh:

    [autoit]


    Func Ulam($n)
    Return 1
    EndFunc

    [/autoit]


    Rekursion FTW :D

    • Offizieller Beitrag

    doch schon man muss halt nur das label durch ein bild ersetzen also guictrlcreatepic(...)


    Dann hast du aber keinen Button-Effekt ;)

    Übrigens, zu dem "Gedrückt halten" --> schaut mal hier nach. Picture als Button animiert Daraus kann man das basteln.

  • er sagte er will einen on/off button und ein bild
    ich habe einen on off button erstellt und ein label als bild und er war doch damit zufrieden also ist es ja eigentlich egal :D

    [autoit]


    Func Ulam($n)
    Return 1
    EndFunc

    [/autoit]


    Rekursion FTW :D

    • Offizieller Beitrag

    Es gibt auch noch die Möglichkeit mit einer Checkbox und dem $BS_PUSHLIKE-Style solche Buttons zu erstellen:

    Spoiler anzeigen
    [autoit]


    #include <ButtonConstants.au3>
    GUICreate('Switch-Button', 400, 300)
    $hButton1 = GUICtrlCreateCheckbox('Button 1', 20, 20, 100, 20, $BS_PUSHLIKE)
    $hButton2 = GUICtrlCreateCheckbox('Button 2', 20, 60, 100, 20, $BS_PUSHLIKE)
    $hButton3 = GUICtrlCreateCheckbox('Button 3', 20, 100, 100, 20, $BS_PUSHLIKE)
    GUISetState()
    Do
    Until GUIGetMsg() = -3

    [/autoit]
  • Hier ein Beispiel für die eingedrückten
    Buttons. Kann sein, dass es nicht funktioniert.
    Auf Windows 7 schaut das komisch aus, weil
    die Buttons da nicht wirklich eingedrückt sind. ;)
    Ansonstan kann man als Style auch $GUI_DISABLE
    benutzen. ;)

    Beispiel
    [autoit]


    #cs ----------------------------------------------------------------------------

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

    AutoIt Version: 3.3.2.0
    Author: qixx (http://www.autoit.de)
    Credits:

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

    #ce ----------------------------------------------------------------------------

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

    #Region ### Includes
    #include <GUIConstants.au3>
    #include <ButtonConstants.au3>

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

    #EndRegion ### Includes

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

    #Region ### GUI
    $MainGUI = GUICreate("Button umschalten", 117, 67)
    $Button1 = GUICtrlCreateButton("Button1", 16, 8, 81, 17)
    $Button2 = GUICtrlCreateButton("Button2", 16, 24, 81, 17)
    $Button3 = GUICtrlCreateButton("Button3", 16, 40, 81, 17)
    GUISetState(@SW_SHOW)
    #EndRegion ### GUI

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

    While 1
    Sleep(10)
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    If WinActive($MainGUI) Then
    Exit
    Endif
    Case $Button1
    GUICtrlSetStyle($Button1,$BS_PUSHLIKE)
    GUICtrlSetStyle($Button2,"")
    GUICtrlSetStyle($Button3,"")
    Case $Button2
    GUICtrlSetStyle($Button2,$BS_PUSHLIKE)
    GUICtrlSetStyle($Button3,"")
    GUICtrlSetStyle($Button1,"")
    Case $Button3
    GUICtrlSetStyle($Button3,$BS_PUSHLIKE)
    GUICtrlSetStyle($Button1,"")
    GUICtrlSetStyle($Button2,"")
    EndSwitch
    WEnd

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


    MfG
    qixx

  • Ich will den alten Thread (auf den ja oben schon hingewiesen wurde) nicht nochmal ausbuddeln.
    Trotzdem ist die folgende Abwandlung für den einen oder anderen interessant:
    (Es sollte hier bereits gesagt werden, dass ich die Version von Bugfix etwas angepasst habe und
    so den (eigenen) Buttons das "normale" Verhalten gegeben habe.)
    Probierts aus (das Bild müsst ihr aber selber auswählen):

    Spoiler anzeigen
    [autoit]

    #include <WindowsConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <Misc.au3>
    Global $pic = @ScriptDir & '\BILD.bmp', $DLL = DllOpen('user32.dll')

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

    $gui = GUICreate("Test", Default, Default, -1, -1)
    $btnPic = GUICtrlCreatePic($pic, 30, 40, 100, 100)
    GUISetState()

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

    While 1
    $msg = GUIGetMsg()
    Select
    Case $msg = $btnPic
    $W = _AnimButton($gui, $btnPic)
    If $W = 1 Then
    MsgBox(0, "KLICK innerhalb", 1)
    Else
    MsgBox(0, "KLICK außerhalb", 0)
    EndIf

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

    Case $msg = $GUI_EVENT_CLOSE
    Exit
    EndSelect
    WEnd

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

    ;==================================================================================================
    ; Function Name: _AnimButton($IDgui, $IDbtn [, $delay=150])
    ; Description: animiert ein Pic, wie einen geklickten Button
    ; Parameter(s): $IDgui ID der GUI
    ; $IDbtn ID des Picture als Button
    ;==================================================================================================
    Func _AnimButton($IDgui, $IDbtn)
    Local $pos = ControlGetPos($IDgui, '', $IDbtn), $p
    ControlMove($IDgui, '', $IDbtn, $pos[0], $pos[1] + 1, $pos[2] - 1, $pos[3] - 1)

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

    While _IsPressed("01", $DLL)
    $p = GUIGetCursorInfo()
    If $p[0] + 1 > $pos[0] And $p[0] < $pos[0] + $pos[2] + 1 And $p[1] + 1 > $pos[1] And $p[1] < $pos[1] + $pos[3] + 1 Then
    ControlMove($IDgui, '', $IDbtn, $pos[0], $pos[1] + 1, $pos[2] - 1, $pos[3] - 1)
    Else
    ControlMove($IDgui, '', $IDbtn, $pos[0], $pos[1], $pos[2], $pos[3])
    EndIf

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

    WEnd
    If $p[0] + 1 > $pos[0] And $p[0] < $pos[0] + $pos[2] And $p[1] + 1 > $pos[1] And $p[1] < $pos[1] + $pos[3] Then
    ControlMove($IDgui, '', $IDbtn, $pos[0], $pos[1], $pos[2], $pos[3])
    Return 1
    Else
    ControlMove($IDgui, '', $IDbtn, $pos[0], $pos[1], $pos[2], $pos[3])
    Return 0
    EndIf
    EndFunc ;==>_AnimButton von Bugfix (abgewandelt von XovoxKingdom)

    [/autoit]


    EDIT: Anpassung des Bildfeldes (+1), da man ja nur IN das Feld klicken soll/darf!

    Wer immer nur das tut, was er bereits kann - wird auch immer nur das bleiben, was er bereits ist!

    Einmal editiert, zuletzt von XovoxKingdom (14. Februar 2010 um 17:32)