Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Перебрать в цикле свойства класса [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?


Наверх

Титульная страница Поиск, карта сайта Написать письмо