Bilder in bestehender Gui wechseln per Maus-in-Region

  • Hallo :D
    und wieder ein Problem :(
    Ich hab folgendes Skript geschrieben:
    (hab mal alles Unter Spoiler unterteilt damits übersichtlicher wird)

    Das Skript:

    Spoiler anzeigen
    [autoit]

    #include
    #include

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

    AutoItSetOption("MouseCoordMode",0)

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

    GUICreate("Background", 807, 400,-1,-1,$WS_POPUP)
    $playbut = GUICtrlCreatePic("black/playbutton.jpg", 0, 356,50,44)
    $stopbut = GUICtrlCreatePic("black/stopbutton.jpg", 50, 356,50,44)
    $autobut = GUICtrlCreatePic("black/openbutton.jpg", 100, 356,50,44)
    $endbut = GUICtrlCreatePic("black/endbutton.jpg", 757, 356,50,44)
    GUICtrlCreatePic("black/langerbalken.jpg", 150, 356,607,44)

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

    GUISetState(@SW_SHOW)

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

    While 1

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

    $mousepos = MouseGetPos()
    $check = GUIGetMsg()

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

    Select

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

    Case $check = $endbut
    Exitloop

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

    ;:::inside-bereich:::
    Case _Mouse_bereich_(0,50,356,400)
    GUICtrlSetImage(3,"blue/playbuttonblau.jpg") ;playbut

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

    case _Mouse_bereich_(50,100,356,400)
    GUICtrlSetImage(4,"blue/stopbuttonblau.jpg") ;stopbut

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

    case _Mouse_bereich_(100,150,356,400)
    GUICtrlSetImage(5,"blue/openbuttonblau.jpg") ;Autoresümeebut

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

    case _Mouse_bereich_(757,807,356,400)
    GUICtrlSetImage(6,"blue/endbuttonblau.jpg") ;Exitbut

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

    ;:::outside-bereich:::
    case _Mouse_bereich_aus_(0,50,356,400)
    GUICtrlSetImage(3,"black/playbutton.jpg") ;playbut

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

    case _Mouse_bereich_aus_(50,100,356,400)
    GUICtrlSetImage(4,"black/stopbutton.jpg") ;stopbut

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

    case _Mouse_bereich_aus_(100,150,356,400)
    GUICtrlSetImage(5,"black/openbutton.jpg") ;Autoresümeebut

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

    case _Mouse_bereich_aus_(757,807,356,400)
    GUICtrlSetImage(6,"black/endbutton.jpg") ;Exitbut

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

    EndSelect
    Wend

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

    ;:::Maus-in-bereich-Funktion:::
    Func _Mouse_bereich_($X, $X2, $Y, $Y2)
    local $Mousepos = MouseGetPos()
    return ($Mousepos[0] > $X And $Mousepos[0] < $X2) and ($Mousepos[1] > $Y And $Mousepos[1] < $Y2)
    EndFunc

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

    ;:::Maus-aus-bereich-Funktion:::
    Func _Mouse_bereich_aus_($X, $X2, $Y, $Y2)
    local $Mousepos = MouseGetPos()
    return ($Mousepos[0] < $X or $Mousepos[0] > $X2) or ($Mousepos[1] < $Y or $Mousepos[1] > $Y2)
    EndFunc

    [/autoit]


    Who is Who

    Spoiler anzeigen

    Ein "Who is Who" damit man weis was welches "button" ist ;)
    [Blockierte Grafik: http://img836.imageshack.us/img836/9556/whoiswho.png]


    Was das Skript bisher machen soll:

    Spoiler anzeigen

    Was das Skript machen soll: Es so bisher nur immer ein bild wechsel wen die maus in einen bestimmte region kommt, z.b. in die region wo das "Playbutton" ist. Sobald die Maus die Region wieder verlässt, soll das bild wieder das sein welches es vor dem Wechsel war. Noch zwei Bild wie das gemeint ist.
    So sieht es Standartmäßig aus:
    [Blockierte Grafik: http://img836.imageshack.us/img836/7328/leistestandard.png]

    und so wen man mit der Maus über das Playbutton fährt:
    [Blockierte Grafik: http://img842.imageshack.us/img842/8332/leistepic1.png]


    Das Problem:

    Spoiler anzeigen

    Das Problem: Fahr ich mit der Maus raus aus der Region (also von "Playbutton" aus Rechts), Bleibt das "Playbutton" blau, obwohl ich eingtl. bereits raus aus dem Gebiet bin das für das Playbutton zugeordnet wurde. Fahr ich vom "Playbutton" aus in irgendeine andere Richtung (außer rechts) , funktioniert es wie es sollte, also das "Playbutton" wird wieder grau. Fahr ich aber mit der Maus weiter rechts über das Gebiet des "Pausebuttons" und lande dan im Gebiet des "Openbutton", wird das "Playbutton" aufeinmal wieder Grau. Selbe passiert mit den "Openbutton" wen ich links vom "Openbutton" aus, wieder über das "Stopbutton" , in das Gebiet des "Playbuttons" fahre. Das "Openbutton" wird grau. Fahr ich aber mit der Maus in irgendeine andere Richtung (also hoch,runter,rechts) passiert nix, also das "Openbutton" bleibt blau. Selbes gilt für das "Stopbutton" und das "Exitbutton". Ich hab aber die Größe der Regionen ausgerechnet, und die passen zu den Größen der Bilder, also ist es unwahrscheinlich das meine Region zu groß sind und deswegen das Skript so reagiert !
    Ein Bild zur Veranschaulichung:
    [Blockierte Grafik: http://img806.imageshack.us/img806/5507/failleiste.png]
    eigtl. sollte jetzt das "Stopbutton" wieder grau werde, tut es aber nicht :thumbdown: .

    Genug der Worte, probierst am besten selber aus, dann wird schnell verständlich wo das Problem liegt. Skript samt Bilder gibts im Anhang. :D

    e: Hab vorhin die Funktion

    [autoit]

    GUIGetCursorInfo

    [/autoit]


    gefunden. Damit sollte es wohl besser klappen als für jedes Bild eine extra Region zu machen. Wär aber trotzdem nett wen man mir mit den Problem oben helfen könnte, schließlich bin ich ja hie rum zu lernen :rolleyes:

    Danke an alle die sich das hier zumindest mal durchlesen xD

  • Hallo BOSSnier,

    das Problem entsteht durch deinen Einsatz von Select Case:

    Zitat von Hilfe zu Select Case

    Case <expression>Wenn der Ausdruck wahr ist, werden die Befehle bis zum nächsten Case oder EndSelect ausgeführt. Wenn mehr als ein Case-Ausdruck wahr ergibt, wird nur der erste ausgeführt.

    wenn du es so machst klappt es:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>

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

    AutoItSetOption("MouseCoordMode", 0)

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

    GUICreate("Background", 807, 400, -1, -1, $WS_POPUP)
    $playbut = GUICtrlCreatePic("black/playbutton.jpg", 0, 356, 50, 44)
    $stopbut = GUICtrlCreatePic("black/stopbutton.jpg", 50, 356, 50, 44)
    $autobut = GUICtrlCreatePic("black/openbutton.jpg", 100, 356, 50, 44)
    $endbut = GUICtrlCreatePic("black/endbutton.jpg", 757, 356, 50, 44)
    GUICtrlCreatePic("black/langerbalken.jpg", 150, 356, 607, 44)

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

    GUISetState(@SW_SHOW)

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

    While 1

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

    $Mousepos = MouseGetPos()
    $check = GUIGetMsg()

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

    Select

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

    Case $check = $endbut
    ExitLoop

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

    ;:::inside-bereich:::
    Case _Mouse_bereich_(0, 50, 356, 400)
    GUICtrlSetImage(3, "blue/playbuttonblau.jpg") ;playbut
    GUICtrlSetImage(4, "black/stopbutton.jpg") ;stopbut
    GUICtrlSetImage(5, "black/openbutton.jpg") ;Autoresümeebut
    GUICtrlSetImage(6, "black/endbutton.jpg") ;Exitbut

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

    Case _Mouse_bereich_(50, 100, 356, 400)
    GUICtrlSetImage(4, "blue/stopbuttonblau.jpg") ;stopbut
    GUICtrlSetImage(3, "black/playbutton.jpg") ;playbut
    GUICtrlSetImage(5, "black/openbutton.jpg") ;Autoresümeebut
    GUICtrlSetImage(6, "black/endbutton.jpg") ;Exitbut

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

    Case _Mouse_bereich_(100, 150, 356, 400)
    GUICtrlSetImage(5, "blue/openbuttonblau.jpg") ;Autoresümeebut
    GUICtrlSetImage(3, "black/playbutton.jpg") ;playbut
    GUICtrlSetImage(4, "black/stopbutton.jpg") ;stopbut
    GUICtrlSetImage(6, "black/endbutton.jpg") ;Exitbut

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

    Case _Mouse_bereich_(757, 807, 356, 400)
    GUICtrlSetImage(6, "blue/endbuttonblau.jpg") ;Exitbut
    GUICtrlSetImage(3, "black/playbutton.jpg") ;playbut
    GUICtrlSetImage(4, "black/stopbutton.jpg") ;stopbut
    GUICtrlSetImage(5, "black/openbutton.jpg") ;Autoresümeebut
    EndSelect
    WEnd

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

    ;:::Maus-in-bereich-Funktion:::
    Func _Mouse_bereich_($X, $X2, $Y, $Y2)
    Local $Mousepos = MouseGetPos()
    return ($Mousepos[0] > $X And $Mousepos[0] < $X2) and ($Mousepos[1] > $Y And $Mousepos[1] < $Y2)
    EndFunc ;==>_Mouse_bereich_

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

    ;:::Maus-aus-bereich-Funktion:::
    Func _Mouse_bereich_aus_($X, $X2, $Y, $Y2)
    Local $Mousepos = MouseGetPos()
    Return $Mousepos[0] < $X Or $Mousepos[0] > $X2 Or $Mousepos[1] < $Y Or $Mousepos[1] > $Y2
    EndFunc ;==>_Mouse_bereich_aus_

    [/autoit]

    es gibt aber im Forum elegantere Lösungen (Stichwort Hover für SuFu benutzen),

    mfg autoBert

  • Viele dank für die Antwort autoBert, funktionier jetzt :D
    Habs noch um ein case für die outside-funktion erweitert damit es auch funktioniert wen man außerhalb der Leiste ist ;-).

    [autoit]

    Case _Mouse_bereich_aus_(0, 807, 356, 400)
    GUICtrlSetImage(5, "black/openbutton.jpg");openbut
    GUICtrlSetImage(3, "black/playbutton.jpg") ;playbut
    GUICtrlSetImage(4, "black/stopbutton.jpg") ;stopbut
    GUICtrlSetImage(6, "black/endbutton.jpg");endbut

    [/autoit]


    Schau mir mal an was die SuFu unter "Hover" ausspuckt.