Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2006.04.09;
Скачать: [xml.tar.bz2];

Вниз

Перебрать в цикле свойства класса   Найти похожие ветки 

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.013 c
6-1135728507
0xBAD
2005-12-28 03:08
2006.04.09
TWebBrowser и буфер обмена


2-1143059740
Georgiy
2006-03-22 23:35
2006.04.09
InitializeAcl SECURITY_ATTRIBUTES крутые вопросы


4-1137749947
not_dev
2006-01-20 12:39
2006.04.09
Контроль компонентов


2-1143110357
alles
2006-03-23 13:39
2006.04.09
Как удалить ссылку на Unit из проекта?


6-1135458339
FH
2005-12-25 00:05
2006.04.09
Плагин к миранде





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский