![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Перебрать в цикле свойства класса [D7, XP]
Spellcaster © (2006-03-24 18:10:00)Всем привет! Есть у меня задачка: чтение данных из байтового потока и преобразование всего этого в класс. У каждого класса немало членов-свойств разных числовых типов (целые, дробные, ...). Сейчас я каждое свойство читаю присваиваю отдельно, отчего получаются длинные и некрасивые "портянки" типа
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?
SpellCaster (2006-03-27 17:40:00) [1]
> исправить class(TObject) на class(TPersistent)
И как это я сам не додумался ;)
Сергей М. (2006-03-27 14:56:00) [2]
> к тому же у меня наследники от Tobject
Всего делов-то - исправить class(TObject) на class(TPersistent) .. И получить готовыйвелосипед)
MBo (2006-03-27 14:29:00) [3]>TFiler какой-то... к тому же у меня наследники от Tobject, а этот метод только в TPersistent
Зато есть готовый механизм потокового сохранения, который сама Delphi использует.
SpellCaster (2006-03-27 14:22:00) [4]Гм... там что-то уж очень замороченное. TFiler какой-то... к тому же у меня наследники от Tobject, а этот метод только в TPersistent. Ну да ладно, писать данные скопом я навострился - просто запихнул все свойства в запись и пишу sizeof байт по адресу первого компонента. А вывод на печать содержимого класса у меня только для отладки.
Ega23 (2006-03-27 14:16:00) [5]Ctrl+Shift+C тебе поможет
MBo (2006-03-27 14:10:00) [6]Не подойдет ли тебе DefineProperties ?
SpellCaster (2006-03-27 14:06:00) [7]Да, но если делать паблишед, то вместо одного объявления свойства
public
stuff: string;
придется делать так:
private
F_stuff: string;
published
property stuff: string read F_stuff write F_stuff;
А если свойств 15-20?
Ega23 (2006-03-24 18:20:00) [8]
> Есть ли средство получить список публичных свойств, или
> это возможно лишь для published?
Либо объявив их как published, либо написать свой вариант реализации RTTI, где можно будет любые методы-свойства перебирать.
Первое, несомненно, проще... :о)
Джо (2006-03-24 18:17:00) [9]> Мне же они не нужны, мне достаточно простых public.
А что мешает сделать их published?