Для сохранения неопубликованных свойств необходимо добавить две функции (для чтения и записи с аргуметами TReader* и TWriter* соответственно) и переопределить функцию DefineProperties(TFiler*). Пример кода, в котором организовано сохрание свойства типа enum
h-файл:
enum TTestEnum {one,two};
class PACKAGE TTestComponent : public TComponent { private: TTestEnum FTestEnum; int FTestInt; protected:
void fastcall ReadTestEnum(TReader* Reader); void fastcall WriteTestEnum(TWriter* Writer);
public: fastcall TTestComponent(TComponent* Owner); property TTestEnum TestEnum = { read=FTestEnum, write=FTestEnum}; published: };
|
cpp-файл:
static inline void ValidCtrCheck(TTestComponent *) { new TTestComponent(NULL); }
fastcall TTestComponent::TTestComponent(TComponent* Owner) : TComponent(Owner) { FTestEnum = one; } void fastcall TTestComponent::DefineProperties(TFiler* Filer) { TComponent::DefineProperties(Filer); Filer->DefineProperty("TestEnum",ReadTestEnum,WriteTestEnum, true); }
void fastcall TTestComponent::ReadTestEnum(TReader* Reader) { Typinfo::PTypeInfo pTypeInfo = *(Typinfo::GetPropInfo( typeinfo(TTestComponent),"TestEnum"))->PropType; AnsiString strEnumValue = Reader->ReadIdent(); FTestEnum = (TTestEnum)GetEnumValue(pTypeInfo,strEnumValue); }
void fastcall TTestComponent::WriteTestEnum(TWriter* Writer) { Typinfo::PTypeInfo pTypeInfo = *(Typinfo::GetPropInfo( typeinfo(TTestComponent),"TestEnum"))->PropType; Writer->WriteIdent(GetEnumName(pTypeInfo,FTestEnum));
}
namespace Testcomponent { void fastcall PACKAGE Register() { TComponentClass classes[1] = { classid(TTestComponent)}; RegisterComponents("TEST", classes, 0); } }
|
|