Hallo liebe AutoIt Comunity,
wer schonmal mit Microsofts Visual Express SDK gearbeitet hat der weist das man dort ganz bequem für jedes erdenkliche GUI Event ein Event erstellen kann. (kliengt komisch ist aber so ) Daher habe ich nun mal mit den MouseEvents Angefangen und versucht sie in einer UDF nutzbar zu machen. Das ganze habe ich dann über einen EventHandler gelöst das Prinziep funktioniert ähnlich dem GUI Prinziep das mit GuiGetMsg die GUIMsg empfängt und je nach nachricht eine Aktion ausführt nur bekommt der EventHandler hier keine GUINachrichten sondern er bekommt mit wenn ein MouseEvent statt findet. Da es meine erste UDF ist biete ich um nachsicht was die Documentation angeht.
Wenns euch gefällt oder nicht bin ich offen für Verbesserungsvorschläge,Lob und Konstruktive Kretik.
Ausserdem werde ich versuchen sobald wie möglich Updates mit neuen Events rauszubringen.
MfG Sortoc
Die UDF
Spoiler anzeigen
#region #CURRENT#
; _Register_MouseEvent
; _MouseEvent
; _UnRegister_MouseEvent
#endregion #CURRENT#
#region Global Variables
Global $aMouseEvent[6]
#endregion Global Variables
; #FUNCTION# ====================================================================================================================
; Name...........: _Register_MouseEvent
; Description ...: "Startet" MouseEvent
; Parameters ....: $hControl Handle zu dem Control
; $hGUI Handle zu dem GUI
; $sEventHandler Der Funktionsname des EventHandlers
; Author ........: Sortoc
; ===============================================================================================================================
Func _Register_MouseEvent($hGUI, $hControl, $sEventHandler)
$aMouseEvent[0] = $hGUI
$aMouseEvent[1] = $hControl
$aMouseEvent[2] = $sEventHandler
EndFunc ;==>_Register_MouseEvent
; #FUNCTION# ====================================================================================================================
; Name...........: _MouseEvent
; Description ...: Fires the Events for the EventHandler
; Author ........: Sortoc
; ===============================================================================================================================
Func _MouseEvent()
If $aMouseEvent[0] = False Then Return 0
Local $result = _MouseInfo($aMouseEvent[0], $aMouseEvent[1])
_MouseEnter($result[4])
_MouseLeave($result[4])
_MouseDown($result)
EndFunc ;==>_MouseEvent
; #FUNCTION# ====================================================================================================================
; Name...........: _UnRegister_MouseEvent
; Description ...: Fährt MouseEvent herunter
; Author ........: Sortoc
; ===============================================================================================================================
Func _UnRegister_MouseEvent()
$aMouseEvent[0] = False
EndFunc ;==>_UnRegister_MouseEvent
; #FUNCTION# ====================================================================================================================
; Name...........: Internal Functions
; Author ........: Sortoc
; ===============================================================================================================================
Func _MouseInfo($hGUI, $hControl)
Local $aGUIMouseInfo = GUIGetCursorInfo($hGUI)
If IsArray($aGUIMouseInfo) Then Return $aGUIMouseInfo
EndFunc ;==>_MouseInfo
Func _MouseDown($result)
If $aMouseEvent[4] = False Then
If $result[2] = 1 Then
Call($aMouseEvent[2], "MouseLeftDown")
$aMouseEvent[4] = True
EndIf
Else
Call($aMouseEvent[2], "MouseLeftUp")
$aMouseEvent[4] = False
EndIf
If $aMouseEvent[5] = False Then
If $result[3] = 1 Then
Call($aMouseEvent[2], "MouseRightDown")
$aMouseEvent[5] = True
EndIf
Else
Call($aMouseEvent[2], "MouseRightUp")
$aMouseEvent[5] = False
EndIf
EndFunc ;==>_MouseDown
Func _MouseLeave($result)
If $aMouseEvent[3] = True Then
If $result <> $aMouseEvent[1] Then
Call($aMouseEvent[2], "MouseLeave")
$aMouseEvent[3] = False
EndIf
EndIf
EndFunc ;==>_MouseLeave
Func _MouseEnter($result)
If $aMouseEvent[3] = False Then
If $result = $aMouseEvent[1] Then
Call($aMouseEvent[2], "MouseEnter")
$aMouseEvent[3] = True
EndIf
EndIf
EndFunc ;==>_MouseEnter
Ein Beispiel
Spoiler anzeigen
#include <MouseEvent.au3>
[/autoit] [autoit][/autoit] [autoit]$hGUI = GUICreate("Test", 200, 200)
$btn_Test = GUICtrlCreateButton("Test", 10, 10, 180, 180)
GUICtrlSetCursor($btn_Test, 0)
GUISetState()
_Register_MouseEvent($hGUI, $btn_Test, "EventHandler") ;"Startet" MouseEvent
[/autoit] [autoit][/autoit] [autoit]While Sleep(50)
_MouseEvent()
GUIEventHandler(GUIGetMsg()) ;Das EventHandler prinziep funktioniert natürlich auch mit GUIGetMsg allerdings sollte man für die GUI einen
;eigene EventHandler nehmen da dieser jeden schleifen Durchgang Aufgerufen wird und deshalb den MouseEventHandler stören kann
WEnd
Func EventHandler($Event) ;Definiert den EventHandler
Switch $Event
Case "MouseLeave"
GUICtrlSetFont($btn_Test, 8.5)
Case "MouseEnter"
GUICtrlSetFont($btn_Test, 45, Default,
Case "MouseLeftDown" ; Linke Maustaste gedrückt gehalten
Case "MouseLeftUp" ; Linke Maustaste losgelassen
Case "MouseRightDown" ; Rechte Maustaste gedrückt gehalten
Case "MouseRightUp" ; Rechte Maustaste losgelassen
Case -11 ; Maus bewegt sich
ToolTip("MouseMove")
EndSwitch
EndFunc ;==>EventHandler
Func GUIEventHandler($GUIEvent)
If $GUIEvent = -11 Then Return EventHandler(-11)
Switch $GUIEvent
Case -3
Exit
Case $btn_Test
MsgBox(0, "", "Button geklickt")
EndSwitch
EndFunc ;==>GUIEventHandler