- Offizieller Beitrag
Vermutlich existiert es schon in irgendeiner Form, ich hatte nur gerade nix gefunden, deshalb diese Variante von mir.
In Abhängigkeit ob die Maus (nicht) über dem Fenster ist, wird die Transparenz zwischen 2 Werten geswitcht. Standardmäßig zwischen 150 und 255 (undurchsichtig).
Falls ihr das Fenster beim Erstellen nicht auf Transparenz setzt, passiert das nach dem ersten Bewegen der Maus vom Fenster herunter automatisch.
Edit 21.05.2012:
Auf mehrfachen Wunsch einer einzelnen Dame habe ich noch einen optionalen Parameter für einen "smoothigen" Übergang der Transparenz eingebaut.
Einfach die Zeit in ms angeben und dann wird die Transparenz innerhalb dieser Zeitspanne schrittweise geändert. 500 ms ist eine recht "angenehme" Zeitspanne.
Spoiler anzeigen
#Region - TimeStamp
; 2012-05-21 19:02:36
#EndRegion - TimeStamp
#include <WinAPI.au3>
[/autoit] [autoit][/autoit] [autoit]$hGUI = GUICreate('TEST')
WinSetTrans($hGUI, '', 150)
GUISetState()
While True
_TransOffByMouseOver($hGUI, -1, -1, 500) ; == letzter Parameter ist Zeit in ms für den Übergang der Transparenz
Switch GUIGetMsg()
Case -3
Exit
EndSwitch
WEnd
;===============================================================================
; Function Name....: _TransOffByMouseOver
; Description......: Verändert Transparenz eines Fensters bei Maus über/nicht über Fenster
; Parameter(s).....: $_hGui Fensterhandle
; .................: $_iTrans Transparenz bei Maus nicht über Fenster (Standard 150)
; .................: $_iTransOff Transparenz bei Maus über Fenster (Standard 255, undurchsichtig)
; ........optional.: $_iTimeSmooth Zeit für den weichen Übergang der Transparenz in ms, Standard=0
; Requirement(s)...: #include <WinAPI.au3>
; Return Value(s)..: nichts
; Author(s)........: BugFix ( [email='bugfix@autoit.de'][/email] )
;===============================================================================
Func _TransOffByMouseOver($_hGui, $_iTrans=-1, $_iTransOff=-1, $_iTimeSmooth=0)
If $_iTrans = -1 Then $_iTrans = 150
If $_iTrans < 0 Then $_iTrans = 0
If $_iTransOff = -1 Then $_iTransOff = 255
If $_iTransOff > 255 Then $_iTransOff = 255
If $_iTimeSmooth < 0 Then $_iTimeSmooth = 0
Local $tGui = _WinAPI_GetWindowRect($_hGui)
Local $posMouse = MouseGetPos(), $iStep, $ret, $iCurr = $_iTrans, $timer
Local Static $fTrans = True
$ret = DllCall("user32", "long", "PtInRect", "ptr", DllStructGetPtr($tGui), "long", $posMouse[0], "long", $posMouse[1])
If $ret[0] Then
If $fTrans Then
$fTrans = False
If $_iTimeSmooth > 0 Then
$iStep = Ceiling(($_iTransOff-$_iTrans)/($_iTimeSmooth/10))
While $iCurr < $_iTransOff
$iCurr += $iStep
If $iCurr > $_iTransOff Then
WinSetTrans($_hGui, '', $_iTransOff)
ExitLoop
EndIf
WinSetTrans($_hGui, '', $iCurr)
$timer = TimerInit()
Do
Until TimerDiff($timer) >= 10
WEnd
Else
WinSetTrans($_hGui, '', $_iTransOff)
EndIf
EndIf
Else
If Not $fTrans Then
$fTrans = True
If $_iTimeSmooth > 0 Then
$iCurr = $_iTransOff
$iStep = Ceiling(($_iTransOff-$_iTrans)/($_iTimeSmooth/10))
While $iCurr > $_iTrans
$iCurr -= $iStep
If $iCurr < $_iTrans Then
WinSetTrans($_hGui, '', $_iTrans)
ExitLoop
EndIf
WinSetTrans($_hGui, '', $iCurr)
$timer = TimerInit()
Do
Until TimerDiff($timer) >= 10
WEnd
Else
WinSetTrans($_hGui, '', $_iTrans)
EndIf
EndIf
EndIf
EndFunc ;==>_TransOffByMouseOver