Повторное использование разработанных кодов___________________421

Если в разделе write записано имя метода записи, то запись будет осуществля-
ться только процедурой с этим именем. Процедура записи — это процедура с од-
ним параметром того типа, который объявлен для свойства. Имя процедуры запи-
си принято начинать с префикса Set, после которого следует имя свойства.

Если раздел write отсутствует в объявлении свойства, значит это свойство то-
лько для чтения и пользователь не может задавать его значение.

Директивы запоминания определяют, как надо сохранять значения свойств
при сохранении пользователем файла формы .dfm. Чаще всего используется ди-
ректива

default = Оначение по умолчанию>

Она не задает начальные условия. Это дело конструктора. Директива просто гово-
рит, что если пользователь в процессе проектирования не изменил значение свой-
ства по умолчанию, то сохранять значение свойства не надо.

Итак, для нашего примера объявления свойств могут иметь вид:

public:

fastcall TEditLetNum(TComponent* Owner);

// Свойство только времени выполнения

_property bool Modified = (read=FModified, default=false);

published:

// Свойства компонента, включаемые в Инспектор Объектов

_property bool EnableLet = <read=FEnableLet, write=SetEnableLet,

default=true);

_property bool EnableNum = {read=FEnableNum, write=SetEnabieNum,

default=true} ;

Объявление свойства Modified помещается в раздел public, поскольку это
свойство должно быть доступно только во время выполнения. Свойства Enable-
Num и EnableLet помещаются в раздел _published, так как они должны отобра-
жаться в Инспекторе Объектов во время проектирования.

Свойства EnableNum и EnableLet имеют прямой доступ к полям для чтения.
Но для записи они имеют методы SetEnableNum и SetEnableLet соответственно.
Это связано с тем, что при записи свойств надо проверять, не окажутся ли значе-
ния обоих этих свойств равными false. Подобное задание значений надо предотвра-
щать, поскольку в этом случае в окно редактирования вообще ничего нельзя будет
ввести.

Свойство Modified вообще не имеет метода записи, поскольку оно предназна-
чено только для чтения.

Указанные в объявлениях методы записи могут быть реализованы обычными
функциями, объявления которых помещаются в private — закрытый раздел клас-
са, а их реализация включается в тело модуля. Для того, чтобы задать свойствам
начальные значения, надо еще включить соответствующие операторы в тело кон-
структора. В итоге в данный момент модуль компонента может иметь следующий
вид.

Файл EditLetNum.h:

class PACKAGE TEditLetNum : public TEdit

(

private:

// Закрытые элементы-данные класса

bool FEnableLet;

bool FEnableNum;

bool FModified;

protected:

// Защищенные методы записи