Problem summary: The method assigned to Application.OnException
never runs when an unhandled exception occurs.
I create a blank project with only this unit and place a single button on Unit.dfm
(this is based on an official example) :
// Unit1.pas
// *********
type
TForm1 = class(TForm)
Button1: TButton;
procedure FormCreate(Sender: TObject);
procedure AppException(Sender: TObject; E: Exception);
procedure Button1Click(Sender: TObject);
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
Application.OnException := AppException;
end;
procedure TForm1.AppException(Sender: TObject; E: Exception);
begin
Application.Terminate;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
raise Exception.Create('Incorrect password entered');
end;
Then I set a breakpoint inside TForm1.AppException()
. I run the program, click the button, an error dialog is shown saying "Incorrect password entered" but if I continue execution the breakpoint never breaks; the program doesn't Terminate
like I asked it too. The program continues running and I can press the button again.
I tried the same code (adapted) in Delphi 7 but the same result is encountered.
The only rational explanation is the
FormCreate
is not executing. You need to assign it to the form'sOnCreate
event handler. Use the object inspector to do so.