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

Вниз

persistent в файл   Найти похожие ветки 

 
Oleg_   (2004-11-10 18:24) [0]

Подскажите как состыковать twriter с TPersistent
на последнюю строку компилятор ругается, В 6 дельфи у twriter нет метода WriteProperties

Wr:TWriter;
fs:tfilestream;
begin
fs:=tfilestream.Create("c:\1.txt",fmOpenWrite);
Wr:=TWriter.create(fs,4096);
wr.WriteProperties(pers);


 
jack128 ©   (2004-11-10 18:31) [1]

type
 TWriterAccess = class(TWriter);

Wr:TWriterAccess;
fs:tfilestream;
begin
fs:=tfilestream.Create("c:\1.txt",fmOpenWrite);
Wr:=TWriterAccess.create(fs,4096);
wr.WriteProperties(pers);


 
Reindeer Moss Eater ©   (2004-11-10 18:32) [2]

Если тебе нужен TWriter, то зачем пытаться записать весь компонент одним вызовом?

Если тебе весь компонент надо сохранить одним вызовом, то зачем тебе TWriter?

WriteComponentResFile и все.


 
Oleg_   (2004-11-10 18:37) [3]

спасибо, сработало


 
Oleg_   (2004-11-10 18:42) [4]

Сохранить нужно данные конкретного обьекта (не компонента)
в качестве базового класса указан tpersistent


 
Oleg_   (2004-11-10 21:27) [5]

Файл остается практически пустой и размер его всегда 1байт  независимо от содержимого и состава обьекта. RTTI принудительно пробовал директивой {M+} включать

TypeInf := object.ClassInfo;
TypeData := GetTypeData(TypeInf);
NumProps := TypeData^.PropCount;

так вот, NumProps всегда остается = 0


 
jack128 ©   (2004-11-10 21:44) [6]

Oleg_   (10.11.04 21:27) [5]
RTTI генерируется только для published свойств


 
Oleg_   (2004-11-11 09:24) [7]

да, меня вчера уже начати тезать такие сомнения, а сегодня утром прочитал.
Если же надо сохранить обьект скажем с private полями WriteProperties не подойтет, поскольку работает по RTTI.

Остается писать для каждого класса свои методы save/load?

Кодгда-то краем уха слышал про возможность сохранения обьекта помещенного в контейнер.


 
Digitman ©   (2004-11-11 11:10) [8]


> Если же надо сохранить обьект скажем с private полями WriteProperties
> не подойтет, поскольку работает по RTTI.


у TPersistent есть вирт.метод DefineProperties, этому методу не нужна никакая RTTI, метод на то и существует, чтобы манипулировать поточной трансляцией св-в объекта, не фигурирующих в RTTI.

сделай свой класс наследником TComponent, перекрой DefineProperties, в теле перекрытого метода одним или несколькими вызовами DefineProperty() определи перечень сохраняемых/восстанавливаемых неопубликованных св-в

теперь смело сохраняй свой компонент в поток методом Stream.WriteComponent() и считывай из потока свой компонент методом Stream.ReadComponent() - все остальное (всю черновую работу) за тебя Борланд уже сделал



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

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

Наверх




Память: 0.48 MB
Время: 0.025 c
1-1100250594
Sokrat
2004-11-12 12:09
2004.11.28
Программное скролирование в WebBrowser


1-1100242872
Alex P
2004-11-12 10:01
2004.11.28
Создание программы в виде процессса windows


14-1100206583
ArMellon
2004-11-11 23:56
2004.11.28
Народ вот делаю чат


3-1099468339
RavenD
2004-11-03 10:52
2004.11.28
Как определить длинну всего Blob a?


3-1097162482
sirsergio
2004-10-07 19:21
2004.11.28
Как остановить выполнение запроса программно