- Обработка строк
- Строковые данные в BCB и методы их обработки
- Отображение строк в поле метки
- Использование компонента TextBox (VB)
- Использование объекта MaskEdBox (VB)
- Специфика компонента RichTextBox (VB)
- Использование компонент типа TEdit (BCB и Delphi)
- Специфика работы с объектом MaskEdit в средах BCB и Delphi
- Объект TextBox в многострочном режиме
Специфика работы с объектом MaskEdit в средах BCB и Delphi
Опубликовано admin в Сб, 01/30/2010 - 20:18
Объект MaskEdit предназначен для ввода символьных строк по шаблону, заданному значением свойства EditMask. В отличие от среды VB набор шаблона и установка символа замещения (Character for Blanks) осуществляется здесь в специальном диалоговом окне (рис. 3.10). Здесь же вам продемонстрируют вид окна ввода, каким он будет в работающем приложении. Дополнительные удобства заключаются в возможности просмотреть и выбрать типовые маски для ввода наиболее распространенных данных — телефонов, кодов адреса, дат, значений времени и т.п. Галочка слева от метки Save Literal Characters позволяет считывать введенный код из свойства Text, включая литеральные символы маски. Если галочка в этой строке отсутствует, то считанное значение содержит только набиравшиеся символы. Если содержимое окна ввода извлекается из свойства EditMask, то вместе с набранными символами извлекаются и литералы независимо от метки в окне Input Mask Editor. Маску ввода можно извлечь и из файла с расширением dem. Для этого в редакторе маски имеется кнопка Masks… .

Рис 3.10. Окно редактора маски ввода
Управляющие символы маски здесь несколько иные, чем в среде VB (см. табл. 3.3).
Таблица 3.3
| Управляющий символ маски | Символ, который должен или может быть набран в данной позиции |
| ! | Если это символ представлен в шаблоне, то недовведенные необязательные символы превращаются в лидирующие пробелы. В противном случае недостача восполняется пробелами в конце введенной строки. |
| > | Все буквы в разрешенных позициях, начиная с данной, будут заменяться большими до тех пор, пока не встретится символ <. |
| < | Все буквы в разрешенных позициях, начиная с данной, будут заменяться малыми до тех пор, пока не встретится символ >. |
| <> | Блокировка замены вводимых букв кодами другого регистра |
| \ | Следующий символ считать литералом, даже если он совпадает с одним из управляющих. |
| L | Буква A-Z, a-z (ввод обязателен) |
| l | Буква A-Z, a-z (ввод не обязателен) |
| A | Буква или цифра (ввод обязателен) |
| a | Буква или цифра (ввод не обязателен) |
| C | Любой символ (ввод обязателен) |
| c | Любой символ (ввод не обязателен) |
| 0 | Цифра (ввод обязателен) |
| 9 | Цифра (ввод не обязателен) |
| # | Цифра, знак + или — (ввод не обязателен) ??? |
| : | Разделитель компонент времени — часов, минут, секунд (возможна замена в соответствии с настройкой операционной системы) |
| / | Разделитель компонент даты — день, месяц, год (возможна замена в соответствии с настройкой операционной системы) |
| ; | Разделитель трех компонент маски |
| _ | Символ подчерк вставляет пробелы в текст |
Маска ввода, вообще говоря, представлена тремя компонентами, которые разделяются точкой с запятой. Первая часть — собственно маска. Вторая часть может быть равна 0 или 1 в зависимости от того, сохраняются или не сохраняются литералы в значении свойства Text. Третья часть состоит из символа замен, которым отображаются разрешенные позиции в поле ввода.
Алгоритм работы объекта MaskEdit отработан гораздо лучше, чем в среде VB. Курсор всегда переходит в нужную позицию, даже если вводимые символы содержатся среди литералов шаблона.
Ниже приводится текст обработчика события OnChange, которое происходит при вводе или изменении каждого символа в разрешенных позициях окна MaskEdit. Каждый раз при возникновении такого события содержимое окна ввода переносится в заголовок метки Label1, и для этого понадобилась всего одна строка программы. Вид окна приложения в процессе работы показан на рис. 3.11. Для сокращения времени набора код города включен в качестве литералов маски.
Приложение 3_16 (BCB). Ввод номера телефона
void __fastcall TForm1::MaskEdit1Change(TObject *Sender)
{
Label1->Caption=MaskEdit1->Text;
}

Рис. 3.11. Вид окна в процессе набора номера телефона
Приложение 3_17 (Delphi). Ввод номера телефона
В приводимом ниже приложении добавлен обработчик события OnKeyPress, который, принимая код клавиши <Enter>, производит очистку поля ввода. Однако засылка пустой строки в свойство Text восстанавливает в окне ввода маску, обеспечивая тем самым подготовку к вводу следующего номера телефона. Точно такая же "очистка" произойдет и в случае, когда вы, выделив все содержимое окна, нажмете клавишу <Delete>.
procedure TForm1.MaskEdit1Change(Sender: TObject);
begin
Label1.Caption:=MaskEdit1.Text;
end;
procedure TForm1.MaskEdit1KeyPress(Sender: TObject; var Key: Char);
begin
if Key=Chr(13) then MaskEdit1.Text:='';
end;
