Wichtig für dich wäre noch try..finally. Das benutzt man wie folgt:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var test: TMeineDaten;
begin
test:=TMeineDaten.create;
try
test.Wert1:=strtoint(edit1.text);
test.Wert2:=strtoint(edit2.text);
label1.caption:=inttostr(test.ergebnis);
finally
test.Free;
//Der Teil wird immer ausgeführt, egal ob Exception kommt oder nicht
end;
end;
Ansonsten würdest du eine
Exception werfen, das PRogramm springt raus aus deinen Methoden und du rufst nie Free auf -> Speicherloch
Exceptions solltest du immer in den unteren Klassen werfen (so wie du es in TMeineDaten gemacht hast) und in der Klasse, welche sowieso für Anzeige (
GUI) zuständig ist anzeigen. Die
VCL macht das ja schonmal, in dem sie spätestens am Ende der Ereignis-/Messagebehandlung einen Except-Block hat und dann mittels Application.Showexception ein Fenster bringt. Wenn du also am Exceptiontest nichts verändern willst, dann kannst du es so durchlaufen lassen ohne eigene Exceptionbehandlung (try..except).
Ansonsten kann man an dem Beispiel jetzt nicht viel mehr sagen. Ausser dass du in dem speziellen Fall anstatt inttostr auch tryintsotr nehmen kannst um Fehler gleich abzufangen bzw. eine eigene
Exception zu kreieren.
Eine übliche Vorgehensweise ist auch in bestimmten Klassen die
Exception abzufangen und dann gleich wieder zu werfen, aber mit einer eigenen Ergänzung:
Delphi-Quellcode:
try
...
except
on e:
Exception do
raise Exception.create(e.
MEssage+#13#10+'
Ich will auch noch was sagen!');
end;
Und nicht zu vergessen auch mal eigene Exceptionklassen zu verwenden.
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.