The SHOW method is a direct call to the code that would otherwise get called if and when it receives a WM_SHOWWINDOW or in Lazarus hood, LM_SHOWWINDOW
That is true for windows, on Linux however, I think they emulate the same process via a message que, for example a WM_ACTIVATE. That message is first sent to the window that is losing its attention and also has in the message the new window getting the attention and then it gets sent to the window being activated.
But these messages are on a posted que when done that way
If you were to use the ShowWindow API it would post these messages which would mean most likely your order would end differently
1,5, then 2,,3,4 because the messages aren't handled until you exit your code and have it return back to the message pump.