Главная arrow Язык программирования Pascal arrow Турбо Паскаль Начальный курс В.В.Фаронов arrow 22.1. Типы объектов-контролеров Турбо Паскаль В.В. Фаронов

22.1. Типы объектов-контролеров Турбо Паскаль В.В. Фаронов

Объект-контролер обычно связывается со строкой ввода TInputLine и активизируется при выполнении метода TInputLine.Valid. Получив управление, контролер осуществляет необходимую проверку данных и блокирует завершение ввода, если обнаружена ошибка. В ObjectWindows входят пять объектов-контролеров, являющихся наследниками абстрактного объекта TValidator и отличающихся алгоритмом проверки данных.
22.1.1. TPXPictureValidator
Объект TPXPictureValidator проверяет введенную пользователем строку на соответствие некоторому шаблону ввода. Шаблон ввода определяется с помощью специальных символов, подобно тому, как задается допустимый ввод в базе данных Paradox корпорации Borland. В шаблоне можно использовать следующие специальные символы:

Символ  

Назначение

#

Любая цифра

?

Любая буква

@

Любой символ (буква, цифра или специальный символ)

&

Любая буква с автоматическим преобразованием в верхний регистр

!

Любой символ с автоматическим преобразованием букв в верхний регистр

*

Повторение следующего символа произвольное число раз

;

Следующий символ - не управляющий

[]

Заключенная в скобки последовательность символов может отсутствовать

,

Разделение вариантов

{}

Создание группы

Любой другой символ шаблона представляет сам себя, т.е. не является управляющим. Символ «;», предшествующий специальному символу, отменяет его специальное назначение. Чтобы в шаблон вставить собственно символ «;», его нужно удвоить.
Перечисленные символы позволяют формировать шаблоны любой сложности. Например:
 - ### - трехзначное число; примеры правильного ввода: 123, 566, 080; неправильный ввод: 12 (нет одной цифры), -12 (первый символ - не цифра);
 - *# - число с произвольным количеством цифр; допустимый ввод: 1, 12, 12345678987654321; неправильный ввод:-12, 0334А;
 - [+,-]*#- произвольное целое число; допустимый ввод: +123, -56, 7890; недопустимый ввод:+-123, 1.23, 12345Е+02;
 - {#[#]}-{#[#]}-{##[##]}- дата в формате ДД-ММ-ГТ; допустимый ввод: 1-2-33, 01-02-1933; недопустимый ввод: 1/2/33, 1 фев 33;
 - #;**#- число в диапазоне 0...9 умножается (символ *) на произвольное положительное целое число; правильный ввод: 2*2, 3*12345; неправильный ввод: 2/2, 123*12345.
22.1.2. TFilterValidator
Этот объект проверяет все введенные пользователем символы на их принадлежность к набору допустимых символов. Если очередной вводимый символ не принадлежит эталонному множеству, он игнорируется и при наборе просто не появляется в строке ввода. Таким образом, объект TFilterValidator действительно фильтрует вводимую строку, удаляя из нее неправильные символы. Например, экземпляр объекта
MyFilter := New(PFilterValidator,Init(['0'..'9']))
выбирает из ввода только цифры.
22.1.3. TRangeValidator
Объект TRangeValidator порожден от TFilterValidator. Он преобразует символьный ввод в целое число и проверяет, находится ли оно в диапазоне указанных значений Min...Max. Его метод IsValid вернет значение True только в том случае, когда, во-первых, пользователь введет правильное число, и, во-вторых, это число будет принадлежать нужному диапазону. Например, объект
MyRange := New(PRangeValidator,Init(0,100))
позволяет вводить числа в диапазоне от 0 до 100 включительно.
22.1.4. TLookupValidator
Абстрактный объект TLookupValidator предназначен для контроля соответствия введенной пользователем строки набору эталонных строк. Фактически он модифицирует поведение базового объекта TValidator на случай, когда проверяется произвольная текстовая строка. В его потомках должен перекрываться метод Lookup, осуществляющий нужный контроль и возвращающий True только в том случае, когда подготовленная пользователем строка соответствует одному из желаемых значений. Например, с помощью объекта
type
TMyLookupValidator = object(TLookupValidator)
Function Lookup(const S: String): Boolean; Virtual;
end;
Function TMyLookupValidator.Lookup;
const
Text1 = 'Turbo';
Text2 = 'Pascal';
begin
Lookup := (S=Text1) or (S=Text2) or (S=Textl+' '+Text2)
end;
можно потребовать от пользователя ввода только одной из трех возможных строк: Turbo, Pascal или Turbo Pascal.
22.1.5. TStringLookupValidator
Этот объект порожден от TLookupValidator и сравнивает введенную пользователем строку с набором допустимых строк, хранящихся в отсортированной коллекции. Чтобы объект осуществлял сравнение с нужным набором строк, он инициируется следующим образом:
var
MyCollection: PStringCollection; MyStrVal: PStringLookupValidator;
begin
{Создаем коллекцию строк}
MyCollection := New(PStringCollection,Init(1,1));
{Наполняем коллекцию - размещаем строки в куче}
MyCollection^.Insert(NewStr('Турбо'));
MyCollection^.Insert(NewStr('Паскаль')) ;
{Создаем объект-контролер}
MyStrCol := New(PStringLookupValidator,Init(MyCollection))
end;