Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.47 MB
Время: 0.044 c
4-1137772468
Compton's G
2006-01-20 18:54
2006.04.09
Обои на рабочем столе.


15-1142446816
Morgoth2
2006-03-15 21:20
2006.04.09
Delphi и Windows mobile 5.0.


4-1137450924
snowkam
2006-01-17 01:35
2006.04.09
Принтера HP


2-1143520222
Rubey
2006-03-28 08:30
2006.04.09
Многостраничная печать


2-1143059552
Std
2006-03-22 23:32
2006.04.09
создание и подключение плагина




   Наверх