Es ist tatsächlich so, daß die
Exception-Meldung das aktive Fenster als Parent benutzt. Dieses hat aber zu diesem Zeitpunkt bereits ein CM_RELEASE in der Message-Queue, von dem es aber noch nichts weiß.
Jetzt könnte man ja hingehen und bei der Anzeige der
Exception-Box nachschauen, ob so eine Message im aktiven Fenster in der Queue steht, aber das würde auch nur diesen einen Fall abdecken. Es kann ja auch sein, daß dieses Release erst später z.B. durch einen Timer ausgelöst wird. Womöglich ist das Verschwinden der Message-Box dann ja auch erwünscht.
In solchen Fällen ist dann wohl der Entwickler gefragt, der ja um diese Besonderheiten wissen sollte. Hier müsste also das Parent-Fenster für die Message-Box gezielt auf ein valides anderes Fenster umgelegt werden. Konkret lässt sich das in dem Beispielprojekt durch ein simples
SetFocus
erreichen. Wie das im produktiven Fall am sinnvollsten umgesetzt werden kann, vermag ich so nicht zu sagen.
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
Application.CreateForm(TForm2, Form2);
try
Form2.Show;
raise Exception.Create('
Ein Fehler');
finally
SetFocus;
Form2.Release;
end;
end;