Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.11.28;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.035 c
1-1100201651
iMax
2004-11-11 22:34
2004.11.28
Вопрос по работе TWebBrowser


1-1100506148
Lera
2004-11-15 11:09
2004.11.28
Длинна слова.


3-1098990128
Vova
2004-10-28 23:02
2004.11.28
Query1.FieldCount всегда возвращает одно значение


3-1098888910
ILUHA
2004-10-27 18:55
2004.11.28
Шифрование передаваемых данных


4-1098077456
Submarine
2004-10-18 09:30
2004.11.28
Вопрос о программирование Com- портов





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский