Hilfsfunktionen zur Benutzung eines selbstdefinierten Variant-Typs schreiben

Aus Appmethod Topics
Wechseln zu: Navigation, Suche

Nach oben zu RTL verwenden - Index

Nachdem Sie den TCustomVariantType-Nachfolger zur Implementierung Ihres selbstdefinierten Variant-Typs erzeugt haben, kann der neue Typ in Anwendungen verwendet werden. Ohne einige Hilfsfunktionen ist das jedoch nicht ganz einfach.

Nützlich ist z.B. eine Methode, die eine Instanz Ihres selbstdefinierten Variant-Typs von einem passenden Wert oder einer Wertemenge erzeugt. Diese Funktion oder Gruppe von Funktionen füllt die von Ihnen definierte Struktur zur Speicherung der Daten des selbstdefinierten Variant-Typs. Die folgende Funktion kann z.B. zur Erzeugung eines komplexwertigen Variants verwendet werden:

Object Pascal:

 function VarComplexCreate(const AReal, AImaginary: Double): Variant;
 begin
   VarClear(Result);
 TComplexVarData(Result).VType := ComplexVariantType.VarType;
 TComplexVarData(ADest).VComplex := TComplexData.Create(ARead, AImaginary);
 end;

Diese Funktion ist in vorliegenden Form nicht in der Unit VarCmplx enthalten, sondern stellt eine Synthese vorhandener Funktionen dar, um das Beispiel zu vereinfachen. Beachten Sie, dass der zurückgegebene Variant in den Record umgewandelt wird, der für die TVarData-Struktur (TComplexVarData) definiert und dann ausgefüllt wurde.

Eine weitere nützliche Hilfsfunktion liefert den Variant-Typcode für den neuen Variant-Typ. Dieser Typcode ist nicht konstant. Er wird bei der Instantiierung Ihres TCustomVariantType-Nachfolgers automatisch generiert. Es ist deshalb sinnvoll, eine Möglichkeit vorzusehen, den Typcode des selbstdefinierten Variant-Typs auf einfache Weise zu ermitteln. Die folgende Funktion aus der Unit VarCmplx zeigt eine solche Möglichkeit; sie liefert einfach die VarType-Eigenschaft des TCustomVariantType–Nachfolgers:

Object Pascal:

 function VarComplex: TVarType;
 begin
 Result := ComplexVariantType.VarType;
 end;

Zwei weitere Standardhilfsfunktionen sind für die meisten selbstdefinierten Variants verfügbar. Sie prüfen, ob ein Variant vom selbstdefinierten Typ ist, und wandeln einen anderen Variant in den neuen Typ um. Die Implementierung dieser Funktionen aus der Unit VarCmplx lautet:

Object Pascal:

 function VarIsComplex(const AValue: Variant): Boolean;
 begin
 Result := (TVarData(AValue).VType and varTypeMask) = VarComplex;
 end;
 function VarAsComplex(const AValue: Variant): Variant;
 begin
 if not VarIsComplex(AValue) then
 VarCast(Result, AValue, VarComplex)
 else
 Result := AValue;
 end;

Beachten Sie, dass diese Hilfsfunktionen Standardmerkmale benutzen, die allen Variant-Typen eigen sind: das Element VType des TVarData-Records und die Funktion VarCast, die wegen der im TCustomVariantType-Nachfolger zur Umwandlung von Daten implementierten Methoden einsetzbar ist.

Zusätzlich zu den erwähnten Standardfunktionen können Sie beliebig viele spezielle Funktionen für Ihren neuen selbstdefinierten Variant-Typ schreiben. Die Unit VarCmplx definiert z.B. eine große Anzahl Funktionen, die mathematische Operationen für komplexwertige Variants implementieren.

Siehe auch