Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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.48 MB
Время: 0.029 c
3-1139990526
DelphiN!
2006-02-15 11:02
2006.04.09
Зависание приложения при ласположении на нем > 13 датасетов


15-1142499390
Alex_Delphi
2006-03-16 11:56
2006.04.09
Подскжите где можна достать Кілікс


1-1141561561
Fenix
2006-03-05 15:26
2006.04.09
Копирование отформатированного текст из RichEdit a


2-1143202636
Vyacheslav
2006-03-24 15:17
2006.04.09
Virtual метод


6-1135444189
FrykT
2005-12-24 20:09
2006.04.09
SSL + WinSock, как реализовать?