Autor |
Beitrag |
Mitmischer 1703
      
Beiträge: 754
Erhaltene Danke: 19
Win 7, Debian
Delphi Prism, Delphi 7, RAD Studio 2009 Academic, C#, C++, Java, HTML, PHP
|
Verfasst: Mi 16.01.08 19:28
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 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  ) im Nachhinein mit If reagieren?
Delphi-Quelltext
_________________ Die Lösung ist nicht siebzehn.
|
|
Mitmischer 1703 
      
Beiträge: 754
Erhaltene Danke: 19
Win 7, Debian
Delphi Prism, Delphi 7, RAD Studio 2009 Academic, C#, C++, Java, HTML, PHP
|
Verfasst: Mi 16.01.08 19:34
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 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... 
_________________ Die Lösung ist nicht siebzehn.
|
|
Yogu
      
Beiträge: 2598
Erhaltene Danke: 156
Ubuntu 13.04, Win 7
C# (VS 2013)
|
Verfasst: 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 
      
Beiträge: 754
Erhaltene Danke: 19
Win 7, Debian
Delphi Prism, Delphi 7, RAD Studio 2009 Academic, C#, C++, Java, HTML, PHP
|
Verfasst: Mi 16.01.08 20:59
Also so  ?
Delphi-Quelltext 1:
| If E.Classname = EOverflow then |
_________________ Die Lösung ist nicht siebzehn.
|
|
Yogu
      
Beiträge: 2598
Erhaltene Danke: 156
Ubuntu 13.04, Win 7
C# (VS 2013)
|
Verfasst: Mi 16.01.08 21:14
Jep, genau so. Das funktioniert doch, oder?
|
|
Xentar
      
Beiträge: 2077
Erhaltene Danke: 2
Win XP
Delphi 5 Ent., Delphi 2007 Prof
|
Verfasst: Mi 16.01.08 21:31
Wäre dann nicht die "schönere" Lösung
Delphi-Quelltext 1:
| if E is EOverflow then ... |
?
|
|
Yogu
      
Beiträge: 2598
Erhaltene Danke: 156
Ubuntu 13.04, Win 7
C# (VS 2013)
|
Verfasst: Mi 16.01.08 22:04
Ich arbeite eher weniger mit is und as, aber natürlich ist das noch schöner
Ich persönlich finde andere Möglichkeiten zur Lösung übersichtlicher. Zum Beispiel verwende ich TObject(Instance) statt Instance as TObject.
|
|
Mitmischer 1703 
      
Beiträge: 754
Erhaltene Danke: 19
Win 7, Debian
Delphi Prism, Delphi 7, RAD Studio 2009 Academic, C#, C++, Java, HTML, PHP
|
Verfasst: Do 17.01.08 15:57
Titel: OffTopic
Obwohl wir jetzt OffTopic werden: Welchen Sinn haben is und as? 
_________________ Die Lösung ist nicht siebzehn.
|
|
JayEff
      
Beiträge: 2971
Windows Vista Ultimate
D7 Enterprise
|
Verfasst: 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.))
_________________ >+++[>+++[>++++++++<-]<-]<++++[>++++[>>>+++++++<<<-]<-]<<++
[>++[>++[>>++++<<-]<-]<-]>>>>>++++++++++++++++++.+++++++.>++.-.<<.>>--.<+++++..<+.
|
|