Hi!
Wenn du es so machst, wie autoiter es empfiehlt (ich würde allerdings ein Local Static Flag verwenden), wirst du feststellen, daß der Aufruf von _GDIPlus_GraphicsFillRect im else Zweig einen Fehler wirft.
Da ich aber im Moment weder Zeit, noch Lust habe, den Fehler zu ergründen und außerdem kein großer Fan von GDI bin, hier ein Vorschlag zur Umsetzung des Hover Buttons mit Labels:
Spoiler anzeigen
AutoIt
#include <StaticConstants.au3>
#include <GUIConstantsEx.au3>
Global $hGui = GUICreate("Hover Label", 400, 70)
Global $idLabelBackground = GUICtrlCreateLabel("", 17, 17, 366, 36)
GUICtrlSetState(-1, $GUI_DISABLE)
GUICtrlSetBkColor(-1, 0xF0F0F0)
Global $idLabelFrame = GUICtrlCreateLabel("", 19, 19, 362, 32, $SS_BLACKFRAME)
GUICtrlSetState(-1, $GUI_DISABLE)
Global $idLabelHover = GUICtrlCreateLabel("Please hover brother!", 20, 20, 360, 30, BitOR($SS_CENTER, $SS_CENTERIMAGE))
GUICtrlSetBkColor(-1, 0xFF0000)
GUICtrlSetFont(-1, 12, 400)
GUISetState()
Global $bHoverFlag = 0
Do
$idMsg = GUIGetMsg()
Switch $idMsg
Case $idLabelHover
MsgBox(0, "", "Successfully hovered!")
EndSwitch
$aMousePos = GUIGetCursorInfo($hGui)
Switch IsArray($aMousePos)
Case True
Select
Case $aMousePos[4] = $idLabelHover And $bHoverFlag = 0
GUICtrlSetBkColor($idLabelHover, 0x00FF00)
GUICtrlSetBkColor($idLabelBackground, 0x000000)
GUICtrlSetData($idLabelHover, "Click me now!")
GUICtrlSetFont($idLabelHover, 16, 800)
$bHoverFlag = 1
Case $aMousePos[4] <> $idLabelHover And $bHoverFlag = 1
GUICtrlSetBkColor($idLabelHover, 0xFF0000)
GUICtrlSetBkColor($idLabelBackground, 0xF0F0F0)
GUICtrlSetData($idLabelHover, "Please hover brother!")
GUICtrlSetFont($idLabelHover, 12, 400)
$bHoverFlag = 0
EndSelect
EndSwitch
Until $idMsg = $GUI_EVENT_CLOSE
Alles anzeigen
Ist ganz flott in 10 Minuten runtergeschrieben und läßt sich vermutlich eleganter lösen, aber es sollte gut verständlich sein und zeigen, wie einfach man es sich machen kann...ganz ohne GDI
Erweiterte Animationen, wie bei "OnClick" sind mit Labels auch kein Problem...
Beste Grüße, Friesel