Try..except doesn't handle exceptions raised in TDBEdit.Onexit

I found some strange behaviour with exceptions in TDBNavigator and
TDBEdit on D5.01 Ent German, W2k SP2. This concerns try...except blocks
and exceptions, that are NOT caught by an "except" though they should.

Do this to reproduce:
- create a new application
- put the following code into the mainform's unit and DFM-file
- you have to adjust the 2 TDBEdit.Fieldname, TQuery.Databasename and
   TQuery.SQL properties in the DFM to a database and tables you have
   access to
- after starting, "dbedFirst" gets the focus (see "Point #1" in code)
- click on the navigator's edit-button. In the AfterEdit-event the
   focus is set to the other TDBEdit ("Point #2"), which fires the
   OnExit
- there, raise an exception in answering with YES ("Point #3")
- at "Point #4" in TMyDBNavigator, the overridden BtnClick-method is
   encapsulated into a try-except block - but the except block is
   never entered and no code executed.
- if you then click on "Edit" again, the exception
   is raised in BeforePost ("Point #5"). And there it works like it
   should. The code at "Point #4" is executed then.

How can the exception from "Point #3" bypass the except-block at "Point #4"?
Did I mix up something? Am I using it all completely wrong? Or is this a
  Delphi-bug?

Thanks for any help.
Jens

--- PAS-file ----

unit Unit1;

interface

uses
   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
   StdCtrls, Db, DBTables, ExtCtrls, DBCtrls, Mask;

type

   // for easier posting I create this here on runtime. Error behaves the
   // same if you have this as a component and put in on a form during
designtime
   TMyDBNavigator = class(TDBNavigator)
   public
     procedure BtnClick(Index: TNavigateBtn); override;
   end;

   TMainForm = class(TForm)
     Datasource: TDataSource;
     Dataset: TQuery;
     Database: TDatabase;
     dbedFirst: TDBEdit;
     dbedSecond: TDBEdit;
     procedure FormCreate(Sender: TObject);
     procedure DatasetAfterEdit(DataSet: TDataSet);
     procedure FormShow(Sender: TObject);
     procedure dbedFirstExit(Sender: TObject);
     procedure DatasetBeforePost(DataSet: TDataSet);
   private
     FMyNavigator : TMyDBNavigator;
     procedure AnyException(Sender: TObject; E: Exception);
   public
   end;

var
   MainForm: TMainForm;

implementation

{$R *.DFM}

procedure TMainForm.FormCreate(Sender: TObject);
begin
   FMyNavigator := TMyDBNavigator.Create(self);
   with FMyNavigator do begin
     Parent := self;
     Left := 10;
     Top := 10;
     Datasource := self.Datasource;
     VisibleButtons := [nbEdit, nbPost, nbCancel];
   end;

   Dataset.Open;
   Application.OnException := AnyException;
end;

procedure TMainForm.AnyException(Sender: TObject; E: Exception);
begin
   Dataset.Cancel;
   Dataset.CancelUpdates;

   ShowMessage('ErrorHandled');
end;

procedure TMainForm.FormShow(Sender: TObject);
begin
   // Point #1
   // set the focus on the first editcontrol. this simulates the fact that
   // the focus can be on any TDBEdit connected to the one datasource here
   dbedFirst.SetFocus;
end;

procedure TMainForm.DatasetAfterEdit(DataSet: TDataSet);
begin
   // Point #2
   // set the focus to the second editcontrol. that's were I want the focus
   // to be when user clicks on "edit"-button
   // as a result, the OnExit from "dbedFirst" is called
   dbedSecond.SetFocus;
end;

procedure TMainForm.dbedFirstExit(Sender: TObject);
begin
   // Point #3
   if MessageDlg('Create TestError TDBEdit.OnExit?', mtConfirmation,
[mbYes, mbNO], 0) = mrYES then
     // this raise simulates any kind of exception that could occur
     // at this point
     raise Exception.Create('TEST-Error TDBEdit.OnExit');
end;

procedure TMainForm.DatasetBeforePost(DataSet: TDataSet);
begin
   // Point #5
   raise Exception.Create('TEST-Error DatasetBeforePost');
end;

{ TMyDBNavigator }

procedure TMyDBNavigator.BtnClick(Index: TNavigateBtn);
begin
   try
     inherited BtnClick(Index);
   except
     // Point #4
     // do anything here, for example
     ShowMessage('Except-Block in TMyDBNavigator.BtnClick');
     // this is not called under certain cirumstances
     // though the exception is raised in the TRY block
     raise;
   end;
end;

end.

--- DFM-file ---

object MainForm: TMainForm
   Left = 331
   Top = 466
   Width = 870
   Height = 640
   Caption = 'MainForm'
   Color = clBtnFace
   Font.Charset = DEFAULT_CHARSET
   Font.Color = clWindowText
   Font.Height = -11
   Font.Name = 'MS Sans Serif'
   Font.Style = []
   OldCreateOrder = False
   OnCreate = FormCreate
   OnShow = FormShow
   PixelsPerInch = 96
   TextHeight = 13
   object dbedFirst: TDBEdit
     Left = 464
     Top = 40
     Width = 165
     Height = 21
     DataField = 'FIELD1'
     DataSource = Datasource
     TabOrder = 0
     OnExit = dbedFirstExit
   end
   object dbedSecond: TDBEdit
     Left = 464
     Top = 68
     Width = 121
     Height = 21
     DataField = 'FIELD2'
     DataSource = Datasource
     TabOrder = 1
   end
   object Datasource: TDataSource
     DataSet = Dataset
     Left = 80
     Top = 80
   end
   object Dataset: TQuery
     Active = True
     CachedUpdates = True
     AfterEdit = DatasetAfterEdit
     BeforePost = DatasetBeforePost
     DatabaseName = 'Anydatabase'
     RequestLive = True
     SQL.Strings = (
       'SELECT * FROM ANYTABLE ')
     UpdateMode = upWhereKeyOnly
     Left = 228
     Top = 80
   end
end

--

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Remove all digits and spaces when replying to me:
email: contact56 at jens 4 berke54564 dot de53

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~