Hover Effekt beim Bild Problem

  • Hallo,

    ich bekomme es nicht hin, dass der Hovereffekt bei einem Bild von mir wirkt.

    Wenn die Maus auf dem Bild $CheckboxOn ist, dann soll $CheckboxOff gezeigt werden.

    Hier mal mein Versuch :

    Spoiler anzeigen
    [autoit]

    Opt("MouseCoordMode",2)
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    $Form1 = GUICreate("Form1", 183, 165, 192, 124)
    $CheckboxOff = GUICtrlCreatePic("C:\Users\User\Documents\My\CheckboxOff.jpg", 64, 56, 54, 55)
    $CheckboxOn = GUICtrlCreatePic("C:\Users\User\Documents\My\CheckboxOn.jpg", 64, 56, 54, 55)
    $CheckboxHover = GUICtrlCreatePic("C:\Users\User\Documents\My\CheckboxHover.jpg", 64, 56, 54, 55)
    GuiCtrlSetState($CheckboxOn,$GUI_HIDE)
    GuiCtrlSetState($CheckboxHover,$GUI_HIDE)
    GUISetState(@SW_SHOW)

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

    While 1
    $nMsg = GUIGetMsg()
    $Pos = MouseGetPos()
    If $Pos[0] = 64 And $Pos[1] = 56 Then
    GuiCtrlSetState($CheckboxOff,$GUI_HIDE)
    GuiCtrlSetState($CheckboxOn,$GUI_HIDE)
    GuiCtrlSetState($CheckboxHover,$GUI_SHOW)
    EndIf
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $CheckboxOff
    GuiCtrlSetState($CheckboxOff,$GUI_HIDE)
    GuiCtrlSetState($CheckboxOn,$GUI_SHOW)
    Case $CheckboxOn
    GuiCtrlSetState($CheckboxOff,$GUI_SHOW)
    GuiCtrlSetState($CheckboxOn,$GUI_HIDE)
    EndSwitch
    WEnd

    [/autoit]

    Was mache ich dort falsch?

  • Ich verstehe zwar nicht, was der Code da ergeben soll, aber so kann man einen hover-Effekt erzeugen:

    [autoit]

    Global $sCheckboxOff = "C:\Users\Administrator\Documents\norm.bmp", $sCheckboxOn = "C:\Users\Administrator\Documents\hover.bmp", $bHover = False
    $hGUI = GUICreate ("", 183, 165, 192, 124)
    $hPic = GUICtrlCreatePic ($sCheckboxOff, 10, 10, 50, 50)
    GUISetState (@SW_SHOW, $hGUI)

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

    While True
    $nMsg = GUIGetMsg ()
    $aPos = GUIGetCursorInfo ()
    Select
    Case $nMsg = -3
    Exit
    Case ($aPos[0] >= 10 And $aPos[0] <= 60) And ($aPos[1] >= 10 And $aPos[1] <= 60)
    If $bHover = False Then
    GUICtrlSetImage ($hPic, $sCheckboxOn)
    $bHover = True
    EndIf
    Case Else
    If $bHover = True Then
    GUICtrlSetImage ($hPic, $sCheckboxOff)
    $bHover = False
    EndIf
    EndSelect
    WEnd

    [/autoit]
    • Offizieller Beitrag

    $var
    Warum prüfst du die Position ab um zu wissen, ob die Maus über dem Control ist?
    Schau mal in die Hilfe zu: "GUIGetCursorInfo"

    Code
    $array[4] = ID des Controls, über dem sich der Mauszeiger gerade befindet (0 wenn nicht über einem Item)


    Es läßt sich also direkt die Control-ID vergleichen. ;)

  • Danke Bugfix, das Bild verändert sich, wenn der Coursor über dem Control ist, allerdings bekomme ich es nicht ganz hin, dass
    es wieder rückgänig gemacht wird, wenn der Coursor nicht über de Control liegt.

    So sieht mein Skript immoment aus :

    Spoiler anzeigen
    [autoit]


    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    $Form1 = GUICreate("Form1", 183, 165, 192, 124)
    $CheckboxOff = GUICtrlCreatePic("C:\Users\User\Documents\My\CheckboxOff.jpg", 64, 56, 54, 55)
    $CheckboxOn = GUICtrlCreatePic("C:\Users\User\Documents\My\CheckboxOn.jpg", 64, 56, 54, 55)
    $CheckboxHover = GUICtrlCreatePic("C:\Users\User\Documents\My\CheckboxHover.jpg", 64, 56, 54, 55)
    GuiCtrlSetState($CheckboxOn,$GUI_HIDE)
    GuiCtrlSetState($CheckboxHover,$GUI_HIDE)
    GUISetState(@SW_SHOW)

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

    While 1
    $nMsg = GUIGetMsg()
    $Pos = GuiGetCursorInfo()
    If $Pos[4] = $CheckboxOff Then
    GuiCtrlSetState($CheckboxOff,$GUI_HIDE)
    GuiCtrlSetState($CheckboxOn,$GUI_HIDE)
    GuiCtrlSetState($CheckboxHover,$GUI_SHOW)
    EndIf
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $CheckboxOff
    GuiCtrlSetState($CheckboxOff,$GUI_HIDE)
    GuiCtrlSetState($CheckboxOn,$GUI_SHOW)
    Case $CheckboxOn
    GuiCtrlSetState($CheckboxOff,$GUI_SHOW)
    GuiCtrlSetState($CheckboxOn,$GUI_HIDE)
    EndSwitch
    WEnd

    [/autoit] [autoit][/autoit] [autoit][/autoit]
    • Offizieller Beitrag

    allerdings bekomme ich es nicht ganz hin, dass
    es wieder rückgänig gemacht wird, wenn der Coursor nicht über de Control liegt.


    Da hast du vergessen die Statusvariable zu verwenden, wie in $var's Skript zu sehen.

    Hier mal kurz, ungetestet:

    [autoit]

    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    ;~ $CheckboxHover = GUICtrlCreatePic("C:\Users\User\Documents\My\CheckboxHover.jpg", 64, 56, 54, 55)
    $picOn = "C:\Users\User\Documents\My\CheckboxOn.jpg"
    $picOff = "C:\Users\User\Documents\My\CheckboxOff.jpg"
    $fState = False

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

    $Form1 = GUICreate("Form1", 183, 165, 192, 124)
    $Checkbox = GUICtrlCreatePic($picOff, 64, 56, 54, 55)

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

    GUISetState(@SW_SHOW)

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

    While 1
    $nMsg = GUIGetMsg()
    $Pos = GuiGetCursorInfo()
    Switch $Pos[4]
    Case $Checkbox
    If Not $fState Then
    GUICtrlSetImage($Checkbox, $picOn)
    $fState = True
    EndIf
    Case Else
    If $fState Then
    GUICtrlSetImage($Checkbox, $picOff)
    $fState = False
    EndIf
    EndSwitch
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    EndSwitch
    WEnd

    [/autoit]