Компоненты часто имеют длинные списки свойств с используемыми значениями по умолчанию:
class PACKAGE TMySpecialComboBox : public TCustomComboBox
{
public:
__fastcall TMySpecialComboBox(TComponent *Owner);
// ...
private:
// ...
bool fetch_all_;
bool rename_;
TColor background1_, background2_, background3_;
// ...
__published:
// ...
__property bool FetchAll = {read = fetch_all_, write = fetch_all_,
default = false};
__property bool Rename = {read = rename_, write = rename_,
default = false};
__property TColor Background1 = {read = background1_, write = background1_,
default = clWindow};
__property TColor Background2 = {read = background2_, write = background2_,
default = clWindow};
__property TColor Background3 = {read = background3_, write = background3_,
default = clWindow};
// ...
};
Хранение всей этой информации в файле формы тратит впустую пространство, а ее чтение занимает время, что нежелательно, учитывая, что в большинстве случаев изменяются только некоторые значения по умолчанию.
Чтобы минимизировать объем данных в файле формы, вы можете указать значение по умолчанию для каждого свойства (при записи в файл формы редактор форм пропускает любые свойства, значения которых не были изменены ).
Обратите внимание, что при этом не устанавливается значение по умолчанию:
Примечание. Значения свойств не инициализируются автоматически по умолчанию. То есть директива по умолчанию управляет только тогда, когда значения свойств сохраняются в файле формы, но не являются начальными значениями свойства во вновь созданном экземпляре.
за это отвечает конструктор:
__fastcall TMySpecialComboBox::TMySpecialComboBox(TComponent* Owner)
: TCustomComboBox(Owner), // ...
{
FetchAll = false; // how to get the default value ?
Rename = false; // how to get the default value ?
Background1 = clWindow // how to get the default value ?
// ...
}
но написание инициализации таким образом очень подвержено ошибкам.
Как я могу получить значение по умолчанию __property
?