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.