Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Постоянно выскакивает ошибка

30K
22 марта 2010 года
Morphling
74 / / 17.01.2010
Люди кто может разобраться, просто я новичок в Дельфи. Дело в том что созданная мной программа без проблем компилируется и работает. В общем ошибка выглядит в таком виде:
Proeject Project1.exe raised exception class EConvertError with message "Здесь любой текст' is not a valid integer value'. Process stopped. Use Step or Run to continue.
Эта ошибка выходит после нажатия кнопки. Вот собственно часть текста программы в котором как я думаю есть ошибка:

procedure TForm1.Button15Click(Sender: TObject);
var
result : integer;
begin
result := strtoint(edit1.text);
edit1.Text := edit1.text + button15.Caption + inttostr(result);
end;
9.7K
22 марта 2010 года
oltzowwa
105 / / 15.02.2007
Цитата:
is not a valid integer value



Вам ни о чём не говорит? Скорее всего edit1.text не всегда содержит только цифры.;)

416
22 марта 2010 года
MaitreDesir
380 / / 02.01.2008
Цитата: Morphling
В общем ошибка выглядит в таком виде:
Proeject Project1.exe raised exception class EConvertError with message "Здесь любой текст' is not a valid integer value'. Process stopped. Use Step or Run to continue.



Здесь, я так думаю, все таки не любой текст, а текст который вы записали в edit1? :) Это стандартная ситуация, называется "криворукий пользователь программы, который вводит всякую чушь". Вы используете текст из Edit1 как число целого типа, производя соотевтствующие преобразования. При этом, так как преобразования не удались, программа падает в ошибку. Для устранения таких ошибок есть два пути:
1. Перехватывать неправильный ввод и ругать пользователя.
Для этого можно использовать например такой код
[highlight=delphi]
try
i:=strtoint(s);
...
except
on E:EConvertError do
MessageBox(0,'Введеное значение не является целым числом!',0,0);
end;
[/highlight]
2. Не дать пользователю ввести неправильные данные. Это можно сделать по разному - использовать специальные компоненты, запретить ввод пользователем неправильных символов с помощью обработки событий вроде onKeyPress. Если выберете это - то в поиск, на форуме не раз обсуждалось.

30K
22 марта 2010 года
Morphling
74 / / 17.01.2010
может я вам не так объяснил, кароч я хотел создать типо калькулятор, к каждой кнопке присвоил caption 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 соответственно. Также есть кнопка "/", "*", "-", "+" и "=" (без кавычек конечно), которые должны выполнять действие caption. Вот когда я нажимаю на одну из кнопок то в edit1.text появляется собственно caption нажатой кнопки. Например нажал на кнопку "2" "+" "3", в edit1.text появился текст 2 + 3, а потом нажимаю на "=". Вот он должен был мне возвратить 2+3=5, потому что, как я описал выше сначала edit1.text преобразуется в число strtoint(edit1.text), а это в свою очередь присваивается к result, у нас уже это выглядит так
result := strtoint(edit1.text), после этого, result должен посчитать и присвоить значение от 2+3 и вывести на edit1.text (преобразовать целое в строку я не забыл), а он этого не делает и вместо выходит ошибка... Кто понимает, в чем тут проблема?
303
22 марта 2010 года
makbeth
1.0K / / 25.11.2004
А разве строка '2+3' является целым числом? Вы, батенька, таки выясните, в каком формате должно задаваться число, чтобы StrToInt корректно отработала ;)
30K
22 марта 2010 года
Morphling
74 / / 17.01.2010
Цитата: makbeth
А разве строка '2+3' является целым числом? Вы, батенька, таки выясните, в каком формате должно задаваться число, чтобы StrToInt корректно отработала ;)


ну я думаю что это целое, потому что вот простой пример:

var sum : integer;
begin
sum := 5+6;
showmessage(inttostr(sum))
end;

здесь же ведь 5 + 6 считается как целое. После он отправляет его как сообщение по пути преобразуя его в строку.
в чем разница? извините если это слишком тупой вопрос, просто я в дельфи новичок.

416
22 марта 2010 года
MaitreDesir
380 / / 02.01.2008
Цитата: Morphling
может я вам не так объяснил, кароч я хотел создать типо калькулятор,



Так, вы спросили чо за ошибка и почему. Я вам ответил. А проблема тут похоже [COLOR="Silver"]совсем в другом месте. [/COLOR]
Соизвольте хоть в хэлпе почитать что-нибудь о функции, которую вы используете. Неужели не догадываетесь, что врядли вызовом одной функции получится написать калькулятор? Посмотрите хотя бы в гугле, как делаются калькуляторы, обрабатывающие строки (и что такое префиксная-постфиксная записи).

Ужос, блин.

Upd.:
О боже!!! Что это?

Цитата: Morphling
ну я думаю что это целое, потому что вот простой пример:

var sum : integer;
begin
sum := 5+6;
showmessage(inttostr(sum))
end;

здесь же ведь 5 + 6 считается как целое. ...
в чем разница? извините если это слишком тупой вопрос, просто я в дельфи новичок.


А при чем тут новичок/не новичок в делфи??? Неужели это нужно еще и объяснять? Вы вообще понимаете разницу между константой, выражением, строкой и идентификатором? Если нет - хотя бы с этим разберитесь, а потом с Hello, World начинайте, а не с калькуляторов.

30K
22 марта 2010 года
Morphling
74 / / 17.01.2010
хорошо так и сделаю ... спс
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог