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.