Текущий архив: 2003.07.07;
Скачать: CL | DM;
Вниз
Как сделать вычисления в edit? Найти похожие ветки
← →
M126 (2003-06-12 17:00) [0]Здравстуйте,Мастера.
У меня не считает сумму трех полей 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;
то есть у каждого поля содержимое исключительно цифровое
кто подскажет что делать?
← →
MsGuns (2003-06-12 17:10) [1]Может, так ?
nvs:= ntpr+nimp+nexp;
Edit25.Text := FloatToStr(nvs);
← →
TohaNik (2003-06-12 17:11) [2]Edit25.Text:=FloatToStr(nvs);
← →
Archon Kazansky (2003-06-12 17:14) [3]А если введут E34e,,,?
← →
M126 (2003-06-12 17:20) [4]Спасибо господа работает! А на счет "А если введут E34e,,,?" посмотрим, а если у Вас есть конкретные предложения подскажите пожалуйста как избежать такого...
← →
M126 (2003-06-12 17:22) [5]Блин пустое поле тоже вызывает ошибку...
← →
Sandman25 (2003-06-12 17:24) [6]>А если введут E34e,,,?
Получат ошибку и будут вводить данные до тех пор, пока не научатся делать это правильно. В конце концов, кому нужно, чтобы программа работала продолжила свою работу - программисту или пользователю, который ее запустил? :)
Кстати, все равно пользователь сможет набрать что-нибудь типа "1е", и никто его не сможет заставить ввести еще хотя бы 1 цифру после e.
← →
Sandman25 (2003-06-12 17:27) [7]M126 (12.06.03 17:20)
Перед запуском процедуры (и можно еще и в OnExit) проверяйте
try
StrToFloat(Edit1.Text);
except
ShowMessage("Введите число");
Edit1.SetFocus;
end;
для каждого Edit. Можно процедурку сделать с параметром сделать, чтобы не писать одно и то же 3 раза.
← →
Сирожа (2003-06-12 17:30) [8]try
if Edit14.Text<>"" then ntpr:=StrToFloat(Edit14.Text);
except
on E:Exception do ShowMessage("Тупой пользователь, введи правильное значение");
end;
← →
MsGuns (2003-06-12 17:33) [9]>Sandman25 © (12.06.03 17:27)
>для каждого Edit. Можно процедурку сделать с параметром сделать, чтобы не писать одно и то же 3 раза.
А Sender для интерьера придуман ?
← →
M126 (2003-06-12 17:36) [10]всего полей 64 штуки и заполняются не все а лишь выборочно придется для каждого описывать пропуск вычисления... либо проставлять нули при обновлении формы но тут другой минус поле с нулем заноситься в базу что не желательно
← →
Sandman25 (2003-06-12 17:44) [11]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 объявить :)
Страницы: 1 вся ветка
Текущий архив: 2003.07.07;
Скачать: CL | DM;
Память: 0.46 MB
Время: 0.125 c