Hover

  • Guten Morgen zusammen,

    der Befehl Hover macht mir wirklich das Leben schwer!

    [autoit]


    Local $hGUI, $Kat1, $Kat2, $Kat3, $Kat4 ,$nMsg, $fLableHovered
    $hGUI = GUICreate("")
    $Kat1 = GUICtrlCreateLabel("Text1",20,20,50,20)
    $Kat2 = GUICtrlCreateLabel("Text2",30,40,50,20)
    $Kat3 = GUICtrlCreateLabel("Text3",40,60,50,20)
    $Kat4 = GUICtrlCreateLabel("Text4",50,80,50,20)
    ;GUICtrlSetCursor($Kat1,0)

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

    GUISetState()

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case 0 ; kein GUI_Event
    $aCursor = GUIGetCursorInfo($hGUI)
    If Not IsArray($aCursor) Then ContinueLoop

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

    _HoverKat() ; hoverfunktion für Text

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

    Case -3
    Exit
    EndSwitch
    Wend

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

    Func _HoverKat()

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

    ;Kat1--------------------->
    If $aCursor[4] = $Kat1 Then ; Maus über Label
    If Not $fLableHovered Then
    GUICtrlSetColor($Kat1,0x0000FF)
    $fLableHovered = True
    EndIf
    Else ; Maus nicht über Label
    If $fLableHovered Then
    GUICtrlSetColor($Kat1,0x000000)
    $fLableHovered = False
    EndIf
    EndIf
    ;----------
    ;Kat2--------------------->
    If $aCursor[4] = $Kat2 Then ; Maus über Label
    If Not $fLableHovered Then
    GUICtrlSetColor($Kat2,0x0000FF)
    $fLableHovered = True
    EndIf
    Else ; Maus nicht über Label
    If $fLableHovered Then
    GUICtrlSetColor($Kat2,0x000000)
    $fLableHovered = False
    EndIf
    EndIf
    ;---------
    ;Kat3-------------------->
    If $aCursor[4] = $Kat3 Then ; Maus über Label
    If Not $fLableHovered Then
    GUICtrlSetColor($Kat3,0x0000FF)
    $fLableHovered = True
    EndIf
    Else ; Maus nicht über Label
    If $fLableHovered Then
    GUICtrlSetColor($Kat3,0x000000)
    $fLableHovered = False
    EndIf
    EndIf
    ;--------------------->
    ;Kat4--------------------->
    If $aCursor[4] = $Kat4 Then ; Maus über Label
    If Not $fLableHovered Then
    GUICtrlSetColor($Kat4,0x0000FF)
    $fLableHovered = True
    EndIf
    Else ; Maus nicht über Label
    If $fLableHovered Then
    GUICtrlSetColor($Kat4,0x000000)
    $fLableHovered = False
    EndIf
    EndIf
    ;Kat1--------------------->

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

    endfunc

    [/autoit]

    Kann mir jemand sagen, warum das nicht vernünftig klappt!

    Liebe Grüße
    Ilse ;)

    Einmal editiert, zuletzt von Ilse (1. Dezember 2010 um 12:34)

  • Is jetz nur n Beispiel wie ich das ganze auf die schnelle machen würde. Es geht mit Sicherheit noch einiges schöner^^

    Punkte die mir sofort bei deinem Script auffallen:
    1. Performance ist nicht allzugut, weil du ständig die Maus abfrägst und mit allen 4 Controls vergleichst
    2. Die Logik, du überprüfst immer alle 4. Die maus kann sich aber nur auf einem oder garkeinen Contol befinden
    3. Das löschen des Hoverstils ist sehr fehlerhaft

    Maßnahmen:
    1. Adlibregister damit nur alle 50 ms geprüft wird (denke 20 Änderungen pro sekunde sind mehr als genug)
    2. Switch statt den einzelnen If's
    3. Löschen des Stils vom letzten hovercontrol, wenn dieses existiert

    Spoiler anzeigen
    [autoit]

    Local $hGUI, $Kat1, $Kat2, $Kat3, $Kat4 ,$nMsg, $fLableHovered
    $hGUI = GUICreate("")
    $Kat1 = GUICtrlCreateLabel("Text1",20,20,50,20)
    $Kat2 = GUICtrlCreateLabel("Text2",30,40,50,20)
    $Kat3 = GUICtrlCreateLabel("Text3",40,60,50,20)
    $Kat4 = GUICtrlCreateLabel("Text4",50,80,50,20)
    ;GUICtrlSetCursor($Kat1,0)

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

    GUISetState()

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

    AdlibRegister("_HoverKat", 50)

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case -3
    Exit
    EndSwitch
    Wend

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

    Func _HoverKat()
    ; Nur wenn ein Control den Hoverstil hat dann ändere die Farbe auf normal
    If $fLableHovered Then GUICtrlSetColor($fLableHovered,0x000000)
    $aCursor = GUIGetCursorInfo($hGUI)
    If Not IsArray($aCursor) Then Return
    Switch $aCursor[4]
    Case $Kat1
    GUICtrlSetColor($Kat1,0x0000FF)
    Case $Kat2
    GUICtrlSetColor($Kat2,0x0000FF)
    Case $Kat3
    GUICtrlSetColor($Kat3,0x0000FF)
    Case $Kat4
    GUICtrlSetColor($Kat4,0x0000FF)
    EndSwitch
    $fLableHovered = $aCursor[4]
    endfunc

    [/autoit]
  • man kann es auch ohne Switch machen

    Spoiler anzeigen
    [autoit]

    Func _HoverKat()
    ; Nur wenn ein Control den Hoverstil hat dann ändere die Farbe auf normal
    If $fLableHovered Then GUICtrlSetColor($fLableHovered,0x000000)
    $aCursor = GUIGetCursorInfo($hGUI)
    If Not IsArray($aCursor) Then Return
    GUICtrlSetColor($aCursor[4],0x0000FF)
    $fLableHovered = $aCursor[4]
    endfunc

    [/autoit]
  • Kijan: Jup, aber ich hab das absichtlich offen gehalten um für einzelne Controls z.B. verschiedene Farben definieren zu können oÄ
    Ansonsten haste natürlich vollkommen recht ;)