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