На этом шаге мы рассмотрим компонент TMaskEdit.
Компонент TMaskEdit (Ввод по маске) используется как и компонент TEdit - для ввода и хранения строки текста. Но в отличие от поля ввода, ввод по маске позволяет создать удобный фильтр (маску), на основании которого будут редактироваться и упорядочиваться вводимые символы и автоматически формироваться заданные разделительные символы. Маска задается в свойстве EditMask и содержит строку специальных символов для редактирования и форматирования вводимых символов.
Строка маски состоит из трех полей, разделенных точкой с запятой. Первое поле представляет саму маску, второе поле определяет режим сохранения литералов маски, как части вводимых данных и третье поле используется для символа, который определяет не вводимый символ.
Для первого поля маски используются символы форматирования, перечисленные ниже.
Символ | Описание |
---|---|
! | Если символ "!" присутствует, то в строке ввода подавляются все начальные символы, не разрешенные к вводу, если символа "!" нет, то подавление происходит в конце строки. |
> | Символы, следующие за символом ">", переводятся в верхний регистр, пока не встретится символ "<". |
< | Символы, следующие за символом "<", переводятся в нижний регистр, пока не встретится символ ">". |
<> | После этих стоящих вместе символов не происходит проверки регистра, и ввод производится в соответствии с регистром, заданным пользователем. |
\ | Символы, следующие за этим символом, рассматриваются как литералы (символьные константы). Используйте этот символ для представления специальных символов, используемых в маске, как литералы для данных. |
L | В данной позиции должна быть введена только буква. Для США это А-Z, а-z. |
l | В данной позиции желательно ввести букву, хотя это и не обязательно. |
A | В данной позиции должна быть введена только буква или цифра. Для США это А-Z, а-z, 0-9. |
a | В данной позиции желательно ввести букву или цифру, хотя это и не обязательно. |
C | В позицию необходимо ввести любой символ. |
c | В позицию можно ввести любой символ, хотя это и не обязательно. |
0 | В позицию должна вводиться только цифра. |
9 | В позицию можно ввести цифру, хотя это и не обязательно. |
# | В позицию можно ввести цифру, знак "+" или " - ", хотя это и не обязательно. |
: | Используется для разделения часов, минут и секунд при вводе времени. Если региональные установки в Control Panel используют другой символ, то вводится именно он. |
/ | Используется для разделения месяцев, дней и лет в датах. Если региональные установки в Control Panel используют другой символ, то вводится именно он. |
; | Символ ";" используется для разделения полей маски. |
_ | Символ "_" автоматически вставляет пробелы в текст. |
Любой символ, который не приведен в таблице, может использоваться в первой части маски как литерал, т.е. он будет воспроизводиться точно так же, как введен. Такие символы вставляются автоматически, и курсор проскакивает их в процессе ввода. Специальные символы могут использоваться как литералы, если перед ними стоит символ "\" (обратная черта).
Второе поле маски представляет символ, который определяет, должны ли включаться литералы маски как часть текста. Например, следующая маска может использоваться для ввода телефонных номеров с дополнительным кодом города.
(000)_000-0000;0;*
Символ 0 во втором поле говорит о том, что свойство Text будет содержать 10 цифр вместо тех 14, которые будут отображаться при вводе данных. Эти параметры могут быть изменены в редакторе для свойства EditMask или программно после изменения константы MaskNoSave.
В третьем поле маски находится символ, который отображается в поле ввода для пробелов. По умолчанию это тот же самый символ, что используется как специальный символ маски для пробелов.
Не используйте много символов, каждый символ маски представляет один байт. Для ввода многобайтовых символов используйте специальные символы L, 1, А, а, C или с при этом специальные символы должны быть удвоены. Например, LL может использоваться для двух однобайтовых символов или для одного двухбайтового символа. Все литеральные символы должны быть однобайтовыми.
Используем небольшую программу для изучения свойств TMaskEdit.
Разместим на форме компоненты: TMaskEdit и TLabel. В программе для обработчика события OnChange компонента TMaskEdit введем следующий текст:
procedure TForm1.MaskEdit1Change(Sender: TObject); begin Label1.Caption:=MaskEdit1.Text; end;
Для компонента MaskEdit1 выберем свойство EditMask (рис.1.).
Рис.1.Редактор маски и основная форма
В редакторе маски в строку InputMask вводится необходимая маска. Справа расположен список примеров, слева внизу расположена строка TestInput, в которой можно протестировать маску. Маски сохраняются в файлах с расширением .dem, и их можно выбирать после щелчка на кнопке Masks... в редакторе маски.
Окно приложения при запуске отображается на рис.2.
Рис.2.Окно приложения при запуске
Примеры применения маски ввода:
Шаблон с маской | Вид в редакторе | Свойство EditText | Свойство Text |
---|---|---|---|
(095)000-0000;0;x | (095)xxx-xxxx | 1234567 | 1234567 |
(095)000-0000;1;x | (095)xxx-xxxx | 1234567 | (095)123-4567 |
(095)\0\00-0000;1;. | (095)00.-…. | 12345 | (095)001-2345 |
На следующем шаге мы рассмотрим компонент TStringGrid.