Wobei so richtig verstanden hab ich es nicht:
Delphi-Quellcode:
// Cancel the mouse capture ??
if GetCapture <> 0
then SendMessage(GetCapture, WM_CANCELMODE, 0, 0);
{--- wofür soll das gut sein?}
// Now actually show the exception
if FException
is Exception then {----- warum diese Unterscheidung?}
Application.ShowException(FException)
else
SysUtils.ShowException(FException,
nil);
Das
WM_CANCELMODE
sorgt nur dafür, daß das nachfolgende Fenster auch auf Mausclicks reagieren kann. Es könnte ja sein, daß sich gerade ein anderes Fenster die Maus gekrallt hat. In dem Fall würde zwar die
Exception-Meldung angezeigt, der Anwender könnte diese aber nicht mit der Maus wegclicken.
Was die Abfrage danach betrifft: Die Zuweisung nach
FException
erfolgt durch einen Hard-Cast von
ExceptObject
. Man kann also nicht sicher sein, daß wirklich eine
Exception
-Instanz drin steckt. Genau dies wird durch die (auf den ersten Blick unsinnige) Abfrage abgefangen.
Bonus-Wissen: Man kann nicht nur Exceptions raisen, sondern jede Klasseninstanz!
raise TButton.Create(nil);
Was auch immer man damit bezwecken will.