Außerdem ist es sehr gefährlich, eine Exception zu behandeln, und dem Programm dann einfach passende Werte unterzujubeln. Der User wird dann später von dem Fehler nichts mitkriegen und sich wundern, warum plötzlich alles falsch ist. Viel besser ist es, die Exception anzeigen zu lassen, so dass der Benutzer weiß, dass da etwas nicht stimmt. Du kannst höchstens die Fehlermeldung verständlicher umschreiben, musst aber hinterher die Exception wieder per raise erzeugen:
Code: Alles auswählen
procedure TForm1.Button1Click(Sender: TObject);
var a,b,c:integer;
begin
try
begin
a:=strtoint(edit1.text);
b:=strtoint(edit2.text);
if op='+' then c:= a+b else c:= a-b;
label2.Caption:=inttostr(c);
end;
except
on EConvertError do
raise Exception.Create('Mann-o-Mann! Du sollst hier ne gültige Zahl eingeben!');
end;
end;
Das beste ist aber bei EConvertError - wie delphifreak oben schon erwähnte -, es gar nicht so weit kommen zu lassen. Neben StrToInt gibt es auch eine Funktion TryStrToInt, diese führt die Umwandlung aus, und falls dies nicht gelingt, wird das Ergebnis false zurückgeliefert:
Code: Alles auswählen
procedure TForm1.Button1Click(Sender: TObject);
var a,b,c:integer;
begin
if not TryStrToInt(edit1.Text, a) then begin
ShowMessage('Keine gültige Zahl.');
SetFocus(edit1); // den Fokus auf das fehlerhafte Eingabefeld setzen
exit;
end;
if not TryStrToInt(edit2.Text, b) then begin
ShowMessage('Keine gültige Zahl.');
SetFocus(edit2); // den Fokus auf das fehlerhafte Eingabefeld setzen
exit;
end;
if op='+' then c:= a+b else c:= a-b;
label2.Caption:=inttostr(c);
end;