Auch wenn das der falsche Thread ist, erkläre ich noch kurz warum das so ist:
OnCreate des Formulars wird ausgelöst, wenn das Objekt, das das Formular repräsentiert, erstellt wird. Danach wird das dann erst angezeigt, wobei auch OnShow ausgelöst wird. Während es gerade angezeigt wird (OnShow) lässt sich die Sichtbarkeit aber auch noch nicht verändern, da ginge also kein Hide. Erst danach ist das Fenster tatsächlich sichtbar und ließe sich mit Hide wieder verstecken.
Deshalb ist deine Lösung mit ShowMainForm genau richtig.