Использование объектов - еонтроллеров
Контроль текстового ввода
Как уже говорилось, основное назначение объектов-контролеров состоит в
контроле текстовой информации, вводимой пользователем с помощью объектов
TInputLine или их специализированных потомков. Для упрощения подключения
контролера в объекте TInputLine предусмотрен специальный метод SetValidator,
единственным параметром обращения к которому является ссылка на экземпляр
объекта-контролера. Таким образом, подключение контролера осуществляется в два
этапа: вначале инициируется экземпляр объекта-контролера, а затем вызывается
метод TInputLine.SetValidator для объекта, осуществляющего ввод данных.
Например:
var
InpLine: PInputLine;
Validator: PRangeValidator;
begin
{Создаем строку ввода}
InpLine := New(PInputLine,Init(...));
{Создаем объект-контролер}
Validator := New(PRangeValidator,Init(0,10));
{Связываем контролер с редактором}
InpLineA.SetValidator(Validator) ;
.....
end;
Можно объединить оба действия в одном операторе:
InpLine^.SetValidator(New(PRangeValidator,Init(0,10))
При работе совместно с объектом TInputLine контролер может активно
воздействовать на ввод пользователя. Это относится к объектам TFilterValidator и
TPXPicture-Validator: они контролируют ввод каждого символа и игнорируют нажатие
пользователем клавиши, если очередной символ не соответствует требуемому. Объект
TPXPictureValidator, кроме того, способен автоматически дополнять ввод
пользователя неспециальными символами шаблона. Если, например, шаблон задан
следующим образом:
InpLine^.SetValidator(New(PPXPictureValidator, Init('#/#/#',True)))
то нажатие пользователем любых клавиш, кроме цифровых, будет игнорироваться,
а сразу после нажатия первой (второй) цифровой клавиши в строке ввода появится
символ «/». Вставкой неспециальных символов шаблона управляет второй параметр
обращения к методу TPXPictureValidator.Init (True - разрешить вставку, False -
запретить).
Проверка других объектов
Хотя чаще всего для реализации текстового ввода Вы будете использовать объект
TInputLine или его специализированного потомка, не исключена возможность
проверки данных, подготовленных другими видимыми объектами. Для этого в поле
Options любого видимого элемента предусмотрен бит ofValidate, единичное
состояние которого приведет к тому, что при каждой потере видимым элементом
фокуса ввода будет вызываться его метод Valid, который он наследует от TView.
Перекрыв этот метод, Вы сможете обратиться к любому объекту-контролеру для
проверки данных.
Реализация нестандартного контроля
Возможно, Вам понадобится сконструировать собственный объект-контролер. В
этом случае Вы должны помнить, что за контроль отвечают четыре метода базового
объекта TValidator: Valid, IsValidInput, IsValid и Error, причем абстрактные
методы Is Valid и Error перекрываются в потомках, вызываются другими методами
объекта-контролера и не предназначены для вызова извне.
Метод Valid получает строку, введенную пользователем, осуществляет ее
контроль и возвращает True или False в зависимости от результатов контроля (True
означает правильный ввод). Метод IsValidlnput также получает строку символов
ввода, однако, в отличие от Valid, он получает ее после каждого изменения пользователем
входной строки. Метод IsValidlnput имеет два параметра обращения:
Function TValidator.IsValidlnput(var S: String; SuppressFill: Boolean):
Boolean
Параметр SuppressFill указывает, должен ли метод автоматически форматировать
строку перед ее проверкой. Если этот параметр имеет значение True, метод должен
дополнить подготовленный пользователем ввод S нужными в этом месте символами и
только после этого производить контроль. Поскольку параметр S определен как
параметр-переменная, метод может вставлять дополнительные символы
непосредственно в строку ввода, но ни в коем случае не должен удалять ошибочно
введенные символы из нее. Из всех стандартных контролеров только
TPXPictureValidator использует SuppressFill = True.I