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

try...except pokazuje błąd, ale nie przerywa działania
TY
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 13
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:

Kopiuj
 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.

MI
  • Rejestracja: dni
  • Ostatnio: dni
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

TY
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 13
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

Kopiuj
  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

MI
  • Rejestracja: dni
  • Ostatnio: dni
2

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

LU
  • Rejestracja: dni
  • Ostatnio: dni
0

spróbuj tak:

Kopiuj
 
try
...
except
...
end;

albo skorzystaj z Application.OnException

pelsta
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 819
0
Kopiuj
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;
TY
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 13
0

Dzięki za pomoc. Zrobilem tak:

Kopiuj
  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;

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.