Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - If Exception = EOverFlow then?


Mitmischer 1703 - Mi 16.01.08 19:28
Titel: If Exception = EOverFlow then?
Hi zusammen!

Dieser Quelltext funktioniert nicht :(, und zwar in Zeile 4: Inkompatible Typen.


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
procedure TForm1.ApplicationEvents1Exception(Sender: TObject;
  E: Exception);
begin
  If E = EOverflow then // hier
  Application.MessageBox ('Gleitkommaüberlauf. Bitte verkleinern Sie ihre Zahl.''Rechner', MB_OK+MB_ICONHAND)
  Else
  Begin
  Application.MessageBox('Diese Exception wurde vom Programmierer noch nicht implementiert. Melden Sie folgende Fehlermeldung:''Rechner', MB_OK + MB_ICONHAND);
  Application.ShowException(E);
end;


Da das ja nicht zu funktionieren scheint, wollte ich fragen: Wie kann ich auf abgefangene Exceptions (Wegen dem ApplicatioEvents :wink:) im Nachhinein mit If reagieren?


Delphi-Quelltext
1:
Case geht auch nicht!                    


Mitmischer 1703 - Mi 16.01.08 19:34
Titel: Re: If Exception = EOverFlow then?
Hab's!

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
procedure TForm1.ApplicationEvents1Exception(Sender: TObject;
  E: Exception);
begin
  If String (E) = EOverflow then // In String konvertieren
  Application.MessageBox ('Gleitkommaüberlauf. Bitte verkleinern Sie ihre Zahl.''Rechner', MB_OK+MB_ICONHAND)
  Else
  Begin
  Application.MessageBox('Diese Exception wurde vom Programmierer noch nicht implementiert. Melden Sie folgende Fehlermeldung:''Rechner', MB_OK + MB_ICONHAND);
  Application.ShowException(E);
end;


Ist allerdings nicht gerade elegant... :crying:


Yogu - Mi 16.01.08 19:59

Wie wäre es, wenn du einfach den Klassentyp abfragst? Zum Beispiel mit E.ClassType... Eine Exception ist nämlich auch eine Klasse mit den Klassenmethoden.


Mitmischer 1703 - Mi 16.01.08 20:59

Also so :? ?


Delphi-Quelltext
1:
If E.Classname = EOverflow then {...}                    


Yogu - Mi 16.01.08 21:14

Jep, genau so. Das funktioniert doch, oder?


Xentar - Mi 16.01.08 21:31

Wäre dann nicht die "schönere" Lösung

Delphi-Quelltext
1:
if E is EOverflow then ...                    

?


Yogu - Mi 16.01.08 22:04

Ich arbeite eher weniger mit is und as, aber natürlich ist das noch schöner :zustimm:

Ich persönlich finde andere Möglichkeiten zur Lösung übersichtlicher. Zum Beispiel verwende ich TObject(Instance) statt Instance as TObject.


Mitmischer 1703 - Do 17.01.08 15:57
Titel: OffTopic
Obwohl wir jetzt OffTopic werden: Welchen Sinn haben is und as? :?!?:


JayEff - Do 17.01.08 17:26

Sie erhöhen zumindest mal die Lesbarkeit! Objekt as klasse ist einfacher zu lesen als der typecast Klasse (Objekt) finde ich.
(Vgl. Ruby : 5.times do macht das selbe wie for i := 1 to 5 do in Delphi. Da ist Ruby lesbarer ;) (trotzdem mag ich ruby nicht.))