I don't know if I qualify to give you a "professional opinion" since I'm not a professional game developer but here's what I think:

If GameLoop() is an event handle for Application.OnIdle then don't use it. I know a lot of people use it but it's not a good idea. It might work fine in exclusive mode apps but in windowed mode apps there's too much going on to be able to truly predict how OnIdle is going to react. I remember releasing a game once that used App.OnIdle and it worked fine on all computers that I tested it on. Shortly after the release, I had received dozens of emails saying that the game freezes on start-up. I tested it on a few more computers and found one where I could reconstruct the bug. After I had replaced OnIdle with a real Timer it worked fine on all computers.

I suggest that you use a thread-driven timer and I believe DXTimer is thread-driven.

As for the focus-loss problem: You should handle the events Application.OnMinimize, Application.OnMaximize, Application.OnRestore, Application.OnActivate and Application.OnDeactivate (you will only need two event handlers). In Minimize/Deactivate, pause your timer, in Maximize/Restore/Activate re-start your timer. That should do the trick.