Logo Море(!) аналитической информации!
IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware
Бесплатный конструктор сайтов и Landing Page

Хостинг с DDoS защитой от 2.5$ + Бесплатный SSL и Домен

SSD VPS в Нидерландах под различные задачи от 2.6$

✅ Дешевый VPS-хостинг на AMD EPYC: 1vCore, 3GB DDR4, 15GB NVMe всего за €3,50!

🔥 Anti-DDoS защита 12 Тбит/с!

VPS в России, Европе и США

Бесплатная поддержка и администрирование

Оплата российскими и международными картами

🔥 VPS до 5.7 ГГц под любые задачи с AntiDDoS в 7 локациях

💸 Гифткод CITFORUM (250р на баланс) и попробуйте уже сейчас!

🛒 Скидка 15% на первый платеж (в течение 24ч)

Глава 13. Проверка допустимости данных

             ObjectWindows представляет  вам  несколько  гибких  способов
        проверки допустимости информации,  набираемой пользователем в уп-
        равляющем элементе редактирования,  путем связи объектов проверки
        допустимости с  объектами  управляющих  элементов редактирования.
        Использование объектов проверки допустимости облегчает добавление
        механизма   проверки   допустимости  к  существующим  приложениям
        ObjectWindows или для изменения способа проверки в поле его  дан-
        ных.

             Данная глава  охватывает следующие темы,  относящиеся к про-
        верке допустимости:

             * Три вид проверки допустимости данных.

             * Использование объектов проверки допустимости.

             * Как работает проверка допустимости.

             Проверка допустимости обрабатывается методом CanClose интер-
        фейсных объектов.  В  любой момент вы можете проверить содержимое
        любого конкретного управляющего элемента редактирования или экра-
        на данных,  вызвав метод CanClose объекта,  но ObjectWindows пре-
        дусматривает также механизм автоматизации  проверки  допустимости
        данных. В  большинстве случаев проверка допустимости данных прак-
        тически не требует от программиста никаких усилий.

                        Три вида проверки допустимости данных
        -----------------------------------------------------------------

             Существует три  различных типа проверки допустимости данных,
        и ObjectWindows поддерживает их по-разному.  Этими  тремя  видами
        являются:

             * Фильтрация ввода.

             * Проверка допустимости каждого элемента.

             * Проверка допустимости полных экранов.

             Заметим, что  эти  методы  не являются взаимно-исключающими.
        Ряд стандартных средств проверки допустимости могут комбинировать
        в одном механизме проверки допустимости различные методы.

             Важно запомнить,  что проверка допустимости выполняется объ-
        ектом проверки допустимости,  а не объектом управляющего элемента
        редактирования. Если вы уже создали для особого назначения специ-
        ализированный управляющий  элемент  редактирования,  то  возможно
        сдублировали  возможность,  встроенную в управляющие элементы ре-
        дактирования и их средства проверки допустимости.

             В разделе данной главы "Как работают средства  проверки  до-
        пустимости" описываются различные способы, с помощью которых объ-
        екты управляющего элемента редактирования автоматически  вызывают
        объекты проверки допустимости.

                                   Фильтрация ввода
        -----------------------------------------------------------------

             Простейший способ обеспечения включения в поле только допус-
        тимых данных состоит в обеспечении ввода пользователем только до-
        пустимых данных. Например, числовое поле ввода может быть ограни-
        чено вводом пользователем только цифровых данных.

             Объект фильтра проверки допустимости ObjectWindows представ-
        ляет общий механизм, ограничивающий вид символов, которые пользо-
        ватель может  вводить  в данном управляющем элементе редактирова-
        ния. Объекты проверки допустимости рисунков могут также контроли-
        ровать форматирование  и  типы  символов,  которые может набирать
        пользователь.

                          Проверка допустимости каждого поля
        -----------------------------------------------------------------

             Иногда удобно  гарантировать, чтобы пользователь обеспечивал
        для конкретного поля допустимый ввод перед переходом к следующему
        полю. Этот подход часто называют "проверкой допустимости по табу-
        ляции", поскольку переход в новое поле обычно выполняется по кла-
        више Tab.

             В качестве примера можно привести приложение, которое выпол-
        няет поиск в базе данных,  где пользователь вводит в поле некото-
        рые виды ключевой информации, а приложение отвечает на это считы-
        ванием соответствующей записи и фильтрацией  остальных  полей.  В
        таком случае  вашему приложению перед действием по клавише требу-
        ется проверка,  что пользователь набрал в этом ключевом поле пра-
        вильную информацию.

                         Проверка допустимости полных экранов
        -----------------------------------------------------------------

             Проверить допустимость полных экранов вы можете  тремя  раз-
        личными способами:

             * Проверкой допустимости режимных окон.
             * Проверкой допустимости при изменении фокуса.
             * Проверкой допустимости по запросу.

                       Проверка допустимости режимных окон

             Когда пользователь закрывает режимное окно, оно перед закры-
        тием автоматически проверяет допустимость всех своих  подобластей
        просмотра (если закрывающей командой не была cmCancel).  Для про-
        верки допустимости всех подобластей окно вызывает метод  CanClose
        каждой подобласти,  и если каждый из них возвращает True, то окно
        можно закрыть.  Если любая  из  подобластей  возвращает  значение
        False, то окно закрыть нельзя.

             Пока пользователь  не обеспечит допустимые данные,  режимное
        окно с недопустимыми данными можно только отменить.

                        Проверка допустимости по запросу

             В любой момент вы можете указать окну на необходимость  про-
        верки всех его подокон путем вызова метода CanClose.  CanClose по
        существу спрашивает окно "Если сейчас будет дана  команда  закры-
        тия, являются  ли  все  поля  допустимыми?"  Окно вызывает методы
        CanClose всех своих дочерних окон в порядке включения и возвраща-
        ет True, если все они возвращают значение True.

             Вызов CanClose  не  обязывает вас фактически закрывать окно.
        Например, вы можете вызвать CanClose, когда пользователь "нажима-
        ет" командную кнопку Save (Сохранение),  обеспечивая проверку до-
        пустимости данных перед их сохранением.

             Вы можете проверить любое окно (режимное или безрежимное)  и
        в любое  время.  Однако  автоматическую проверку допустимости при
        закрытии имеют только режимные окна.  Если вы используете  безре-
        жимные окна ввода данных,  то нужно обеспечить,  чтобы приложение
        перед выполнением действий с введенными  данными  вызывало  метод
        CanClose окна.

                 Использование механизма проверки допустимости данных
        -----------------------------------------------------------------

             Использование объекта проверки допустимости данных с  управ-
        ляющим элементом редактирования требует двух шагов:

             * Построение объекта проверки допустимости.
             * Присваивание  объекта  проверки  допустимости управляющему
               элементу редактирования.

             После того,  как вы построите объект проверки допустимости и
        свяжите его с управляющим элементом редактирования, вам не потре-
        буется взаимодействовать с ним непосредственно.  Управляющий эле-
        мент редактирования знает,  когда вызывать методы проверки допус-
        тимости и в какие моменты.


                      Построение объектов проверки допустимости
        -----------------------------------------------------------------

             Так как объекты проверки допустимости не являются интерфейс-
        ными объектами,  их конструкторам  требуется  только  информация,
        достаточная для установки критерия проверки допустимости.  Напри-
        мер, объект проверки допустимости числового диапазона воспринима-
        ет два параметра - минимальное и максимальное значения в допусти-
        мом диапазоне:

             constructor TRangeValidator.Init(AMin, AMax: Integer);

                       Добавление к управляющим элементам
                  редактирования средств проверки допустимости
        -----------------------------------------------------------------

             Каждый управляющий элемент редактирования имеет поле с  име-
        нем Validator,  установленное  по умолчанию в nil,  которое может
        указывать на объект проверки допустимости. Если вы не присваивае-
        те объекта полю Validator,  то управляющий элемент редактирования
        ведет себя так,  как описано в Главе 12. После присваивания с по-
        мощью вызова SetValidator объекта проверки допустимости управляю-
        щий элемент редактирования автоматически проверяется им при обра-
        ботке  основных  событий и при самом вызове для проверки допусти-
        мости.

             Обычно, как  показано  ниже,  объект  проверки  допустимости
        строится и присваивается в одном операторе:

             .
             .  { создание трехсимвольного управляющего элемента редакти-
             .    рования }
             Ed := New(PEdit, Init(@Self, id_Me, '', 10, 10, 50, 30, 3,
                        False));
             Ed^.SetValidator(New(PRangeValidator, Init(100, 999)));
             .
             .
             .

                          Как работает проверка допустимости
        -----------------------------------------------------------------

             В ObjectWindows предусмотрено несколько видов объектов  про-
        верки допустимости,  которые  должны охватывать большинство ваших
        потребностей по проверке данных.  Из абстрактных  типов  проверки
        допустимости вы  можете  также  построить свои собственные произ-
        водные типы.

             В данном разделе освещаются следующие темы:

             * Виртуальные методы объекта проверки допустимости.
             * Стандартные типы объекта проверки допустимости.

                         Методы объекта проверки допустимости
        -----------------------------------------------------------------

             Каждый объект проверки допустимости наследует от абстрактно-
        го объектного типа TValidator  четыре  важных  метода.  Различным
        образом  переопределяя  эти методы,  наследующие объекты проверки
        допустимости выполняют свои конкретные задачи по  проверке.  Если
        вы собираетесь модифицировать стандартные объекты проверки допус-
        тимости или написать собственные объекты  проверки  допустимости,
        то нужно понимать, что делает каждый из этих методов и как их ис-
        пользуют  управляющие элементы редактирования.

             Этими четырьмя методами являются следующие:

             * Valid

             * IsValid

             * IsValidInput

             * Error

             Единственными методами,  вызываемыми вне  объекта,  являются
        Valid и IsValidInput.  Error и IsValid - единственные методы, вы-
        зываемые другими методами объекта проверки допустимости.

                             Проверка допустимости данных
        -----------------------------------------------------------------

             Основным внешним интерфейсом с объектами  проверки  допусти-
        мости данных является метод Valid. Аналогично методу CanClose ин-
        терфейсных объектов,  Valid представляет собой булевскую функцию,
        которая возвращает  значение True,  если переданная ей строка со-
        держит допустимые данные. Один из компонентов метода CanClose уп-
        равляющего  элемента редактирования является вызов метода Valid с
        переданным ему текущим текстом управляющего элемента редактирова-
        ния.

             При использовании  средств проверки допустимости с управляю-
        щими элементами редактирования вам никогда не требуется  вызывать
        или переопределять метод Valid объекта проверки допустимости.  По
        умолчанию Valid  возвращает  True,  если  возвращает  True  метод
        IsValid. В противном случае для уведомления пользователя об ошиб-
        ке и возврата значения False вызывается Error.

                                Проверка полной строки
        -----------------------------------------------------------------

            Объекты проверки  допустимости  содержат  виртуальный   метод
        IsValid, который  воспринимает в качестве единственного аргумента
        строку и возвращает True,  если  строка  представляет  допустимые
        данные. IsValid  - это метод,  который выполняет фактическую про-
        верку допустимости,  так что если вы создаете собственные объекты
        проверки допустимости, то почти всегда переопределяете IsValid.

             Заметим, что метод IsValid не вызывается вами явно.  Исполь-
        зуйте для вызова IsValid метод Valid,  так  как  для  уведомления
        пользователя в  случае  возврата  методом  IsValid значения False
        Valid вызывает метод Error. Не путайте также проверку допустимос-
        ти сообщением об ошибке.

                         Проверка допустимости нажатий клавиш
        -----------------------------------------------------------------

             Когда объект управляющего элемента  редактирования  получает
        имеющее  для  него значение событие нажатия клавиши,  он вызывает
        метод IsValidInput объекта проверки  допустимости.  По  умолчанию
        методы IsValid всегда возвращают True.  Это означает, что воспри-
        нимаются все нажатия клавиш. Однако, наследующие объекты проверки
        допустимости  могут переопределять метод IsValidInput,  чтобы от-
        фильтровывать нежелательные нажатия клавиш.

             Например, средства проверки допустимости диапазона,  которые
        используются для числового ввода, возвращают из IsValidInput True
        только для цифр и символов '+' и '-'.

             IsValidInput воспринимает  два параметра.  Первый параметр -
        это параметр-переменная,  содержащая текущий текст ввода.  Второй
        параметр - это булевское значение,  указывающее, следует ли перед
        попыткой проверки допустимости применять к строке ввода  дополне-
        ние или заполнение. TPictureValidator - это единственный из стан-
        дартных объектов проверки допустимости, использующий второй пара-
        метр.

                           Сообщение о недопустимых данных
        -----------------------------------------------------------------

             Виртуальный метод Error уведомляет пользователя,  что содер-
        жимое управляющего элемента редактирования не прошло проверку до-
        пустимости. Стандартные  объекты  проверки  допустимости  в общем
        случае представляет простой блок сообщения,  уведомляющий пользо-
        вателя, что  содержимое ввода недопустимо,  и описывающее,  каким
        должен быть правильный ввод.

             Например, метод Error для  проверки  допустимости  диапазона
        создает блок сообщения,  указывающий,  что значение в управляющем
        элементе редактирования не находится между указанными минимальным
        и максимальным значениями.

             Хотя большинство  объектов проверки допустимости переопреде-
        ляют Error,  вам не следует вызывать его  непосредственно.  Метод
        Error вызывается  методом  Valid,  если  IsValid возвращает False
        (что является единственным моментом,  когда  необходимо  вызывать
        Error).


                      Стандартные средства проверки допустимости
        -----------------------------------------------------------------

             ObjectWindows включает в себя шесть стандартных типов объек-
        тов проверки  допустимости,  включая  абстрактный объект проверки
        допустимости и следующие пять специальных типов таких объектов:

             * Фильтрация.
             * Проверка диапазона.
             * Проверка допустимости с просмотром.
             * Проверка допустимости с просмотром строк.
             * Проверка допустимости с просмотром шаблонов.

                       Абстрактный объект проверки допустимости
        -----------------------------------------------------------------

             Абстрактный тип TValidator  служит базовым  типом  для  всех
        объектов проверки допустимости, но сам по себе он не делает ниче-
        го полезного.  По существу,  TValidator - это объект проверки до-
        пустимости,  для которого всегда допустим любой ввод:  IsValid  и
        IsValidInput возвращают True,  а Error не выполняет никаких функ-
        ций.  Наследующие типы переопределяют IsValid и/или  IsValidInput
        для фактического определения того, какие значения являются допус-
        тимыми.

             Если никакие из других объектных типов проверки допустимости
        не годятся в качестве исходных, вы можете использовать TValidator
        в качестве отправной точки собственных объектов проверки допусти-
        мости.

                                      Фильтрация
        -----------------------------------------------------------------

             Фильтрующие объекты проверки допустимости - это простая реа-
        лизация средств  проверки  допустимости,  при которой проверяется
        только набираемый пользователем  ввод.  Конструктор  фильтрующего
        объекта  проверки допустимости воспринимает один параметр - набор
        допустимых символов:

             constructor TFilterValidator.Init(AValidChars: TCharSet);

             TFilterValidator переопределяет  IsValidInput  для  возврата
        True только в том случае, если все символы в текущей строке ввода
        содержатся в наборе символов,  переданных конструктору. Управляю-
        щие элементы редактирования включают символы только в том случае,
        если IsValidInput возвращает True,  так что нет необходимости пе-
        реопределять IsValid.  Поскольку  символы  проходят  через фильтр
        ввода, полная строка допустима по определению.

             Потомки TFilterValidator,  такие как TRAngeValidator,  могут
        сочетать фильтрацию  ввода с другими проверками завершенной стро-
        ки.

                                  Проверка диапазона
        -----------------------------------------------------------------

             Объект проверки  допустимости диапазона TRangeVaidator - это
        потомок TFilterValidator, которые воспринимают только числа и до-
        бавляют к  итоговым  результатам проверку диапазона.  Конструктор
        воспринимает два параметра, определяющим минимальное и максималь-
        ное допустимое значение:

             constructor TRangeValidator.Init(AMin, AMax: Integer);

             Объект проверки  допустимости  диапазона сам строит числовое
        средство проверки-фильтрации,   воспринимающее    только    цифры
        '0''9' и  символы  плюса и минуса.  Таким образом,  наследуемый
        IsValidInput обеспечивает   отфильтрацию   только   цифр.   Затем
        TRangeValidator  переопределяет IsValid,  чтобы он возвращал True
        только если введенные числа находятся в допустимом диапазоне, оп-
        ределяемом  в  конструкторе.  Метод Error выводит блок сообщения,
        указывающий, что введенное значение находится вне диапазона.

                          Проверка допустимости с просмотром
        -----------------------------------------------------------------

             Абстрактный объект  проверки   допустимости   с   просмотром
        TLookupValidator обеспечивает основу для общего типа объекта про-
        верки допустимости,  который для определения допустимости сравни-
        вает введенное значение со списком воспринимаемый элементов.

             TLookupValidator -  это абстрактный тип,  который никогда не
        используется сам по себе,  но служит важным изменением и дополне-
        нием к стандартному объекту проверки допустимости.

                   Примечание: Пример  работы  такого  объектного типа вы
              можете найти в разделе по преобразованию строк.

             Новый метод,  вводимый объектом TLookupValidator  называется
        Lookup. По умолчанию Lookup возвращает значение False, но при об-
        разовании производного абстрактного объекта проверки допустимости
        c просмотром  вы можете переопределить Lookup для сравнения пере-
        данной строки со списком и возвращать True,  если строка содержит
        допустимую запись.

             TLookupValidator переопределяет  IsValid  для  возврата True
        только если Lookup также возвращает  True.  В  наследующих  типах
        проверки  допустимости с просмотром вам следует переопределять не
        IsValid, а Lookup.

                                    Просмотр строк
        -----------------------------------------------------------------

             Рабочий пример объекта проверки допустимости с  преобразова-
        нием представляет TStringLookupValidator, сравнивающий переданную
        из управляющего элемента редактирования  строку  с  элементами  в
        списке строк.  Если переданная строка содержится в списке,  метод
        объекта проверки  допустимости  с  просмотром  строки  возвращает
        True. Конструктор  воспринимает только один параметр - список до-
        пустимых строк:

             constructor TStringLookupValidator.Init(AString:
                                                      PStringCollection);

             Чтобы после построения объекта проверки допустимости с прос-
        мотром использовать другой список строк,  передайте новый  список
        методу NewStringList объекта проверки допустимости (который унич-
        тожает старый список и задает новый).

             TStringLookupValidator переопределяет методы Lookup и Error,
        так что Lookup возвращает True, если переданная строка содержится
        в наборе строк, а Error выводит на экран блок сообщения, указыва-
        ющий, что строка отсутствует в списке.

                           Проверка допустимости по шаблону
        -----------------------------------------------------------------

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

                   Примечание: Синтаксис шаблонов описывается в  справоч-
              нике. См. TPXPictureValidator.Picture.

             constuctor TPictureValidator.Init(const APic: String;
                                               AAutoFill: Boolean);

             TPictureValidator переопределяет   Error,   IsValidInput   и
        IsValid и  добавляет  новый  метод  Picture.  Изменения в Error и
        IsValid просты:  Error выводит на экран блок сообщения, указываю-
        щий, какой формат должна иметь строка,  а IsValid возвращает True
        только если True возвращается функцией Picture, позволяя получать
        новые производные типы проверки допустимости по шаблону путем пе-
        реопределения только метода Picture.  IsValidInput проверяет сим-
        волы по мере набора их пользователем, допуская только те символы,
        которые разрешены в шаблоне формата,  и возможно  дополняя  лите-
        ральные символы из шаблона.

             Метод Picture  пытается сформатировать заданную строку ввода
        в соответствии с шаблоном формата и возвращает  значение,  указы-
        вающее степень успеха: полный, неполный или ошибка. 
                              Назад | Содержание | Вперед
Скидка до 20% на услуги дата-центра. Аренда серверной стойки. Colocation от 1U!

Миграция в облако #SotelCloud. Виртуальный сервер в облаке. Выбрать конфигурацию на сайте!

Виртуальная АТС для вашего бизнеса. Приветственные бонусы для новых клиентов!

Виртуальные VPS серверы в РФ и ЕС

Dedicated серверы в РФ и ЕС

По промокоду CITFORUM скидка 30% на заказ VPS\VDS

VPS/VDS серверы. 30 локаций на выбор

Серверы VPS/VDS с большим диском

Хорошие условия для реселлеров

4VPS.SU - VPS в 17-ти странах

2Gbit/s безлимит

Современное железо!

Новости мира IT:

Архив новостей

IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware

Информация для рекламодателей PR-акции, размещение рекламы — adv@citforum.ru,
тел. +7 495 7861149
Пресс-релизы — pr@citforum.ru
Обратная связь
Информация для авторов
Rambler's Top100 TopList This Web server launched on February 24, 1997
Copyright © 1997-2000 CIT, © 2001-2019 CIT Forum
Внимание! Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Подробнее...