Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Защита полей ввода



Для ввода параметров расчета могут быть использованы поля ввода Edit. Введенные пользователем данные должны быть преобразованы к Integer или Float с использованием функций StrToInt и StrToFloat соответственно. Нет гарантии, что пользователь правильно введет числа в поля ввода, поэтому при преобразовании может возникнуть исключительная ситуация «Edit1 is not valid floating point value» в случае применения функции StrToFloat или «Edit1 is not valid integer value» в случае использования функции StrToInt. Давать возможность видеть пользователю сообщения такого рода – это плохо разработанная программа, дурной стиль программирования. Все сообщения должны быть понятны пользователю и должны относиться к решаемой задаче, а не к внутренним проблемам программы. Избежать этой ситуации можно несколькими способами. Один их них, когда можно запретить ввод нечисловых данных в поля ввода. Для защиты полей от ввода нечисловых данных могут быть предложены два варианта обработчика события OnKeyPress для полей ввода, реализованных компонентом Edit. Оба из них предполагают, что числа вводят не в научной нотации. Первый вариант разрешает ввод только цифр, десятичного разделителя и допускает использование клавиши «BackSpace». Этот вариант обработчика события «Нажатие одиночной клавиши» (OnKeyPress) может быть использован при работе с положительными целыми и вещественными числами.

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);

begin

if Sender is TEdit then begin

if not((key in ['0'..'9']) or (key = chr(vk_back)) or

(key=DecimalSeparator)) then

key:= #0;

if (key = DecimalSeparator) then

if (pos(key, (sender as TEdit).Text)>0) then

key:= #0;

end; end;

Второй вариант обработчика события OnKeyPress помимо того, что разрешает ввод только цифр, десятичного разделителя, допускает использование клавиши «BackSpace», еще разрешает вводить знак «-», т. е. он может быть использован для ввода как положительных, так и отрицательных чисел. Обработчик отслеживает появление десятичного разделителя. Если он находится в первой позиции, перед ним подставляется символ нуля «0». Если в набранном тексте присутствует знак «-», он устанавливается в первую позицию. Не допускается дублирование десятичного разделителя и знака «-».

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);

begin

if Sender is TEdit then

if not((key in ['0'..'9']) or (key = chr(vk_back)) or

(key=DecimalSeparator) or (key = '-')) then

// ожидание ввода числа от 0 до 9, символа десятичного

// разделителя, знака минус или нажатия клавиши BackSpace

key:= #0

else begin

if (key = DecimalSeparator) then begin

if (pos(key, (sender as TEdit).Text)>0) then begin

//если это уже не первое вхождение

key:= #0; exit;

end;

if ((Sender as TEdit).SelStart=0) then begin

//вставка 0, если десятичный разделитель помещен

//в первую позицию

(Sender as TEdit).Text:='0'+DecimalSeparator +

(Sender as TEdit).Text;

(Sender as TEdit).SelStart:=(Sender as TEdit).SelStart+2;

key:=#0;

end;

end;

if (key = '-') then begin

if (pos(key, (sender as TEdit).Text)>0) then begin

//если повторное нажатие знака минус

key:= #0;

(Sender as TEdit).Text:= copy((Sender as TEdit).Text, 2,

length((Sender as TEdit).Text)-1);

//удаление предыдущего знака минус

exit;

end;

if (copy((Sender as TEdit).Text, 1, 1) <> '-') then begin

//если знака минус не было

(Sender as TEdit).Text:= '-' + (Sender as TEdit).Text;

(Sender as TEdit).SelStart:=

length((Sender as TEdit).Text);

//вставка знака минус на первую позицию

key:= #0;

end;

end; //if (key = '-')

end; //else

end;





Дата публикования: 2014-11-03; Прочитано: 386 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.015 с)...