Для того чтобы
запретить пользователю вводить определённый тип информации в
текстовое поле, не обязательно использовать компонент lang=en-us>MaskEdit (страница lang=en-us>Additional). Можно просто ввести обработку
исключительных ситуаций.
Я приведу пример
фрагмента программы, ниже будет дано подробное оп lang=en-us>исание данного фрагмента.
align=left> face="Courier New"
color=#003399>try
align=left> face="Courier New" color=#003399> A := StrToInt
(Input.Text);
align=left> face="Courier New"
color=#003399>except
align=left> lang=en-us> ShowMessage ('Ошибка ввода целого
числа!!!');
align=left> face="Courier New" color=#003399>
Input.SelectAll;
align=left> face="Courier New" color=#003399>
Exit;
align=left> face="Courier New"
color=#003399>end;
align=center>
align=justify>В данном фрагменте
программы с помощью зарезервированных слов size=2> face="Courier New">try,
except face=Arial> и lang=en-us>end face=Arial> реализуется так
называемый защищённый блок. Такими блоками программист может
защитить программу от краха от ошибки.
align=center>
align=justify>После слова size=2> face="Courier New">try
ставится выражение, которое необходимо выполнить в программе.
В данном случае программа пробует с помощью функции
face="Courier New">StrToInt
преобразовать строковое
значение из текстового поля с именем face="Courier New" size=2>Input
в целое значение.
align=justify>
align=justify>Защита действует
следующим образом:
align=justify>Если при выполнении
операторов, расположенных после слова face="Courier New" size=2> lang=en-us>try, была
обнаружена ошибка, то выполняются операторы, расположены после
слова lang=en-us>except. Если
ошибка не обнаружена, то выполняются операторы, следующие
после слова lang=en-us>end. В данном
случае с помощью функции face="Courier New">ShowMessage
программа выводит сообщение с
указанным текстом, после чего программа выделяет содержимое
текстового поля и предлагает ввести ошибочное значение
заново.
align=justify>Ошибочным значением
может быть: строковое значение, дробное значение или вообще не
введённое значение.
align=justify>
Другой вариант обработки
исключительных ситуаций:
face="Courier New" size=4>
align=justify> lang=en-us>tryalign=justify> lang=en-us> 1>
align=justify> lang=en-us>finally
align=justify> lang=en-us> >
align=justify> lang=en-us>end;
align=justify>В данном случае lang=en-us>
выполнится в любом случае, но при ошибке в lang=en-us>
управление будет передано
>.
align=justify>Конструкцию size=2> face="Courier New">finally...end
удобно использовать, например,
при загрузке из файла изображения в face="Courier New" size=2> lang=en-us>TBitMap size=2>.
align=justify>Например:
face="Courier New" size=4>
align=justify> lang=en-us>procedure TForm1.Button1Click(Sender:TObject);
align=justify> lang=en-us>var
align=justify> lang=en-us> bitmap: TBitMap;
align=justify> lang=en-us>begin
align=justify> lang=en-us> bitmap :=
TBitMap.Create;
align=justify> lang=en-us> try
align=justify> lang=en-us>
bitmap.LoadFromFile('bitmap.bmp');
align=justify> lang=en-us>
Canvas.Draw(bitmap);
align=justify> lang=en-us> finally
align=justify> lang=en-us>
bitmap.Free;
align=justify> lang=en-us> end;
align=justify> lang=en-us>end;
align=justify>
align=justify>Вначале lang=en-us>bitmap инициируется с помощью конструктора
Create. Затем в теле программы lang=en-us>в bitmap загружается
изображение из файла. Даже при возникновении ошибки необходимо
вызвать деструктор класса с помощью метода lang=en-us>Free. Поэтому для этого используется
конструкция face="Courier New"> lang=en-us>finally...end face=Arial>.
align=justify>Иногда
программе необходимо самостоятельно вызвать исключение. Для
этого используется зарезервированное слово size=2>raise face=Arial>.
align=justify>Вообще, для обработки
исключительных ситуаций используется класс lang=en-us>TException, а также его многочисленные
потомки.
align=justify>Инициировать исключение можно
так:
align=justify> lang=en-us>try
align=justify> lang=en-us> x := StrToInt(st);
align=justify> lang=en-us> if x < 0 then raise
EAbort.Create('Число меньше нуля! lang=en-us>');
align=justify> lang=en-us>except
align=justify> lang=en-us> ShowMessage('Ошибка!!! lang=en-us>');
align=justify> lang=en-us>end;
size=4>
align=justify>В этом случае при ошибке
преобразования строки в число появится сообщение об ошибке, а
также при отрицательном числе программа вызывает собственное
исключение, при этом также появится сообщение об
ошибке.
align=justify>Подробную информацию об исключениях
вы можете получить в справке Delphi, а
также я могу проконсультировать вас, если вы отправите мне
письмо по адресу lang=en-us>grenkin@mail.ru