Stockage des données d'un type Variant personnalisé

De RAD Studio
Aller à : navigation, rechercher

Remonter à Définition de variants personnalisés - Index


Les variants stockent leurs données dans le type enregistrement TVarData. Ce type est un enregistrement contenant 16 octets. Le premier mot indique le type du variant, et les 14 octets restants sont disponibles pour le stockage des données. Bien que votre nouveau type Variant puisse fonctionner directement avec un enregistrement TVarData, il est en général plus simple de définir un type enregistrement dont les membres portent des noms significatifs du nouveau type puis de convertir ce nouveau type en type enregistrement TVarData.

Par exemple, l'unité VarConv définit un type variant personnalisé qui représente une mesure. Les données de ce type contiennent les unités (TConvType) de mesure, ainsi que la valeur (un double). L'unité VarConv définit son propre type pour représenter cette valeur :

Delphi :

 TConvertVarData = packed record
   VType: TVarType;
   VConvType: TConvType;
   Reserved1, Reserved2: Word;
   VValue: Double;
 end;

Ce type est exactement de la même taille que l'enregistrement TVarData. Quand vous travaillez avec un variant personnalisé du nouveau type, le variant (ou son enregistrement TVarData) peut être convertit en TConvertVarData, et le type Variant personnalisé fonctionnera simplement avec l'enregistrement TVarData comme s'il était du type TConvertVarData.

Remarque :  Quand vous définissez un enregistrement qui correspond à l'enregistrement TVarData, assurez-vous de le définir compressé.

Si votre nouveau type Variant personnalisé a besoin de plus de 14 octets pour stocker les données, vous pouvez définir un nouveau type enregistrement qui contienne un pointeur ou l'instance d'un objet. Par exemple, l'unité VarCmplx utilise une instance de la classe TComplexData pour représenter les données dans un variant à valeur complexe. Il définit donc un type enregistrement de même taille que TVarData contenant une référence à un objet TComplexData.

Delphi :

 TComplexVarData = packed record
   VType: TVarType;
   Reserved1, Reserved2, Reserved3: Word;
   VComplex: TComplexData;
   Reserved4: LongInt;
 end;

Les références d'objet sont en réalité des pointeurs (sur deux mots), et ce type est de même taille que l'enregistrement TVarData. Comme précédemment, un variant personnalisé complexe (ou son enregistrement TVarData), peut être convertit en TComplexVarData, et le type variant personnalisé fonctionnera avec l'enregistrement TVarData comme il le ferait avec un type TComplexVarData.

Voir aussi