Текущий архив: 2006.04.09;
Скачать: CL | DM;
ВнизПеребрать в цикле свойства класса Найти похожие ветки
← →
Spellcaster (2006-03-24 18:10) [0]Всем привет! Есть у меня задачка: чтение данных из байтового потока и преобразование всего этого в класс. У каждого класса немало членов-свойств разных числовых типов (целые, дробные, ...). Сейчас я каждое свойство читаю присваиваю отдельно, отчего получаются длинные и некрасивые "портянки" типа
cl.Int1:=getbytes(4);
cl.Float1:=getbytes(4);
cl.byte1:=getbytes(1);
...
Нельзя ли сделать переборку свойств в цикле?
Чтобы можно было так:
for i:=0 to propcount-1 do
prop[i]:=getbytes(sizeof(prop[i]));
я поискал в мануалах, но там есть только для published свойств. Мне же они не нужны, мне достаточно простых public. Есть ли средство получить список публичных свойств, или это возможно лишь для published?
← →
Джо © (2006-03-24 18:17) [1]> Мне же они не нужны, мне достаточно простых public.
А что мешает сделать их published?
← →
Ega23 © (2006-03-24 18:20) [2]
> Есть ли средство получить список публичных свойств, или
> это возможно лишь для published?
Либо объявив их как published, либо написать свой вариант реализации RTTI, где можно будет любые методы-свойства перебирать.
Первое, несомненно, проще... :о)
← →
SpellCaster (2006-03-27 14:06) [3]Да, но если делать паблишед, то вместо одного объявления свойства
public
stuff: string;
придется делать так:
private
F_stuff: string;
published
property stuff: string read F_stuff write F_stuff;
А если свойств 15-20?
← →
MBo © (2006-03-27 14:10) [4]Не подойдет ли тебе DefineProperties ?
← →
Ega23 © (2006-03-27 14:16) [5]Ctrl+Shift+C тебе поможет
← →
SpellCaster (2006-03-27 14:22) [6]Гм... там что-то уж очень замороченное. TFiler какой-то... к тому же у меня наследники от Tobject, а этот метод только в TPersistent. Ну да ладно, писать данные скопом я навострился - просто запихнул все свойства в запись и пишу sizeof байт по адресу первого компонента. А вывод на печать содержимого класса у меня только для отладки.
← →
MBo © (2006-03-27 14:29) [7]>TFiler какой-то... к тому же у меня наследники от Tobject, а этот метод только в TPersistent
Зато есть готовый механизм потокового сохранения, который сама Delphi использует.
← →
Сергей М. © (2006-03-27 14:56) [8]
> к тому же у меня наследники от Tobject
Всего делов-то - исправить class(TObject) на class(TPersistent) .. И получить готовый велосипед)
← →
SpellCaster (2006-03-27 17:40) [9]
> исправить class(TObject) на class(TPersistent)
И как это я сам не додумался ;)
Страницы: 1 вся ветка
Текущий архив: 2006.04.09;
Скачать: CL | DM;
Память: 0.46 MB
Время: 0.013 c