18.2.3. TMaskEdit - специальный редактор

Специализированный редактор TMaskEdit предназначен для ввода текста, соответствующего некоторому шаблону, задаваемому свойством EditMask: String. Если это свойство не задано, TMaskEdit работает как обычный редактор TEdit. Свойство IsMasked: Boolean доступно только для чтения и содержит True, если строка шаблона задана. Свойство EditText: string содержит текст до наложения на него маски шаблона (т. е. то, что ввел пользователь), а свойство Text: String может (в зависимости от шаблона см. ниже) содержать либо исходный текст, либо результат наложения на него маски шаблона.

Шаблон состоит из трех частей, отделенных друг от друга символами “;”. Первая часть задает маску ввода, вторая - это символ “О” или “I”, определяющий, записывается ли в Text результат наложения маски или исходный текст (“О” - исходный текст). В третьей части указывается символ, который в окне редактора будет стоять в полях, предназначенных для ввода символов (текст в редакторе может содержать символы маски; например, для ввода семизначного номера телефона текст в начале ввода может выглядеть так: (095)ХХХ-ХХ-ХХ где доступные для ввода пользователя поля указаны символом “X” -последним символом в шаблоне).

Маска состоит из описателей полей ввода, специальных символов и литералов. Описатель указывает, какой именно символ может ввести пользователь в данное поле (описатель всегда описывает поле единичной длины, т. е. рассчитанное на ввод одного символа). Литерал вставляется в текст, показываемый в окне редактора, но при вводе курсор перескакивает через литерал и не дает пользователю возможности изменить его. Литералами считаются любые символы, кроме описателей полей и специальных символов, а также любой символ, которому предшествует символ “\”. Специальные символы формируют дополнительные указания редактору.

Описатели полей ввода представлены в следующей таблице:

Символ Поле...
L должно содержать букву с может содержать любой символ 1 может содержать букву 0 должно содержать цифру А должно содержать букву или цифру 9 может содержать цифру а может содержать букву или цифру # может содержать цифру, “+”, “-” С должно содержать любой символ

Специальные символы:
\ | Следующий символ - литерал. Позволяет вставить в маску литералы из символов описателей полей ввода и специальных символов
: | На это место вставляется символ-разделитель Windows для часов, минут, секунд
/ | На это место вставляется символ-разделитель Windows для полей даты
; | Разделитель частей шаблона
! | Подавляет все ведущие пробелы
> | Все следующие за ним поля ввода преобразуют буквы к заглавным
< | Все следующие за ним поля ввода преобразуют буквы к строчным
<> | Отменяет преобразование букв

Примеры:

Маска | Вид в редакторе | Свойство EditText | Свойство Text
(095)000-0000;0;х | (095)ххх-хххх | 123456 | 1234567
(095)0000000;1;х | (095)ххх-хххх | 7 12345 | (095)1234567
(095)\0\00-0000;1; . | (095)00.-.... | 1234567 | (095)0012345

Если не все требуемые поля ввода заполнены и компонент лишился фокуса ввода, возникает исключительная ситуация edbe-ditError, на экран выводится окно с сообщением и после закрытия окна курсор устанавливается к месту, где закончился правильный ввод.

Остальные свойства компонента повторяют соответствующие свойства TEdit. В частности, установка в свойство passwordchar любого символа, кроме #0, обеспечивает секретность ввода: в этом случае все вводимые в компоненте символы заменяются символом PasswordChar.