Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > Как сохранять в dfm неопубликованные свойства


Автор: Vyacheslav 8.7.2002, 13:46
Для сохранения неопубликованных свойств необходимо добавить две функции (для чтения и записи с аргуметами  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);
   }
}





Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)