Типы данных в языке C++__________________________________731

Здесь вводится закрытое поле FA, объявляется защищенная функция SetA,
используемая для записи значения в это поле, и вводится опубликованное свойст-
во А, оперирующее этим полем. В объявлении свойства после ключевого слова
read записано просто имя поля. Это означает, что функция чтения отсутствует и
пользователь может читать непосредственно значение поля. После ключевого сло-
ва write следует ссылка на функцию записи SetA, с помощью которой будут запи-
сываться в поле А новые значения. В этой функции можно предусмотреть какие-то
проверки допустимости вводимого значения А.

Описание этой функции может иметь вид:

void _fastcall MyClassI::SetA(int Value)
{
if(...) FA = Value;

)

В приведенном примере описание свойства А помещено в раздел published.
Следовательно, если этот класс описывает создаваемый вами новый компонент, то
после его установки в систему свойство А будет появляться в окне Инспектора
Объектов при использовании этого компонента. Если перенести объявление свой-
ства в раздел public, то свойством по-прежнему можно будет пользоваться, но то-
лько во время выполнения приложения, поскольку в окне Инспектора Объектов
оно появляться не будет. Если удалить из определения свойства слово write с по-
следующей ссылкой на функцию записи, то свойство станет свойством только для
чтения, т.к. изменить его непосредственно будет невозможно.

Примеры описания свойств при создании нового класса см. в главе 7 в разделе
7.3.2.2.

12.13.6.2 События

Событие — это специальное свойство, являющееся указателем функции. В
C++Builder тип обобщенного указателя на функцию, которой передается один па-
раметр типа TObject (обычно this), — TNotifyEvent. Подобный тип используется в
C++Builder для событий типа OnClick и многих других, которые передают в обра-
ботчик только один параметр — TObject* Sender. Если требуется ввести в класс
подобное событие, достаточно определить в объявлении класса соответствующее
поле и метод работы с ним. Например:

private:

TNotifyEvent FMyEvent;

_published:

property TNotifyEvent MyEvent = (read= FMyEvent, write= FMyEvent);

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

if(FMyEvent) OnMyEvent(this);

Функция OnMyEvent, которая вызывается этим оператором, это и есть обра-
ботчик пользователя. Его имя совпадает с именем свойства, перед которым добав-
ляется префикс «On».

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