Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.06.10;
Скачать: CL | DM;

Вниз

Сохранить TPersistent который часть TComponent   Найти похожие ветки 

 
_artur ©   (2007-03-19 19:59) [0]

Привет всем. У меня такая ситуация - у меня типа файла настроек, кроме числовых, строковых и т.д. значений хочеться сохранять

в нём и объекты, причём объекты унаследованные от TPersistent. Вот класс для сохранения

class TOptions : public TComponent
{
public:
       __fastcall TMonitorOptions(TComponent *Owner);
       __fastcall ~TMonitorOptions();

       __property Variant VarOptions[String __index]  = { read=GetVarOptions, write=SetVarOptions};
       __property TPersistent *ObjOptions[String __index]  = { read=GetObjOptions, write=SetObjOptions};
protected:
       virtual void __fastcall DefineProperties(TFiler* Filer);
       DYNAMIC void __fastcall GetChildren(TGetChildProc Proc, TComponent* Root);
};

Вариантные свойства я сохраняю в DefineProperties, а объектные свлойства я сохраняю так: у меня есть класс:

class TObjOption: public TComponent
{
   public:
       __fastcall DObjOption(TComponent *AOwner)
           : TComponent(AOwner) { };

       __property TPersistent *ObjProperty = {read=FObjProperty, write=FObjProperty};

       DYNAMIC void __fastcall SetParentComponent(TComponent* Value);
};

и в методе GetChildren класса TOptions я создаю объект TObjOption, его свойству ObjProperty я присваиваю объект какой нужно и

таким макаром его сохраняю:

void __fastcall TOptions::GetChildren(TGetChildProc Proc, TComponent* Root)
{
   TObjOption *objOpt;
   CurrentObjIterator=ObjMap.begin();
   while(CurrentObjIterator!=ObjMap.end())
   {
       objOpt = new TObjOption(NULL);
       objOpt->ObjProperty = (*CurrentObjIterator).second;
       objOpt->Name = (*CurrentObjIterator).first;
       Proc(objOpt);
       delete objOpt;
       CurrentObjIterator++;
   }
}

сохранияет без проблем, но почему-то при загрузке выдаёт: "Invalid property path"
Может вы знаете как исправить эту проблему. Извините что на С++, библиотека ж одна, а код вроде простой может и так понятно будет


 
galak   (2007-04-14 02:55) [1]

Видимо у Вас получается 2 одноименных объекта. Сбросьте пример получаемого файла, тогда можно будет говорить точнее.



Страницы: 1 вся ветка

Текущий архив: 2007.06.10;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.033 c
2-1179490046
FIL-23
2007-05-18 16:07
2007.06.10
ПЕРЕХВАТ И ОБРАБОТКА ИСКЛЮЧЕНИЙ


15-1179167527
@!!ex
2007-05-14 22:32
2007.06.10
1С под Linux


15-1179010751
ArtemESC
2007-05-13 02:59
2007.06.10
Песня из "Медведя"...


15-1178253943
Torry
2007-05-04 08:45
2007.06.10
Интервью в Мире ПК


15-1179123133
boriskb
2007-05-14 10:12
2007.06.10
М. Руссинович: вредоносное ПО будет процветать и в Windows Vista