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

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

Обработка ошибок [D7, XP]


Leshas ©   (2006-04-12 09:27:00) 

Здравствуйте!

Скажите пожалуйста, как можно обрабатывать ошибки, например:
1) есть 2 Edit'а и Button1. В 1 и 2 Edit вводятся 2 числа, и нажимается Button1.
2) При нажатии кнопки Button1 выполняется операция перевода значения строки в дробное число.
3) Преобразованные числа перемножаются

и тут возникает след. ситуация:
если вводятся числа, нипример, " 12,12" и " 10,1" (т.е. с запятой) перемножается отлично, а если вводить " 12.12" и " 10.1" (т.е. с точкой), то возникает ошибка!

Как можно обрабатывать такие ситуации без появления критических ошибок?


Anatoly Podgoretsky   (2006-04-15 12:00:00) [1]

Галинка ©   (15.04.06 02:00) [6]
Не с запятой, а с десятичным разделителем, цифровая клавиатура это поддерживает, какой текущий язык будет, такой будет и разделитель.
Главное не диктовать пользователю, какой разделитель использовать в системе, не программиста это.


Германн   (2006-04-15 02:20:00) [2]


> Галинка ©   (15.04.06 02:00) [6]
>
> Если хотите громко и показательно, то  try-except-end. Причем
> не по нажатию Button1, а по выходу из самого Edit.Exit.
>
> Можно еще на форму поместить предупреждение, что десятичный
> знак - запятая.

Можно, но, имхо, не нужно.
Лучше использовать какой-либо вариант из Virgo_Style ©   (12.04.06 09:35) [2]


Галинка   (2006-04-15 02:00:00) [3]

Если хотите громко и показательно, то  try-except-end. Причем не по нажатию Button1, а по выходу из самого Edit.Exit.

Можно еще на форму поместить предупреждение, что десятичный знак - запятая.

имхо. с запятой удобнее, т.к. чаще цифры вводят с NumPad'a.


kester   (2006-04-12 16:40:00) [4]

Можно сделать так:
edit1.Text:=StringReplace(edit1.Text,'.',',',[rfReplaceAll]);
это заменяет все точки на запятые в Edit`e.
Еще можно поизменять DecimalSeparator:
DecimalSeparator:=',';
или
DecimalSeparator:='.';


Leshas   (2006-04-12 09:46:00) [5]

Соглашусь, может она и не критическая, но программа у меня слетает! Не хотелось бы!

Virgo_Style, спасибо!


balepa   (2006-04-12 09:45:00) [6]

Вот тебе еще
procedure TForm1.Button1Click(Sender: TObject);
var
 k: double;
 i:integer;
 s: string;
begin
 i:= pos('.',Edit1.Text);
 s:= Edit1.Text;
 s[i]:= ',';
 k:= strtofloat(s);
 Showmessage(Floattostr(k));
end;

Можно и MaskEdit использовать.


Virgo_Style   (2006-04-12 09:35:00) [7]

* запретить ввод "неправильного" знака
* заменить "неправильный" на "правильный" (можно на лету)
* запретить нажатие кнопки при неверных исходных
* использовать функцию перевода строки в число, не различающую "." и ","
* использовать StrToFloatDef
* использовать TryStrToFloat
* использовать try-except-end

и вообще imho это не критическая ошибка.


Anatoly Podgoretsky   (2006-04-12 09:33:00) [8]

TryStrToFloat


Наверх

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