try...except pokazuje błąd, ale nie przerywa działania

0

Witam. Jestem początkującym programistą. W moim programie próbuje zapewnić, aby nie dało się wpisać litery w miejsce zmiennej (integer). W tym celu wykorzystałem coś takiego:

 try
      a:=strtoint(edit1.text);
      b:=strtoint(edit2.text);
    except on econverterror do
      begin
        showmessage ('Błąd danych');

      end;

po wpisaniu w okienku jakiejś litery wyświetla się komunikat 'błąd danych', ale program działa dalej, nie idzie go zamnkąć (ctrl+f2 pomaga). Nie da się jakoś przerwać działania, albo anulować kliknięcie w button po wpisaniu złych danych? (litera zamiast liczby).

ps: program podaje liczby armstronga z przedziału liczbowego.

0

Hmm... uno, uzycie try... end nie ubija działania programu, bo to by nie miało sensu. Jak chcesz przerwać obliczenia, to musisz jakoś opuścić procedurę obsługującą nacisnięcie przycisku, np poprzez exit. A tak na marginesie, to do tego co chcesz zrobic są już osobne funckje. Poczytaj o StrToIntDef

0

strtointdef to nie jest rozwiązanie którego szukam. Chciałbym, żeby mój program po wpisaniu złej wartości pokazał komunikat 'błąd' a po tym wymazywał pole (albo zaznaczał błędną wartość). A na pewno przestał próbować obliczać dla złych wartości... niestety

  try
      a:=strtoint(edit1.text);
      b:=strtoint(edit2.text);
    except on econverterror do
      begin
        showmessage ('Błąd danych');
        listbox1.Clear;
        edit1.Clear;
        edit2.Clear;
      end;

  end; 

nie rozwiązuje problemu

2

no to tak jak pisałem, użyj procedury exit;

0

spróbuj tak:

 
try
...
except
...
end;

albo skorzystaj z Application.OnException

0
if TryStrToInt(Edit1.Text,a) and TryStrToInt(Edit2.Text,b) then
begin
  //wartości prawidłowe
  //obliczenia
end
else
begin
  showmessage ('Błąd danych');
  listbox1.Clear;
  edit1.Clear;
  edit2.Clear;
end;
0

Dzięki za pomoc. Zrobilem tak:

  try
      a:=strtoint(edit1.text);
      b:=strtoint(edit2.text);
    except on econverterror do
      begin
        showmessage ('Błąd danych');

        listbox1.Clear;
        edit1.Clear;
        edit2.Clear;
        exit;
      end;

  end;

1 użytkowników online, w tym zalogowanych: 0, gości: 1