I found this question on Experts-Exchange.
Control’s OnExit eats up mouseup event for new control when showing
another windowThe problem can be replicated easily.
place 3 tedits on a form. write a showmessage(‘exit’) in edit1’s
onexit event run the program give edit1 focus use the mouse to give
edit3 focus, click ok to the showmessage observe how you can’t write
anything in edit3 now, until you click with the mouse somewhere on the
form ! give edit2 focus, then use to the mouse to give edit3 focus
observe how you can type what you want in edit3 now !So far I’ve established that the problem lies in the fact that edit3
doesn’t receive a mouseup-message when the old controls onExit event
displays a window of any kind, i’ve tried it as well with showing a
form of my own in the onExit event, same result. In fact, windows is
under the impression that the mouse is held down over edit3 after
you’ve clicked Ok to the showmessageI guess it’s a bug in Delphi/Windows but how to work around it ? I
know i can force a WM_LBUTTONUP on edit3’s onMouseDown event (since
its the last event called in the process) but that’s more than
tedious, and not always applicable
I am trying to do something similiar:
In the onexit event I show a warningbox and then want to proceed
as normal – moving the focus to where the user in fact clicked.
Is that possible?
Once again
PostMessageto the rescue! Defer your dialog just a little bit longer so that Windows can finish its focus change. Post yourself a message instead of showing the dialog directly:And everything is fine 🙂