Notify & events

Started by wombats, April 15, 2025, 22:49:55

Previous topic - Next topic

wombats

Hi,

Using Notify/Proceed/RequestFile, etc. seems to mess with the events. After it opens, every time you click anywhere, it opens again and you can't even close the program without using Task Manager or the Stop button in the IDE. Does anyone know a way to fix this? It even happens if I open a WinAPI MessageBox from a DLL.

Code: BASIC
Graphics 640, 480

AddHook(EmitEventHook, EventHook)

Repeat

Cls
DrawRect(100, 100, 64, 64)
Flip

Until KeyHit(KEY_ESCAPE)

Function EventHook:Object(id:Int, data:Object, context:Object)
Local event:TEvent = TEvent(data)
Select event.id
Case EVENT_MOUSEWHEEL
Case EVENT_MOUSEDOWN
Select event.data
Case MOUSE_LEFT
Notify("Test")
EndSelect
Case EVENT_KEYUP
Case EVENT_KEYDOWN
EndSelect
Return data
EndFunction

Midimaster

works as expected on BlitzMax NG. When I start your app any click leads to the NOTIFY box. But when I press ESCAPE the app quits.

Clicking on the QUIT X is not possible because you defined that all LEFT mouse action goes to your NOTIFY branch.

 
Code: BASIC
Graphics 640, 480

AddHook(EmitEventHook, EventHook)

Repeat
	Cls
	DrawRect(100, 100, 64, 64)
	Flip
Until KeyHit(KEY_ESCAPE)


Function EventHook:Object(id:Int, data:Object, context:Object)
	Local event:TEvent = TEvent(data)
	Select event.id
		Case EVENT_MOUSEWHEEL
		Case EVENT_MOUSEDOWN
			Select event.data
				Case MOUSE_LEFT
				Notify("Test")
				Print "notify"
			EndSelect
		Case EVENT_KEYUP
		Case EVENT_KEYDOWN
	EndSelect
	Return data
EndFunction
...on the way to China.

wombats

Thanks for your reply. It's possible to exit via the close button if it's done before any Notify dialogs appear.

Code: BASIC
Graphics 640, 480

AddHook(EmitEventHook, EventHook)

Repeat
Cls
DrawRect(100, 100, 64, 64)
Flip
Until KeyHit(KEY_ESCAPE)


Function EventHook:Object(id:Int, data:Object, context:Object)
Local event:TEvent = TEvent(data)
Select event.id
Case EVENT_APPTERMINATE
End
Case EVENT_MOUSEWHEEL
Case EVENT_MOUSEDOWN
Select event.data
Case MOUSE_LEFT
Notify("Test")
Print "notify"
EndSelect
Case EVENT_KEYUP
Case EVENT_KEYDOWN
EndSelect
Return data
EndFunction

wombats

If anyone else runs into the same thing, the solution is to not use a modal blocking dialog inside the hook itself.
Code: BASIC
Graphics 640, 480

Global showDialog:Int

AddHook(EmitEventHook, EventHook)

Repeat
Cls
DrawRect(100, 100, 64, 64)
Flip
If showDialog
Notify "Test"
showDialog = False
EndIf
Until KeyHit(KEY_ESCAPE)

Function EventHook:Object(id:Int, data:Object, context:Object)
Local event:TEvent = TEvent(data)
Select event.id
Case EVENT_APPTERMINATE
End
Case EVENT_MOUSEDOWN
Select event.data
Case MOUSE_LEFT
showDialog = True
EndSelect
Case EVENT_KEYUP
Case EVENT_KEYDOWN
EndSelect
Return data
EndFunction