Einzelnen Beitrag anzeigen

Carsten1234

Registriert seit: 9. Apr 2008
Ort: Vechelde
178 Beiträge
 
Delphi 8 Professional
 
#1

Eigene Exceptions werden nicht immer behandelt

  Alt 7. Apr 2009, 08:55
Hallo zusammen,

zu den eigentlichen Exceptions möchte ich eine selbst erstellte Exception behandeln. Dazu habe ich folgendes deklariert:
Delphi-Quellcode:
TMyException = class(Exception)
  private
    FErrorType: integer;
    FCommand : integer;
  public
     constructor Create(AMsg: string;
                        AErrorType: integer;
                        ACommand: integer); overload;
end;
(...)
constructor TMyException.Create(AMsg: string;
                                AErrorType: integer;
                                ACommand: integer);
begin
  inherited Create(AMsg);
  FErrorType:= AErrorType;
  FCommand:= ACommand;
end;
An besagter Stelle im Code, wo meine Exception ausgelöst werden soll, steht (ohne try..except Block):
raise TMyException.Create('Timeout', TIMEOUT, 10);
Im Hauptformular existiert folgende Definition:
Delphi-Quellcode:
procedure TMainForm.FormCreate(Sender: TObject);
begin
  Application.OnException:= AppException;
(...)
end;
Und weiter:
Delphi-Quellcode:

procedure TMainForm.AppException(Sender: TObject; E: Exception);
var MyException: TMyException;
begin
  if (E.ClassType = TMyException) then
  begin
    MyException:= nil;
    MyException:= E as TMyException;
    if (Assigned(MyException)) then
    begin
    // mach irgendwas hier
    end;
  end
  else
  begin
    MessageDlg('Es ist folgender Fehler aufgetreten:' +#10+#13+ E.Message + #10+#13 + 'Fehlertyp: '+ E.ClassName, mtError, [mbOk], 0)
  end;
end;
Starte ich mein Programm aus der IDE heraus und es wird meine Exception geworfen, so bekomme ich den Hinweis der IDE, dass meine Exception gefallen ist.
Aber: Oft, jedoch nicht immer (und für mich noch nicht nachvollziehbar), gelange ich gar nicht in die Exceptionbehandlung des Hauptformulars (Brechpunkt gesetzt) und es wird auch kein MessageDlg ausgegeben.

Frage: Wieso?

Danke für Tipps und Gruß, Carsten
  Mit Zitat antworten Zitat