Как сказал Алекс, Delphi 7 не генерирует RTTI для записей, поэтому вы не можете получить необходимую информацию во время выполнения.Однако в более поздних версиях (Delphi 2010+) это происходит, и следующий код:
TItem = record
UPC : string[20];
Price : Currency;
Cost : Currency;
//...
end;
var
rttiContext: TRttiContext;
rttiType: TRttiType;
fields: TArray<TRttiField>;
item: TItem;
begin
rttiType := rttiContext.GetType(TypeInfo(TItem));
caption := rttiType.Name + ' {';
fields := rttiType.GetFields;
for i := low(fields) to high(fields) do
begin
caption := caption +'{name='+fields[i].Name+',';
caption := caption +'offset='+IntToStr(fields[i].Offset)+'}';
end;
caption := caption + '}';
будет производить 'TItem {{name = UPC, offset = 0} {name = Price, offset = 24}{name = Cost, offset = 32}} '
Вы также можете установить значение поля в конкретном экземпляре (хотя вы должны также проверить тип), используя:
if fields[i].Name = 'Price' then
fields[i].SetValue(@item, 10);