Шаг 44.
Работа с локальными БД в Delphi. Работа с полями. Использование объектов класса TField. События компонента TField (окончание)

    На этом шаге мы рассмотрим события OnSetText и OnGetText.

Событие OnSetText

    Теперь обратимся к полю 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. Порядок выполнения событий

Событие OnGetText

    Часто требуется выполнить некоторое дополнительное преобразование для более точного или более правильного представления хранящегося в поле значения. Для этих целей служит обработчик события 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. Результат работы приложения

Созданное приложение можно взять здесь.

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

    На следующем шаге мы рассмотрим вычисляемые поля.




Предыдущий шаг Содержание Следующий шаг