Application.AddOnExceptionHandler() -> Bei Exception keine Meldung

Rund um die LCL und andere Komponenten
Antworten
MmVisual
Beiträge: 1158
Registriert: Fr 10. Okt 2008, 23:54
OS, Lazarus, FPC: Winuxarm (L 2.0.10 FPC 3.2)
CPU-Target: 32/64Bit

Application.AddOnExceptionHandler() -> Bei Exception keine Meldung

Beitrag von MmVisual »

Hallo,

In der Regel nutze ich eine eigene Bearbeitung von Exception, dazu wird der Handler der Appliation übergeben:

Code: Alles auswählen

Application.AddOnExceptionHandler(@ExceptionHandler);
Leider wird bei Exception der "ExceptionHandler" nicht aufgerufen.

Dann habe ich auf dem Formular ein "TApplicationProperties" plaziert und das OnExeption Ereignis belegt. Hier wird bei einem Fehler ebenfalls nicht weiter geleitet.

Muss man noch etwas aktivieren damit es geht?

Ob ich CaptureExceptions auf TRUE oder FALSE setze hat keine Auswirkung, geht nicht.

PS: Es kommen nicht alle Exceptions, nur ein Teil an. Also die "raise Exception.Create()" kommen, andere zum Teil nicht. Hingegen im Debugger springt einem der Fehler-Dialog ins gesicht, nur wird der Exception Handler nicht ausgelöst.

Was nicht ankommt sind z.B. Exception aus der Komponente von Zeos, wenn man z.B. query.FieldByName('FeldGibtEsNicht').... aufruft, also ein Feld was nicht existiert, so sollte das auch gemeldet werden, zumindest war es mal so.

VG Markus

Benutzeravatar
fliegermichl
Lazarusforum e. V.
Beiträge: 845
Registriert: Do 9. Jun 2011, 09:42
OS, Lazarus, FPC: Winux (L 2.0.11 FPC 3.2)
CPU-Target: 32/64Bit
Wohnort: Echzell

Re: Application.AddOnExceptionHandler() -> Bei Exception keine Meldung

Beitrag von fliegermichl »

Das Problem hatte ich auch schon.
Der Handler wird aufgerufen wenn du in der lpr Datei den Aufruf von Application.Run in einen try except Block einschließt.

MmVisual
Beiträge: 1158
Registriert: Fr 10. Okt 2008, 23:54
OS, Lazarus, FPC: Winuxarm (L 2.0.10 FPC 3.2)
CPU-Target: 32/64Bit

Re: Application.AddOnExceptionHandler() -> Bei Exception keine Meldung

Beitrag von MmVisual »

Auf die Idee muss man erst mal kommen ....

Vielen Dank für den Tipp, es geht ! :D

Code: Alles auswählen

  Try
    Application.Run;
  Except
  End; 
Dann ist es ein Bug von Lazarus oder FPC?

Dann sollte bei einem neu erstellen Projekt die Vorlage der LPR Datei nicht auch schon gleich dieses Try..Except so drin haben?

Das ist ein Beispiel vom TestCode:

Code: Alles auswählen

Procedure TfrmMain.BitBtn1Click(Sender: TObject);
Var q: TZQuery;
Begin
  q := TZQuery.Create(Self);
  q.Connection := DB;
  q.SQL.Text := 'SELECT ID, Name FROM adressen';
  If q.FieldByName('GibtEsNicht').AsString = '#' Then // <<< Dieses Feld gibt es nicht > Exception
    BitBtn1.Hint := '';
  q.Free;
end;  

VG Markus

Antworten