Здраствуй, All!
Есть запись:
type
TEmployee = record
cNo: integer;
cName: string;
...... // еще 20 полей разных типов
end;
Как сделать сабж в цикле ?
С уважением, news.rsdn.ru.
Posted via RSDN NNTP Server 1.9
Здравствуйте, OlegProv, Вы писали:
Есть запись:
type
TEmployee = record
cNo: integer;
cName: string;
...... // еще 20 полей разных типов
end;
OP>Как сделать сабж в цикле ?
Скорее всего никак, хотя может кто поправит?..
Короче, проблема в том, что для записей нет никакой рантайм информации, поэтому максимум, что можно вытащить, так это смещение переменных. Не знаю, как это можно делать прямо на Дельфи, а из ассемблера точно можно. А вот с типом облом.
D>Скорее всего никак, хотя может кто поправит?..
D>Короче, проблема в том, что для записей нет никакой рантайм информации, поэтому максимум, что можно вытащить, так это смещение переменных. Не знаю, как это можно делать прямо на Дельфи, а из ассемблера точно можно. А вот с типом облом.
+ забыл сказать, что смещения переменных доступны только на этапе компиляции (впрочем как и тип). Короче — описываешь свой рекорд в массиве (смещение/тип) и обходишь его в цикле
Привет, Danchik!
Вы пишешь 15 апреля 2005:
OP>> Как сделать сабж в цикле ?
D> Это невозможно.
D> Вопрос: зачем это нужно?
Можно попытаться "наложить" одну структуру на другую...
Типа,
Variant parts in records.
Но у него там не ShortString, так что, не прокатит.
А вообще, имхо, задача —
чистая блажь...
Если уж так сильно неймётся, можно создать класс
и реализовать в нём всё чё нужно.
--
With best regards, Alex Cherednichenko.
Posted via RSDN NNTP Server 1.9
Hello OlegProv, you wrote:
> Есть запись:
> type
> TEmployee = record
> cNo: integer;
> cName: string;
> ...... // еще 20 полей разных типов
> end;
>
> Как сделать сабж в цикле ?
Отказаться от record в пользу class. Для них можно сгенерировать RTTI информацию, что позволит добится желаемого результата — перебор полей.
--
Всего хорошего, Слава
Posted via RSDN NNTP Server 1.9