1. Das ExceptObject ist global und sollte nicht verwendet werden, da es bis zur Anzeige/Ausführung eures Codes unter des ExceptObject'es schon wieder eine neue
Exception - u.a. in einem parallelen Thread - zu einer weiteren
Exception gekommen sein kann und dann enthält ExceptObject dieses. Die globale Variable kann man nicht sicher einsetzen.
2. Das On E:
Exception do gibt euch die zu dem Handler passende
Exception und legt diese in E ab. Hier könnt ihr euch sicher sein, dass ihr die richtige verwendet.
3. Falls nun einer kommt: ich nutze keine Threads: Die
VCL hat für ihre Nachrichtenschleife schon einen Thread (in dessen Context soweit zwar alle
GUI Events laufen, aber das ist nur einer von vielen) und genauso gut gibt es an vielen anderen Stelle noch weitere. U.a. seien auch nochmal die Sockets erwähnt die davon nicht gerade wenige haben.
4. Finally Ausführung bedeutet nicht, dass es auch eine
Exception gegeben hat! Und das man dies auch nicht anhand des ExceptObject'es nachprüfen kann, kann man sich aufgrund der Hinweise aus 1. denken.
Vergesst ExceptObject lieber schnell wieder! Es ist nur mit Vorsicht und unter bestimmten Bedingungen nutzbar. Auch die
RTL nutzt diese Variable zum mappen von
Exception, u.a. von Windows bzw. der
WinAPI.