Hallo,
try
zahl2 := strtofloat(edit2.text);
except
On EConvertError do showMessage(‚Bitte nur Zahlen eingeben!‘);
end;
aber das fängt den eingabefehler nicht ab, sondern produziert
ihn weiterhin.
bist du dabei im Debugger? Der stoppt standardmäßig auch bei einem try-Block. In den Optionen kann man das unterbinden.
Wenn du die exe direkt aus dem Win-Explorer startest, sollte eigentlich der von dir gewünschte except-Block ausgeführt werden.
Es gibt auch die Möglichkeit, in einem OnKeyPress-Ereignis schon gleich die Eingabe falscher Zeichen zu unterdrücken:
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if not (Key in ['1','2','3','4','5','6','7','8','9','0', #8, DecimalSeparator]) then
Key := #0;
if (Key = DecimalSeparator) and (pos(Key, (Sender as TCustomEdit).Text) \> 0) then
Key := #0;
end;
Hier wird im ersten IF einfach überprüft, ob die gedrückte Taste zu den zulässigen Zeichen gehört. Dabei ist DecimalSeparator das auf dem System eingestellte Dezimaltrennzeichen (also ‚.‘ oder ‚,‘) und #8 ist der Backspace („rückwärts löschen“).
Das zweite IF verhindert, dass das Dezimaltrennzeichen mehrfach eingegeben wird. Der Cast (Sender as TCustomEdit) erlaubt die Benutzung der Przedur für alle von TCustomEdit abgeleiteten Objekte. D.h. du brauchst nicht für jedes Editierfeld eine eigene OnKeyPress-Prozedur zu schreiben, sondern kannst sie einfach mit dieser einen verknüpfen (im Objektinspektor).
Gruß, Niels