- Offizieller Beitrag
Hi,
folgendes Problem:
Auf einer Main-Gui blende ich ein Child ein. Jedoch sind dann die Events (MausUp/Down) nicht mehr verfügbar.
Der Button hat mehrere, zeitgesteuerte Funktionen. Beschreibung auf GUI unter dem Button.
Hat jemand vielleicht eine Idee, wie ich das Problem lösen kann?
Hier der Code, beschränkt auf die Problemsituation:
Spoiler anzeigen
#include <GuiConstants.au3>
[/autoit] [autoit][/autoit] [autoit]Opt('GUIOnEventMode', 1)
Opt('MustDeclareVars', 1)
Global $Gui0, $btStartStop, $lbSnooze, $aChild[2] = [1]
Global $TimerStart, $iTime, $EngineRun = 0, $iSnooze = 0
_Create_Gui_0()
_CreateChild($aChild[1])
GUISetState(@SW_SHOW, $Gui0)
;~ GUISetState(@SW_SHOWNOACTIVATE, $aChild[1]) ; <=== Sowie das Child angezeigt wird, werden die Events ($GUI_EVENT_PRIMARYDOWN & $GUI_EVENT_PRIMARYUP) nicht mehr erkannt
While 1
Sleep(50)
WEnd
Func _Create_Gui_0()
$Gui0 = GUICreate('Engine OFF', 400, 450)
$lbSnooze = GUICtrlCreateLabel('SNOOZE', 280, 150)
GUICtrlSetState(-1, $GUI_HIDE)
$btStartStop = GUICtrlCreateButton('0 / I', 90, 280, 210, 25)
GUICtrlCreateLabel('Button 1,5 sec gedrückt halten für Start / Stopp.' & @LF & 'Wenn gestartet mit kurzem Druck "SNOOZE" de/aktivieren.', 50, 310)
[/autoit] [autoit][/autoit] [autoit]; == Events
GUISetOnEvent(-3, '_close_Gui0', $Gui0)
GUISetOnEvent($GUI_EVENT_PRIMARYDOWN, '_MDown', $Gui0)
GUISetOnEvent($GUI_EVENT_PRIMARYUP, '_MUp', $Gui0)
EndFunc ;==>_Create_Gui_0
Func _CreateChild(ByRef $_hWnd)
$_hWnd = GUICreate('', 254, 130, 70, 60, 0x80000000, 0x00000040, $Gui0) ; WS_POPUP = 0x80000000, WS_EX_MDICHILD = 0x00000040
GUISetBkColor(0x06A533, $_hWnd)
EndFunc ;==>_CreateChild
Func _MDown()
Local $aInfo = GUIGetCursorInfo()
If Not IsArray($aInfo) Then Return
If $aInfo[4] = $btStartStop Then
$TimerStart = TimerInit()
AdlibRegister('_StartEngine')
EndIf
EndFunc ;==>_MDown
Func _MUp()
Local $aInfo = GUIGetCursorInfo()
If Not IsArray($aInfo) Then Return
Local $iState = $GUI_SHOW
If $aInfo[4] = $btStartStop Then
If $iTime <= 400 And $EngineRun = 1 Then
If $iSnooze = 0 Then
$iSnooze = 1
Else
$iState = $GUI_HIDE
$iSnooze = 0
EndIf
GUICtrlSetState($lbSnooze, $iState)
AdlibUnRegister('_StartEngine')
ElseIf $iTime <= 1500 And $EngineRun = 0 Then
AdlibUnRegister('_StartEngine')
EndIf
EndIf
EndFunc ;==>_MUp
Func _StartEngine()
$iTime = TimerDiff($TimerStart)
Local $iState = $GUI_SHOW, $aTitle[2] = ['Engine OFF','Engine ON']
If $iTime >= 1500 And $iSnooze = 0 Then
$EngineRun = Not $EngineRun
Beep(1700)
AdlibUnRegister('_StartEngine')
WinSetTitle($Gui0, '', $aTitle[$EngineRun])
EndIf
EndFunc ;==>_StartEngine
Func _close_Gui0()
Exit
EndFunc