control hover effekt ohne fehler

  • ich nochmal.. ist etwas älter aber gut.

    hab bisschen rumexperimentiert und die perfekte methode gefunden wie man gut hovereffekte macht die keinen fehler erzeugen wenn man schnell über mehrere controls "hovert" :)

    [autoit]

    ; GUI

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

    $GUI = GuiCreate("Hover the controls!", 480, 220)

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

    $Button = GuiCtrlCreateButton("Button", 30, 60, 100, 30)
    $Label = GuiCtrlCreateLabel("Label", 90, 20, 80, 20)
    GUICtrlSetCursor(-1, 0)
    GUICtrlSetFont(-1, 14, -1, 0, "Arial")
    $Edit = GuiCtrlCreateEdit("I like yellow...", 220, 30, 160, 80)
    $Icon = GuiCtrlCreateIcon("shell32.dll", 7, 120, 110, 32, 32)

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

    GuiSetState()

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

    ; Hover Functions

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

    Func Hover($ID)
    Switch $ID
    Case $Button
    GUICtrlSetData($ID, "Don't press!")
    Case $Label
    GUICtrlSetFont($ID, 14, 800, 0, "Arial")
    Case $Edit
    GUICtrlSetBkColor($ID, 0xFFFF00)
    Case $Icon
    GUICtrlSetImage($ID, "shell32.dll", 10)
    Beep(500, 50) ; for demonstration
    EndSwitch
    EndFunc

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

    Func Normal($ID)
    Switch $ID
    Case $Button
    GUICtrlSetData($ID, "Button")
    Case $Label
    GUICtrlSetFont($ID, 14, -1, 0, "Arial")
    Case $Edit
    GUICtrlSetBkColor($ID, -1)
    Case $Icon
    GUICtrlSetImage($ID, "shell32.dll", 7)
    EndSwitch
    EndFunc

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

    ; Main While

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

    $Hover_Old = ""

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

    While 1

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

    If GUIGetMsg() = -3 Then Exit

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

    $Cursor = GUIGetCursorInfo($GUI) ; it's important that the gui variable is setted in this function!
    If $Cursor[4] <> $Hover_Old Then
    Normal($Hover_Old) ; reset the previous control
    Hover($Cursor[4]) ; set the new control hovered
    $Hover_Old = $Cursor[4]
    EndIf

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

    WEnd

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

    ;
    ;
    ;

    [/autoit]


    mfg

  • meinst du die, mit den callbacks usw? wenn ja dann die callbacks... es geht wie man sieht auch mit sehr einfachem code perfekt :)

  • Jo, Man könnte das Callback auch einfach rausschmeißen und dafür in dem Loop die Funktion aufrufen :) Der Code ist dann aber imm er noch nicht soo einfach :P
    Mal schauen, wenn ichs mal brauch... Welche ich dann nehm :)

  • wenn ich mich richtig erinner, hat die hover udf nicht ganz sauber und fehlerfrei gearbeitet.. und war deswegen auch nicht so ganz performant.
    das alles erfüllt mein code und deswegen hab ich den halt gepostet :P

  • Uralter Thread, aber bis heute der einzige, den ich gefunden habe, der einen einfachen Code für Hover-Effekte zeigt und wirklich funktioniert. Bei anderen z.B. bleiben Controls beim schnellen Überfahren mit der Maus im Hover-Zustand stecken. Der Code von Health funktioniert tadellos. Danke Health! :thumbup:

    Im Thread "Hover effect easy PB" habe ich den Code ein wenig "handlicher" gestaltet und in ein paar Demos Beispiele dazu erstellt. Viel Spaß damit! :rock:

    Edit: --------------------------------------------------------

    Da es eine heftige Diskusion darüber gab, wo der Code für den Hover-Effekt aufgerufen werden soll, hier eine neutrale Version des Codes für den Hover-Effekt.

    • Jedem ist selbst überlassen, wo der Aufruf erfolgt, z.B. in der Hauptschleife, einer CallBack-Prozedur, einer Timer-Prozedur, usw.
    • Die Erstellung der Controls ist jedem selbst überlassen. Für das Beispiel werden 3 Labels benötigt.
    • Der Hover-Effekt hier, bei dem die Hintergrundfarbe verschiedener Controls geändert wird, ist lediglich als Beispiel gedacht! Jeder kann selbst bestimmen, was er als Hover-Effekt haben möchte, z. B. den Text des Controls ändern oder die Schrift fett zeigen oder einen Klang abspielen oder was auch immer.
    • Ebenso ist die Prüfung der Controls, für die der Hover-Effekt gezeigt werden soll, hier nur als Beispiel zu verstehen! Auch die kann jeder in seinem Code selbst bestimmen.

    Wenn jemand sagt: "Das geht nicht!" Denke daran: Das sind seine Grenzen, nicht deine.

    5 Mal editiert, zuletzt von Professor Bernd (31. August 2020 um 19:02)