четверг, 16 июля 2009 г.

Валидаторы в JVCL. Часть 1

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

Итак, на палитре компонентов в пункте «Jv Validators» имеем три компонента:
  • TJvValidators – фактически содержит список компонент типа TJvBaseValidator или их наследников;
  • TJvValidationSummary — является коллекцией для сообщений об ошибках при неудачной валидации;
  • TJvErrorIndicator — предоставляет пользовательский интерфейс для индикации ошибки в элементе управления.
Размещаем на форме компонент TJvValidators. Соответственно получаем JvValidators1. Далее на панели «Structure» на JvValidators1 нажимаем правой кнопкой и выбираем в появившемся меню пункт «JvValidators Items Editor...»:

В появившемся редакторе добавляем валидатор необходимого типа:

После этого уже можно работать с валидатором. Рассмотрим их подробнее. У валидаторов всех типов есть общие свойства:
  • ControlToValidate - элемент управления, с которым ассоциируется валидатор;
  • ErrorMessage - сообщение об ошибке;
  • PropertyToValidate - свойство элемента управления, подлежащее валидации;
  • Valid - результат валидации.
Required Field Validator используется для проверки наличия значения какого-либо свойства у элемента управления (например, у компонента TEdit можно проверить свойство Text, т.е. ввел пользователь что-нибудь или нет).

Regular Expression Validator используется для проверки соответствия значения какого-либо свойства элемента управления регулярному выражению (например, для вышеупомянутого TEdit можно проверить сответствует ли заданному регулярному выражению свойство Text, т.е. введенные пользователем данные). Регулярное выражение указывается в свойстве ValidationExpression.

Range Validator используется для проверки вхождения значения какого-либо свойства элемента управления в заданный диапазон. Минимальное и максимальное значения диапазона указывается в свойствах MinimumValue и MaximumValue. Кроме этого, у этих свойств имеется свойство Type, в котором указывается тип минимального и максимального значений диапазона. (Для компонента TUpDown можно проверить свойство Position.)

Custom Validator позволяет выполнить произвольную проверку какого-либо свойства элемента управления. Для этого необходимо реализовать обработчик события OnValidate. Сигнатура обработчика выглядит следующим образом:
procedure JvCustomValidator1Validate(Sender: TObject; ValueToValidate: Variant; var Valid: Boolean);
В параметре ValueToValidate содержится значение свойства элемента управления, указанное в свойстве PropertyToValidate валидатора. Все необходимые проверки необходимо производить с этим параметром, и в случае успешного результата параметру Valid необходимо присвоить значение True, в обратном случае — False.

Compare Validator позволяет сравнить значение какого-либо свойства элемента управления со значением, задаваемым с свойстве ValueToCompare валидатора. Также в свойстве Type можно указать тип этого значения. Свойство Operator позволяет задать оператор, при помощи которого будет производиться сравнение (менее чем, менне или равно и т.д.).

Controls Compare Validator позволяет сравнивать значения какого-либо свойства двух элементов управления (видимо одинакового типа). Свойство элементов управления для сравнения задается в свойстве валидатора PropertyToValidate, свойство Operator аналогично описанному в предыдущем пункте. Второй элемент управления задается в свойстве валидатора CompareToControl.

Продолжение в следующем посте.

3 комментария:

  1. Прошу прощения, что не совсем в тему. Просто уже не знаю где спросить!
    Работаю в C++ Embarcadero RAD Studio 2010. Начал недавно пользоваться библиотекой jvcl. Нашел много интересного и удобного. Но сейчас требуется создать автономный вариант приложения. Я привычно устанавливаю Project->Options->Linker->Dinamic RTL=false, сбрасываю флажок Project->Options->Packages->Build with runtime packages, но при попытке компиляции получаю следующие сообщения:
    [LINK32 Error] Error: Unable to open file 'JVDBGRID.RES'
    ...
    [LINK32 Error] Error: Unable to open file 'JVDBGRIDSELECTCOLUMNFORM.DFM'
    [LINK32 Error] Error: Unable to perform link
    Failed
    Попробовал указать в Project->Options->Resource compiler->Derictories and Conditionals->Include file search path путь к ненайденным ресурсным файлам, но никакого эффекта не добился. Подскажите, что делать

    ОтветитьУдалить
  2. Автономный вариант приложения - это, как я понимаю, приложение работающее не на машине разработчика без установленной IDE? Если да, то никаких действий для этого я не предпринимал. После компиляции приложение должно содержать все необходимое для своей работы.

    По поводу Project->Options->Linker->Dinamic RTL ничего сказать не могу, так как в 2007 версии у меня такого нет, а флажок Project->Options->Packages->Build with runtime packages сброшен.

    Не совсем понятно по поводу автономного приложения - у Вас для запуска приложения требуется установленная библиотека JVCL?

    ОтветитьУдалить
  3. Не подскажите, а нет ли случайно в данной библиотеке компонента, который бы выдавал такую информацию как CPUid, HDDid и прочего оборудования установленного в компьютере?
    Или может существует какой-то другой компонент?
    Заранее спасибо!

    ОтветитьУдалить