Страница 12 из 59 Компонент TMaskEdit TObject->TPersistent->TComponent->TControl—”TWinControl->TCustomEdit-> —>TCustomMaskEdit—^TMaskEdit Модуль MASK Страница Палитры компонентов Additional Этот специальный редактор допускает лишь ввод текста, соответствующего заданному программистом шаблону, например, паролей, регистрационных номеров, дат и других данных, которые имеют определенный формат представления. Шаблон ввода в виде строки содержится в свойстве: (РЬ) property EditMask: string; Если он не определен, TMaskEdit работает как обычный редактор. Свойство (Ro) property IsMasked: Boolean; показывает, определен ли шаблон редактирования (значение EditMask не равно пустой строке). "Черновой" текст, содержащий введенные пользователем символы, соответствует свойству: property EditText: string; В то же время отформатированный (наложенный на шаблон) текст содержится в свойстве Text. Опишем правила, применяемые при составлении шаблона. Шаблон состоит из трех частей, разделяемых символом ';' или другим, заменяющим его. Первая часть является обязательной — она определяет собственно маску ввода. Каждому символу в поле ввода редактора соответствует специальный символ в маске, определяющий, что можно ввести на этом месте. Описатели маски ввода представлены в таблице: Символ маски | Означает, что на этом месте во вводимом тексте... | L | должна быть буква (A-Z, a-z, А-Я, а-я). | I | может быть буква. | А | должен быть буквенно-цнфровой символ. | а | может быть буквенно-цифровой символ. | С | должен быть любой символ ASCII. | с | может быть любой символ ASCII. | 0 | должна быть любая цифра. | 9 | может быть любая цифра. | # | может быть любая цифра или знаки '+', •-'. | "Должен" означает, что пользователь обязан ввести в поле соответствующий символ, "может" — что не обязан. Например, шаблон "LLOO" обязывает пользователя ввести пароль из двух букв и двух цифр, a "LL99" — из двух букв и не более двух цифр. Кроме описателей полей ввода, в шаблоне могут быть литералы и другие форматирующие символы. Литералами будем называть символы, которые появляются при отображении строки ввода, но не могут изменяться пользователем и предназначены только для ее оформления. Перед литералом должен стоять символ 'V. Типичный пример — ввод телефонных номеров. Для семизначного номера с возможностью ввода междугороднего кода нужен шаблон "!\(999\)000-0000;1;_". Тогда код города (если он есть) в отформатированном тексте будет заключен в скобки. Специальные символы приведены в следующей таблице: Символ | Значение | \ | Символ, непосредственно предшествующий литералу. | | Разделитель для часов, минут и секунд при вводе времени. | / | Разделитель для дней, месяцев и лет при вводе даты. | \ | Разделитель полей в маске. | ' | Символ определяет подавление пробелов: если он есть в маске (в любом месте), в выходном тексте подавляются пробелы перед текстом; в противном случае — идущие после текста. | > | Символ, после которого все вводимые буквы преобразуются к верхнему регистру. | < | Символ, после которого все вводимые буквы преобразуются к нижнему регистру. | о | После этой пары символов преобразование регистров отменяется. | - | Пустое поле при вводе (отображается как пробел). Курсор не будет останавливаться в этой позиции. | Вторая часть шаблона — это символ '0' или '!', определяющий, записываются ли литералы в обработанный текст (свойство Text). При 0 символы опускаются. Использование такого компонента при работе с базами данных дает возможность экономии места. Например, пользователь ввел цифры 1234567. Тогда при действующем шаблоне "999\-99\-00;1;_" свойство Text будет равно "123-45-67", а для шаблона "999\-99\-00;0;_" - "1234567". Третья часть содержит символ, который будет показываться в полях, предназначенных для ввода. Например, шаблон для ввода номеров машин "L 00\-00 LL;1;X" будет выглядеть как "X ХХ-ХХ XX". По умолчанию этот символ определяется значением константы DefaultBlank(cM. ниже). Вторая и третья части шаблона могут отсутствовать. Синтаксис шаблона может быть изменен за счет переопределения программистом специальных символов '_'> ';' и '0'. Для этого нужно изменить определенные в модуле Mask константы: const DefaultBlank: Char = '_'; MaskFieldSeparator: Char = ';'; MaskNoSave: Char = '0'; Для ввода шаблонов в Delphi есть довольно удобный специальный редактор, содержащий некоторые полезные образцы. К сожалению, в этой версии в нем есть ошибка — при вводе маски он не всегда сразу воспринимает введенные изменения. В этом случае еще раз компилируйте создаваемое приложение. Непосредственную проверку введенного текста осуществляет метод: procedure ValidateEdit; Он обычно вызывается при нажатии кнопки Default в модальной форме и при каждой утере фокуса редактором. При отсутствии введенных символов в тех местах, где они необходимы, возникает исключительная ситуация EDBEditError. Метод function GetTextLen: Integer; возвращает длину текста Text. Функции для форматирования текста Форматирование текста можно осуществить и без объекта класса TMaskEdit, при помощи описанных в модуле MASK функций: function FormatMaskText(const EditMask: string; const Value: string): string; — осуществляет форматирование строки Value по шаблону EditMask; function MaskGetMaskSave(const EditMask: string): Boolean; — возвращает значение True, если в обработанном тексте должны сохраняться литералы (соответствует значению второй части шаблона); function MaskGetMaskBlank(const EditMask: string): Char; — возвращает символ, который будет использоваться в шаблоне для заполнения (третья часть шаблона); function MaskGetFldSeparator(const EditMask: string): Integer; — возвращает положение разделителя, отделяющего первую часть шаблона от последующих. Если он отсутствует, функция возвращает значение -1. |