Das ist genau der Grund weshalb man im Konstruktor (und schon gar nicht in einem Eventhandler für OnCreate) nichts machen sollte außer Standardwerte setzen oder Objekte für Felder des Objekts erzeugen. Beim Konstruktor hat das den Hintergrund, dass sonst das finally im try..finally trotz eines Initialisierungsfehlers durchlaufen wird. Passiert aber eine Exception im Konstruktor wird das gerade erstellte Objekt automatisch wieder aufgeräumt und die Deinitialisierung würde in der Regel selbst einen Fehler verursachen.
Im Eventhandler OnCreate wird eine Exception jedoch (wie ein Blick in den Quelltext auch gezeigt hätte

) abgefangen, wenn ein entsprechender Eventhandler installiert ist. Das ist normalerweise der Fall, nämlich weitergeleitet auf TApplication.HandleException. Dort wird die Exception dann einfach als ShowMessage angezeigt und dann normal weitergemacht.
jasocul hat folgendes geschrieben : |
Lagere ich die Initialisierung in eine eigene Methode das DataModules aus und rufe diese nach der Erzeugung der Instanz auf, klappt alles wunderbar. Die Exception wird bis ins Hauptformular durchgereicht und ich kann die Anwendung sauber beenden. |
Sauber ist das aber auch nicht. Sauber wäre, wenn das Datenmodul zuerst erstellt wird und das Hauptfenster nur erzeugt würde, wenn es auch angezeigt werden soll...