Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как сделать вычисления в edit? [D6]


M126 ©   (2003-06-12 17:00:00) 

Здравстуйте,Мастера.
У меня не считает сумму трех полей edit в четвертое поле (тоже edit) код приблиз-но такой
var ntpr, nimp, nexp, nvs :real;
begin
ntpr:=StrToFloat(Edit14.Text);
nimp:=StrToFloat(Edit15.Text);
nexp:=StrToFloat(Edit16.Text);
nvs:= ntpr+nimp+nexp;
nvs:=StrToFloat(Edit25.Text);
end;
принажатии кнопки вылетает ошибка "is not a valid floating value
при этом в событии каждого editа onKeyPress стоит
if not (Key in [#8,"0".."9","+","E","e",DecimalSeparator]) then Key:=#0;
то есть у каждого поля содержимое исключительно цифровое
кто подскажет что делать?


Sandman25   (2003-06-12 17:44:00) [1]

MsGuns © (12.06.03 17:33)

А без хамства можно?
Sender используется в событиях, и если поставить обработчик OnExit, то Ваш совет правомочен. Да и то, только в том случае, если у него не было до этого разных обработчиков для разных TEdit.
Или если автор ветки не хочет ставить обработчики на TEdit, что Вы ему посоветуете?
Случайно не написать некоторую процедуру типа
procedure TestEdit(Edit: TEdit);
begin
try
StrToFloat(Edit.Text);
except
ShowMessage("Введите число");
Edit.SetFocus;
end;
end;

Или данная процедура будет работать только если формальный параметр имеет идентификатор Sender? Вы еще скажите, что удобнее Sender как TObject объявить :)


M126   (2003-06-12 17:36:00) [2]

всего полей 64 штуки и заполняются не все а лишь выборочно придется для каждого описывать пропуск вычисления... либо проставлять нули при обновлении формы но тут другой минус поле с нулем заноситься в базу что не желательно


MsGuns   (2003-06-12 17:33:00) [3]

>Sandman25 © (12.06.03 17:27)
>для каждого Edit. Можно процедурку сделать с параметром сделать, чтобы не писать одно и то же 3 раза.

А Sender для интерьера придуман ?


Сирожа   (2003-06-12 17:30:00) [4]

try
if Edit14.Text<>"" then ntpr:=StrToFloat(Edit14.Text);
except
on E:Exception do ShowMessage("Тупой пользователь, введи правильное значение");

end;


Sandman25   (2003-06-12 17:27:00) [5]

M126 (12.06.03 17:20)

Перед запуском процедуры (и можно еще и в OnExit) проверяйте
try
StrToFloat(Edit1.Text);
except
ShowMessage("Введите число");
Edit1.SetFocus;
end;
для каждого Edit. Можно процедурку сделать с параметром сделать, чтобы не писать одно и то же 3 раза.


Sandman25   (2003-06-12 17:24:00) [6]

>А если введут E34e,,,?

Получат ошибку и будут вводить данные до тех пор, пока не научатся делать это правильно. В конце концов, кому нужно, чтобы программа работала продолжила свою работу - программисту или пользователю, который ее запустил? :)

Кстати, все равно пользователь сможет набрать что-нибудь типа "1е", и никто его не сможет заставить ввести еще хотя бы 1 цифру после e.


M126   (2003-06-12 17:22:00) [7]

Блин пустое поле тоже вызывает ошибку...


M126   (2003-06-12 17:20:00) [8]

Спасибо господа работает! А на счет "А если введут E34e,,,?" посмотрим, а если у Вас есть конкретные предложения подскажите пожалуйста как избежать такого...


Archon Kazansky   (2003-06-12 17:14:00) [9]

А если введут E34e,,,?


TohaNik   (2003-06-12 17:11:00) [10]

Edit25.Text:=FloatToStr(nvs);


MsGuns   (2003-06-12 17:10:00) [11]

Может, так ?

nvs:= ntpr+nimp+nexp;
Edit25.Text := FloatToStr(nvs);


Наверх

Титульная страница Поиск, карта сайта Написать письмо