Справочник по компонентам Delphi. Часть 2
Страница 12. Компонент 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.

 
« Предыдущая статья   Следующая статья »