На этом шаге мы рассмотрим события OnSetText и OnGetText.
Теперь обратимся к полю Kolvo. Это поле типа Short, то есть, максимальное значение этого поля не должно превосходить 32767. При попытке внести в это поле значение больше, чем 32767 приложение выдаст ошибку. С помощью события OnValidate нельзя предотвратить внесение в поле значения, превышающее указанное, т.к. это событие возникает после изменения значения поля. В этом случае на помощь придет событие OnSetText. Подобно событию OnValidate оно возникает при изменении значения поля, однако на момент возникновения события новое значение полю не присвоено, и, если это не сделать программно в обработчике события, оно останется прежним.
Напишите следующий обработчик события OnSetText для объекта-поля Kolvo.
procedure TForm1.Table2KolvoSetText(Sender: TField; const Text: String); //В константе Text хранится новое введенное значение begin if StrToInt64(Text) > 32767 then begin ShowMessage('Слишком большое значение'); DBEdit2.SetFocus; end else Table2Kolvo.Value:=StrToInt(Text); end;
При возникновении события OnSetText новое введенное значение хранится в строковой константе Text. Мы сравниваем введенное значение (конвертируя его в Int64) с числом 32767. Если введенное значение больше, то выдается соответствующее сообщение, и фокус возвращается на компонент ввода. В противном случае введенное значение промещается из константы Text в поле Value.
Рис.1. Пример работы приложения
Для эффективной работы с событиями, необходимо четко знать, когда это событие возникает. В приведенной ниже схеме (рисунок 2) описана хронология возникновения описанных выше событий.
Рис.2. Порядок выполнения событий
Часто требуется выполнить некоторое дополнительное преобразование для более точного или более правильного представления хранящегося в поле значения. Для этих целей служит обработчик события OnCetText объекта-поля.
Например, в поле Kolvo хранится количество товара, имеющегося в наличии. Можно написать обработчик события OnGetText таким образом, чтобы кроме числа, пользователю выдавалось сокращение "шт".
procedure TForm1.Table2KolvoGetText(Sender: TField; var Text: String; DisplayText: Boolean); begin if Table2.State = dsBrowse then Text:= Table2Kolvo.AsString + ' шт' else Text:=Table2Kolvo.AsString; end;
Рис.3. Результат работы приложения
Заметим, что обработчик события выполняется только в работающей программе, поэтому на этапе конструирования вы не сможете увидеть результат их работы.
На следующем шаге мы рассмотрим вычисляемые поля.