среда, 29 июля 2009 г.

Разработчики JRuby переезжают

Сегодня новостная лента пестрит сообщениями о том, что разработчики JRuby ушли из Sun в Engine Yard. В одном из сообщений есть предположение, что после покупки Sun'а Oracle'ом некоторым продуктам Sun грозит исчезновение, в том чимле и JRuby. Что ж, если это так, то надеюсь этот шаг позволит не исчезнуть JRuby.

пятница, 24 июля 2009 г.

JRuby - новая версия и новый сайт

Зашел я на сайт JRuby и увидел, что дизайн-то сменился. Надо сказать, что очень красиво получилось.

Кроме этого, увидел, что уже больше месяца назад вышла новая версия - 1.3.1. Что-то я стал пропускать события из мира JRuby. Несмотря на то, что в новой версии сайта появилась иконка RSS, самого RSS на сайте до сих пор нет :(

UPD
Начал копаться на сайте и нашел ссылку на блог JRuby Team Blog, который появился чуть раньше выхода JRuby 1.3.1. Подписался на RSS этого блога.

пятница, 17 июля 2009 г.

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

Начало в предыдущем посте.

Валидация с помощью JvValidators

У компонента JvValidators реализуем обработчик события OnValidateFailed. Обработчик предназначен для вывода сообщений об ошибке и может выглядеть так:
RichEdit1.Lines.Add(Format('%s',[BaseValidator.ErrorMessage]));
Естественно, вместо RichEdit можно взять любой другой компонент.

Валидация осуществляется с помощью следующего кода:
JvValidators1.Validate;
Валидация с помощью JvValidationSummary
Размещаем на форме компонент TJvValidationSummary и получаем JvValidationSummary1. У компонента JvValidators1 устанавливаем свойство ValidationSummary в значение JvValidationSummary1 и реализуем обработчик события OnChange. Обработчик предназначен для вывода сообщений об ошибке и может выглядеть так:
RichEdit1.Lines.Text :=
TJvValidationSummary(Sender).Summaries.Text;
Валидация осуществляется с помощью следующего кода:
JvValidationSummary1.Summaries.Clear;
JvValidators1.Validate;
Валидация с помощью JvErrorIndicator
Размещаем на форме компонент TJvErrorIndicator и получаем JvErrorIndicator1. У компонента JvValidators1 устанавливаем свойство ErrorIndicator в значение JvErrorIndicator1. Валидацию можно осуществить с помощью следующего кода:
JvErrorIndicator1.BeginUpdate;
try
JvErrorIndicator1.ClearErrors;
JvValidators1.Validate;
finally
JvErrorIndicator1.EndUpdate;
end;
Рядом с элементами управления, не прошедших валидацию, появится предупреждающая иконка:

За ее появление отвечает компонент JvErrorIndicator.

При необходимости сообщение об ошибке можно куда-нибудь вывести, но при большом количестве валидаторов удобно реализовать метод, который облегчит нам работу. Сигнатура метода следующая:
procedure ProviderErrorValidateFailed(Sender: TObject; BaseValidator: TJvBaseValidator; var Continue: Boolean);
Код метода может выглядеть например так:
JvErrorIndicator1.Error[BaseValidator.ControlToValidate]:= BaseValidator.ErrorMessage;
RichEdit1.Lines.Add(Format('%s', [BaseValidator.ErrorMessage]));
Надеюсь, чта это информация кому-нибудь пригодится :)

четверг, 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.

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