Справочник по компонентам Delphi. Часть 2 - Компонент TMaskEdit

ОГЛАВЛЕНИЕ

Компонент 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.