В библиотеке VCL есть достаточно удобный компонент для ввода форматированного текста – MaskEdit. При неправильном вводе текста это компонент выдаёт сообщение об ошибке «Invalid input value. Use Escape key to abandon changes».
К сожалению, в MaskEdit отсутствуют штатные средства для редактирования этого сообщения. Поэтому, для того чтобы его изменить (например, написать русский текст), необходимо перехватить и обработать соответствующее исключение. Но, сделать это не так просто.
Дело в том, что метод ValidateError, в котором возбуждается данное исключение, является защищённым (protected)и описан в классе TCustomMaskEdit. Этот класс предок TMaskEdit.
Следовательно, для того чтобы как-то повлиять на обработку данного исключения, нужно создать класс наследник TMaskEdit и переопределить в нём метод ValidateError.
Объявление класса наследника выглядит достаточно просто.
1 2 3 4 5 |
type TMaskEdit = class(Vcl.Mask.TMaskEdit) Protected procedure ValidateError; override; end; |
Далее реализуем переопределяемый метод.
Обработку исключения выполним с помощью стандартной конструкции try… except. Для того, чтобы возбудить исключение, вызовем в ,блоке перехватывающем исключения метод класса родителя. В блоке обрабатывающем исключения выведем тот текст сообщения об ошибке, который нам необходим.
1 2 3 4 5 6 7 8 |
procedure TMaskEdit.ValidateError; begin try inherited; except ShowMessage('Неправильный ввод'); end; end; |
Теперь при неправильном вводе текста в компоненте MaskEdit будет отображаться написанное нами сообщение об ошибке.
Добавить комментарий