Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.45 MB
Время: 0.021 c
15-1179075891
Inco
2007-05-13 21:04
2007.06.10
Ограничения на длину командной строки


2-1179490046
FIL-23
2007-05-18 16:07
2007.06.10
ПЕРЕХВАТ И ОБРАБОТКА ИСКЛЮЧЕНИЙ


1-1176689988
Saviour
2007-04-16 06:19
2007.06.10
Помогите сделать отчёт с формулами!!!


2-1179387067
FRAGMIR
2007-05-17 11:31
2007.06.10
ADOconnection


2-1179473515
Новичек
2007-05-18 11:31
2007.06.10
Вызов команды del (либо erase) в Delphi.




   Наверх