When is a Delphi form actually visible to the user on Android?


The game that I’m developing does some pre-processing when first loading and I want to show the user a “loading %” to make it clear that the game is not frozen.

I am trying to do this by waiting for the main form to show for the user and then displaying an updating progress bar while performing the pre-processing.

For the pre-processing to work, I need two pieces of information:
1. The form is in it’s final size (maximized across the entire display).
2. The form is visible to the user.

Here is a log showing the order of the form events being triggered as my game loads. Keep in mind that I’m not actually changing the form’s size using code in any of these events:

FormResize, clientSize : 0x0
FormResize, clientSize : 0x0
FormResize, clientSize : 0x0
FormResize, clientSize : 0x0
FormResize, clientSize : 360×640

Currently, I try to show the loading screen on the last resize (the one indicating the form is actually the size of the display), but at this point, the main form is still not visible (even after the FormShow and FormActivate) and I end up with the Android’s default “gray gradient” screen showing until after my pre-processing code already finished, never showing the progress bar.

I tried calling “application.processmessages” after updating the progress bar, but it doesn’t make a difference…

How do I detect when my main form is actually visible to the Android user?

I created a small application to demonstrate this issue:

Comments are closed.