Dodawanie liczby do Labla/Edita i błąd.

0

Mam pewną liczbę w Lablu ( w edicie mam to samo, więc mogę też tą liczbę dodać do liczby z edita, jednak efekt jest taki sam.)
Dodaję ją tak:


 X: integer;
 Z: integer;

X := StrToInt(Label6.Caption);
Z := X + strtoint('400');
Label15.Caption := IntToStr(Z);

i wywala mi błąd, że: "Zwartość Labla nie jest wartością Integer"
" 210000 is not a valid integer value.

Ten kod wygrzebałem ze swojego starego program.
Pisałem kiedyś kalkulator i za pomocą tego kodu bez problemu liczył podawał odpowieni wynik, ale nie wiem, może gdzieś robię błąd, może jak zobaczy to ktoś z zewnątrz to zobaczy ten błąd.
Pozdrawiam :)

1

O ile dobrze wkleiłeś komunikat, to widzę, że przed liczbą masz spację. Ale nawet jesli nie, to skoro taki wyjątek występuje, to na 10000000000% któraś wartośc po konwersji ze stringa nie jest prawidlowym integerem. Najlepiej procedurą Val albo funkcją TryStrToInt dokonuj konwersji i sprawdzania poprawności stringa jako liczby całkowitej. A i trochę bez sensu u siebie niepotrzebnie komplikujesz kod i robisz to: StrToInt('400'). Lepiej od razu dodać 400 jako liczbę, bez takich kombinacji. I na przyszłośc pytania o banalne podstawy zadawaj w dziale Newbie. Tam też ten wątek przenoszę.

1

może lepiej sprawdź wartość w label6.Caption (przed wykonaiem podstawienia do zmienej X) - zapewne w tym miejscu Ci się "wykrzacza", bo z trochę mniejszą pewnością niż @olesio (sięgającą 99,9%), masz tam jakiś ciąg znaków, który nie pozwala dokonać konwersji.

1

X:=StrToInt('0'+Trim(Label6.Caption));

0

Dzięki @_13th_Dragon. Wszystko działa :)
@olesio, jak wpisywałem samo 400 nie kompilowało i zwracało błąd że niewłaściwe typy String ald Integer (może nie dokładnie takimi słowami, ale o to chodziło) i debugger wskazywał właśnie na to '400'
Jeszcze raz dzięki za pomoc
pozdrawiam

0

@DiKey11 - powiedz, jakim cudem konwersja liczby 400 jako łańcucha ma się nie powieść..? To jest wręcz niemożliwe - RTL aż tak zabugowany nie jest; Jeśli jesteś w 100% pewien, że konwertowanym łańcuchem jest poprawna liczba 400, to na pewno nie jest winna sama funkcja StrToInt, ale kodu powodującego błąd (który byłby dowodem na bugi w funkcji) nie podałeś, więc nikt nie będzie raczej zgadywał przyczyny wyjątku; Dodatkowo można śmiało napisać, że bez względu na to jak dany łańcuch został utworzony i skąd on pochodzi (czy to z parametrów, czy z kontrolek) funkcja zadziała prawidłowo, jeśli dany łańcuch faktycznie reprezentuje poprawną wartość liczby typu Integer;

Poza tym, jeśli dostajesz wyjątek, to po prostu przeklej jego treść bez własnoręcznego tłumaczenia; Bo to co podałeś:

" 210000 is not a valid integer value.
sugeruje, że przed liczbą stoi biały znak, który na pewno nie powoduje wyjątku; Funkcja konwertująca łańcuch na liczbę usuwa białe znak przed samą konwersją, więc choćby było dwadzieścia spacji przed liczbą to nie spowoduje to błędu; Ale tylko przed liczbą, bo przycinanie łańcucha obejmuje jedynie białe znaki stojące przed nią - jeśli po niej także występują, próba konwersji zakończy się wyjątkiem EConvertError, np.: ''210000 ' is not a valid interer value';

DiKey11 napisał(a)

@olesio, jak wpisywałem samo 400 nie kompilowało i zwracało błąd że niewłaściwe typy String ald Integer

A czy przypadkiem to nie był taki błąd - Incompatible types: 'Integer' and 'String'? Obstawiam, że pomyliłeś StrToInt z IntToStr.

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