Иллюстрированный самоучитель по Турбо Паскалю
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.
TFilterValidator
Этот объект проверяет все введенные пользователем символы на их
принадлежность к набору допустимых символов. Если очередной вводимый символ не
принадлежит эталонному множеству, он игнорируется и при наборе просто не
появляется в строке ввода. Таким образом, объект TFilterValidator действительно
фильтрует вводимую строку, удаляя из нее неправильные символы. Например,
экземпляр объекта
MyFilter := New(PFilterValidator,Init(['0'..'9']))
выбирает из ввода только
цифры.
TRangeValidator
Объект TRangeValidator порожден от TFilterValidator. Он преобразует
символьный ввод в целое число и проверяет, находится ли оно в диапазоне
указанных значений Min...Max. Его метод IsValid вернет значение True только в
том случае, когда, во-первых, пользователь введет правильное число, и,
во-вторых, это число будет принадлежать нужному диапазону. Например, объект
MyRange := New(PRangeValidator,Init(0,100))
позволяет вводить числа в
диапазоне от 0 до 100 включительно.
TLookupValidator
Абстрактный объект TLookupValidator предназначен для контроля соответствия
введенной пользователем строки набору эталонных строк. Фактически он
модифицирует поведение базового объекта TValidator на случай, когда проверяется
произвольная текстовая строка. В его потомках должен перекрываться метод Lookup,
осуществляющий нужный контроль и возвращающий True только в том случае, когда
подготовленная пользователем строка соответствует одному из желаемых значений.
Например, с помощью объекта
type
TMyLookupValidator = object(TLookupValidator)
Function Lookup(const S: String): Boolean; Virtual;
end;
Function TMyLookupValidator.Lookup;
const
Textl = 'Turbo';
Text2 = 'Pascal';
begin
Lookup := (S=Textl) or (S=Text2) or (S=Textl+' '+Text2)
end;
можно потребовать от пользователя ввода только одной из трех возможных строк:
Turbo, Pascal или Turbo Pascal.
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;