10.5.1. Размещение
в варианте новых значений
Для размещения в варианте нового
(не предусмотренного стандартным вариантом) значения нужно создать соответствующий
класс и поместить в подходящее поле rvarData объект этого класса. Вот как, например,
размещаются комплексные данные в модуле VarCmplx:
TComplexVarData =
packed
record
VType: TVarType;
Reserved1, Reserved2, Reserved3:
Word;
VComplex: TComplexData;
Reserved4: Longint;
end;
Такая запись лишь сохраняет 16-байтную
структуру TVarData, помещая в поле VComplex ссылку на объект класса TComplexData.
Собственно комплексные числа хранятся в полях достаточно сложного класса:
type
TComplexData = class(TPersistent)
private
FReal, FImaginary: Double;
end;
В этом классе предусмотрены многочисленные
методы, управляющие новыми данными. Так, простой вызов VarComplexCreate приводит
к срабатыванию нескольких методов, создающих объект VComplex и наполняющих его
поля:
procedure
VarComplexCreateInto
(var
ADest: Variant;
const
AComplex: TComplexData);
begin
VarClear(ADest);
TComplexVarData(ADest).VType
:= VarComplex;
TComplexVarData(ADest).VComplex
:= AComplex;
end; function
VarComplexCreate(const
AReal, AImaginary: Double):
Variant;
begin
VarComplexCreateInto(Result,
TComplexData.Create(AReal,
AImaginary)) ;
end;
(CM. файл
Source\Rtl\Common\VarCmplx.pas).
Примечание
Запись в которой размещаются новые
данные или ссылка на поддерживающий их обьект, должно обьявляться как
packed
record.