Thema: Delphi Globale Exceptions

Einzelnen Beitrag anzeigen

Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#2
  Alt 28. Okt 2002, 17:08
Moin Hansa,

an der von Dir genannten Stelle erwartet der Compiler eine Methode.
Da Du aber eine Prozedure übergibts...

Saubere Lösung:
Du fügst die Prozedure als Methode in Deinem Hauptformular ein.

Eine "schmutzige Lösung" hab' ich auch noch.
Die hab ich jetzt noch nicht ausprobiert, sollte allerdings funktionieren. (Eventuell im OnDestroy die Methode Application.OnException := nil setzen, damit nicht versucht wird eine gar nicht vorhandene Methode wieder freizugeben)

Code:
[color=#000080]// Die saubere Lösung[/color]

[b]type[/b]
  TForm1 = [b]class[/b](TForm)
    [b]procedure[/b] FormCreate(Sender: TObject);
  [b]private[/b]
    [color=#000080]{ Private-Deklarationen }[/color]
  [b]public[/b]
    [color=#000080]{ Public-Deklarationen }[/color]
    [b]PROCEDURE[/b] ExceptGerMeldung (Sender : Tobject;E : Exception);
  [b]end[/b];

[b]var[/b]
  Form1: TForm1;

[b]implementation[/b]

[color=#000080]{$R *.DFM}[/color]


[b]PROCEDURE[/b] TForm1.ExceptGerMeldung (Sender : Tobject;E : Exception);
  [b]BEGIN[/b]
    MessageDLG (' Fehler   : ' + E.Message+#10#13+
                ' Fehlertyp : ' + E.Classname+#10#13+
                ' Sender   : ' + Sender.Classname,mtError,[mbOK],0);
  [b]END[/b];


[b]procedure[/b] TForm1.FormCreate(Sender: TObject);

[b]begin[/b]
  Application.OnException := ExceptGerMeldung;
[b]end[/b];


[color=#000080]// ... und die schmutzige...[/color]

[b]PROCEDURE[/b] ExceptGerMeldung (Sender : Tobject;E : Exception);

[b]var[/b]
  Form1: TForm1;

[b]implementation[/b]

[color=#000080]{$R *.DFM}[/color]


[b]PROCEDURE[/b] ExceptGerMeldung (Sender : Tobject;E : Exception);
  [b]BEGIN[/b]
    MessageDLG (' Fehler   : ' + E.Message+#10#13+
                ' Fehlertyp : ' + E.Classname+#10#13+
                ' Sender   : ' + Sender.Classname,mtError,[mbOK],0);
  [b]END[/b];


[b]procedure[/b] TForm1.FormCreate(Sender: TObject);

[b]var[/b]
  p : ^TExceptionEvent;

[b]begin[/b]
  p := @ExceptGerMeldung;
  Application.OnException := p^;
[b]end[/b];
Nachtrag für die "schmutzige" Lösung:
(so geht's auch)

Code:
[b]procedure[/b] TForm1.FormCreate(Sender: TObject);
[b]begin[/b]
  @Application.OnException := @ExceptGerMeldung;
[b]end[/b];
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat