Символы и строки
Компонент TMaskEdit
На той же вкладке Additional находится еще один полезный компонент для ввода строк - TMaskEdit:
Этот компонент предназначен для ввода текста по определенным шаблонам - маскам. Когда пользователю нужно будет ввести в этот компонент какой-то текст, он будет вынужден вводить его именно в том виде, в котором нам нужно.
Установите TMaskEdit на форму и посмотрите на его свойства в Инспекторе объектов. В принципе, все свойства нам знакомы. Интерес вызывает лишь одно свойство EditMask. Это сложное раскрывающееся свойство, то есть, щелкнув по кнопке с тремя точками правее свойства, можно его раскрыть:
Когда оно раскрыто, мы видим следующую картину:
В строке "Маска ввода" мы можем указать маску, которая будет влиять на формат заполняемой пользователем строки. В маске можно применять некоторые символы, вводимые в каждой позиции, и символы, добавляемые самой маской. Маска может иметь следующие символы:
0 | В данной позиции должна быть цифра. Если пользователь введет не все цифры маски, будет создана исключительная ситуация, и он не сможет продолжать работу, не заполнив все положенные цифры. Если такая ситуация возникла у вас во время тестового выполнения программы, можете закрыть программу командой "Запуск->Сбросить отладчик". |
9 | В данной позиции может быть либо цифра, или ничего. |
# | В данной позиции может быть знак "+", "-", цифра, или ничего. |
L | В данной позиции должна быть буква. |
l | В данной позиции должна быть буква или ничего. |
A | В данной позиции должна быть буква или цифра. |
a | В данной позиции должна быть буква или цифра, или ничего. |
C | В данной позиции должен быть любой символ. |
c | В данной позиции должен быть любой символ, или ничего. |
Кроме того, в маске можно использовать различные разделители:
: | Обычно применяется для разделения часов, минут, секунд. |
/ | Обычно применяется для разделения года, месяца, дня. |
- | Обычно применяется для разделения цифр, например, в телефонных номерах. |
Примеры масок:
- 999-99-99 (телефон)
- 99/99/9999 (дата)
- 00:00:00 (время)
- 999999,00 р. (денежный формат)
Давайте укажем в строке "Маска ввода" маску телефона:
000-00-00
Использование нулей в качестве маски означает, что в этом месте обязательно должна быть цифра. Это разумно, ведь иначе номер телефона будет неполный, и мы не сможем дозвониться до абонента. Символы "-" служат разделителями, и добавляются автоматически. Введите маску, нажмите "ОК", сохраните проект и запустите его на исполнение. Теперь мы сможем вводить в маску только цифры. Причем если мы введем не все цифры, и попытаемся выйти из строки редактирования, сгенерируется ошибка. Нам придется либо вернуться и заполнить номер до конца, либо остановить программу, сбросив отладчик.
В Редакторе масок помимо строки "Маска ввода" есть и другие строки. В строке "Символы для пробелов" мы можем указать символ, который будет выводиться маской в том месте, где пользователь должен будет что-то ввести. По умолчанию, это символ подчеркивания "_". Пользователь будет видеть пустую маску телефона, как
___-__-__
Мы можем использовать и другие символы для заполнения пробелов.
Ниже в Редакторе масок есть флажок "Сохранить литерал". Этот флажок включает или выключает возможность сохранения в тексте символов-разделителей. Если флажок включен, то в тексте сохранятся символы маски вместе с символами-разделителями, например:
123-45-67
Если флажок выключен, то в конечном тексте останутся только символы маски:
1234567
В строке "Тестовый ввод" мы можем опробовать полученную маску, не запуская программу на выполнение.
Итак, для нашего примера в строке "Маска ввода" укажите
000-00-00
В "Символы для пробелов" оставьте "_". Флажок "Сохранять литерал" пусть будет включен. Как только нажмете "ОК", свойство EditMask изменится, теперь в нем будет текст:
000-00-00;1;_
Как видите, значение этого свойства состоит из трех частей, разделенных точкой с запятой. Первая часть - это указанная нами маска. Во второй части может быть либо 0 (флажок "Сохранять литерал" выключен), либо 1 (флажок включен). В третьей части маски указывается символ для пробелов.
Таким образом, мы могли бы и не пользоваться Редактором масок, а указать маску вручную. Например, введя значение
00-00-0000 г.;1;_
мы создадим маску, где пользователь будет обязан ввести все цифры месяца, дня и года, где в тексте сохранятся символы-разделители "-", и где на месте пробелов будет знак подчеркивания. В результате, мы получим дату, например в таком виде: "11-11-2013 г.".