Problem mit WinSetTrans

  • Hallo,

    ich habe einen Script, das nur normal ist, wenn der Mauszeiger über dieses Fenster ist. Ansonsten ist es Transparent. Wie kann man es nun so machen, das es mitten in der ForSchleife abbricht, wenn der Mauszeiger nicht über der GUI ist. Hier mal ein Beispielscript:

    Spoiler anzeigen
    [autoit]

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

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

    Global $status

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

    $x = 234
    $y = 150

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

    $Form1 = GUICreate("Form1", $x, $y)
    WinSetTrans($Form1, "", 100)
    GUISetState(@SW_SHOW)

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit

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

    EndSwitch
    _overtrans()
    WEnd

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

    Func _overtrans()
    $Curser = GUIGetCursorInfo($Form1)
    If IsArray($Curser) Then
    If $Curser[0] + 7 > 0 And $Curser[0] - 0 < $x And $Curser[1] + 0 > 0 And $Curser[1] - 0 < $y Then
    If $status = False Then
    $status = True
    $TransSpeed = 5
    For $i = 100 To 255 Step $TransSpeed
    Sleep(2)
    WinSetTrans($Form1, "", $i)
    Next
    EndIf
    Else
    If $status = True Then
    $status = False
    $TransSpeed = 5
    For $i = 255 To 100 Step -$TransSpeed
    Sleep(2)
    WinSetTrans($Form1, "", $i)
    Next
    EndIf
    EndIf
    EndIf
    EndFunc ;==>_overtrans

    [/autoit]
  • Spoiler anzeigen
    [autoit]

    $Curser = GUIGetCursorInfo($Form1)
    If $Curser[0] + 7 < 0 Or $Curser[0] - 0 > $x Or $Curser[1] + 0 < 0 Or $Curser[1] - 0 > $y Then ExitLoop

    [/autoit]
  • Joa habs jetzt so:

    Spoiler anzeigen
    [autoit]

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

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

    Global $status
    Global $TransZahl

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

    $TransSpeed = 3
    $x = 234
    $y = 150

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

    $Form1 = GUICreate("Form1", $x, $y)
    WinSetTrans($Form1, "", 100)
    GUISetState(@SW_SHOW)

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit

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

    EndSwitch
    _overtrans()
    WEnd

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

    Func _overtrans()
    $Curser = GUIGetCursorInfo($Form1)
    If IsArray($Curser) Then
    If $Curser[0] + 7 > 0 And $Curser[0] - 0 < $x And $Curser[1] + 0 > 0 And $Curser[1] - 0 < $y Then
    If $status = False Then
    $status = True
    For $i = 100 To 255 Step $TransSpeed
    $Curser = GUIGetCursorInfo($Form1)
    If $Curser[0] + 7 < 0 Or $Curser[0] - 0 > $x Or $Curser[1] + 0 < 0 Or $Curser[1] - 0 > $y Then
    ExitLoop
    EndIf
    Sleep(2)
    WinSetTrans($Form1, "", $i)
    Next
    $TransZahl = $i
    EndIf
    Else
    If $status = True Then
    $status = False
    For $i = $TransZahl To 100 Step -$TransSpeed
    Sleep(2)
    WinSetTrans($Form1, "", $i)
    Next
    EndIf
    EndIf
    EndIf
    EndFunc ;==>_overtrans

    [/autoit]

    Aber das flackert manchmal. Ist das bei euch auch so?

    • Offizieller Beitrag

    So flackert´s nicht :

    Spoiler anzeigen
    [autoit]

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

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

    Global $status
    Global $TransZahl

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

    $TransSpeed = 3
    $x = 234
    $y = 150

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

    $Form1 = GUICreate("Form1", $x, $y)
    WinSetTrans($Form1, "", 100)
    GUISetState(@SW_SHOW)

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit

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

    EndSwitch
    _overtrans()
    WEnd

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

    Func _overtrans()
    $Curser = GUIGetCursorInfo($Form1)
    If IsArray($Curser) Then
    If $Curser[0] + 7 > 0 And $Curser[0] - 0 < $x And $Curser[1] + 0 > 0 And $Curser[1] - 0 < $y Then
    If $status = False Then
    $status = True
    For $i = 100 To 255 Step $TransSpeed
    $Curser = GUIGetCursorInfo($Form1)
    If $Curser[0] + 7 < 0 Or $Curser[0] - 0 > $x Or $Curser[1] + 0 < 0 Or $Curser[1] - 0 > $y Then
    ExitLoop
    EndIf
    Sleep(2)
    WinSetTrans($Form1, "", $i)
    $TransZahl = $i
    Next
    EndIf
    Else
    If $status = True Then
    $status = False
    For $i = $TransZahl To 100 Step -$TransSpeed
    Sleep(2)
    WinSetTrans($Form1, "", $i)
    Next
    EndIf
    EndIf
    EndIf
    EndFunc ;==>_overtrans

    [/autoit]

    $TransZahl = $i muß in der Schleife stehen und nicht ausserhalb.