На этом шаге мы рассмотрим события OnChange и OnValidate.
События компонента TField возникают после или до присвоения полю значения. Благодаря написанию обработчиков этих событий можно корректировать вводимые данные и не допускать ввод недопустимых значений.
Рассмотрим основные события этого компонента.
Событие OnChange возникает после изменения данных и успешной записи их в буфер. На практике крайне редко пишут обработчик этого события, в основном приходиться писать обработчик для событий, возникающих перед занесением данных в буфер, но иногда он бывает крайне полезен.
Вернемся к нашей программе, которая работала с БД FIRMA (приложение 39 шага). Откройте приложение и сохраните его под именем FirmaUnit и FirmaProject соответственно
Рис.1. Выбор поля Naim
procedure TForm1.Table2NaimChange(Sender: TField); begin ShowMessage ('Вы выбрали '+ DBLookupComboBox1.Field.AsString); end;
Запустите программу и попробуйте добавить запись. Когда вы выберите в компоненте DBLookupComboBox1 какое либо значение, программа выдаст сообщение "Вы выбрали <значение>".
Событие OnValidate возникает после изменения значения до записи в буфер. С помощью обработчика этого события можно проверить введенное в поле значение на его соответствие некоторым ограничениям или условиям. Это событие наступает при изменении значения поля вручную или программно до выполнения метода Post, который запоминает изменения БД. Поэтому если полю присвоено неверное значение, выполнение метода Post можно предотвратить, вызвав метод Abort.
Например, поле Zena содержит цену, поэтому неразумно будет позволять пользователю вводить отрицательное значение. Чтобы предотвратить ввод отрицательных значений напишем следующий обработчик события OnValidate.
procedure TForm1.Table2ZenaValidate(Sender: TField); begin if Table2Zena.Value < 0 then begin ShowMessage('Цена должна быть положительна'); Abort; end; end;
Запускаем программу. После ввода отрицательного значения в поле Zena и любой попытке сохранить его, либо при потере фокуса компонента DBEdit3, выдается сообщение "Цена должна быть положительна".
Рис.3. Выдача сообщения в случае ввода отрицательного значения
Созданное приложение можно взять здесь.
На следующем шаге мы закончим изучение событий.