Umrechnungsfunktionen verwenden
Nach oben zu Maßeinheiten umrechnen
In Fällen, in denen die Umrechnung komplizierter ist, können Sie eine andere Syntax verwenden und die Umrechnung durch eine Funktion statt eines Umrechnungsfaktors definieren. Beispielsweise können Temperaturangaben nicht mit einem Umrechnungsfaktor umgerechnet werden, da die Temperaturskalen unterschiedliche Ursprünge besitzen.
Das folgende Beispiel, das der Unit StdConvs entnommen wurde, zeigt, wie ein Umrechnungstyp registriert wird, indem Funktionen zur Umrechnung von Werten bereitgestellt werden.
Inhaltsverzeichnis
Variablen deklarieren
Zuerst müssen Variablen für die Bezeichner deklariert werden. Die Bezeichner werden in der neuen Umrechnungsfamilie cbTemperature und den Maßeinheiten dieser Familie verwendet:
Delphi:
var
cbTemperature: TConvFamily;
tuCelsius: TConvType;
tuKelvin: TConvType;
tuFahrenheit: TConvType;
C++:
TConvFamily cbTemperature;
TConvType tuCelsius;
TConvType tuKelvin;
TConvType tuFahrenheit;
Anmerkung: Die hier aufgeführten Maßeinheiten bilden eine Teilmenge der Temperaturmaße, die in der Unit StdConvs tatsächlich registriert sind.
Umrechnungsfamilie registrieren
Als Nächstes muss die Umrechnungsfamilie registriert werden:
Delphi:
cbTemperature := RegisterConversionFamily ('Temperature');
C++:
cbTemperature = RegisterConversionFamily("Temperature");
Grundeinheit registrieren
Anschließend definieren und registrieren Sie die Grundeinheit der Umrechnungsfamilie. In diesem Beispiel ist Grad Celsius die Grundeinheit. Beachten Sie, dass bei der Grundeinheit ein einfacher Umrechnungsfaktor angegeben werden kann, da hier keine Umrechnung erforderlich ist:
Delphi:
tuCelsius:=RegisterConversionType(cbTemperature,'Celsius',1);
C++:
tuCelsius = RegisterConversionType(cbTemperature, "Celsius", 1);
Methoden zum Umrechnen in die und aus der Grundeinheit definieren
Sie müssen Funktionen definieren, die Werte der verschiedenen Temperaturskalen in Grad Celsius umrechnen, da ein einfacher Umrechnungsfaktor hierfür nicht ausreicht. Die folgenden Funktionen wurden aus der Unit StdConvs übernommen:
Delphi:
function FahrenheitToCelsius(const AValue: Double): Double;
begin
Result := ((AValue - 32) * 5) / 9;
end;
function CelsiusToFahrenheit(const AValue: Double): Double;
begin
Result := ((AValue * 9) / 5) + 32;
end;
function KelvinToCelsius(const AValue: Double): Double;
begin
Result := AValue - 273.15;
end;
function CelsiusToKelvin(const AValue: Double): Double;
begin
Result := AValue + 273.15;
end;
C++:
double __fastcall FahrenheitToCelsius(const double AValue) {
return (((AValue - 32) * 5) / 9);
}
double __fastcall CelsiusToFahrenheit(const double AValue) {
return (((AValue * 9) / 5) + 32);
}
double __fastcall KelvinToCelsius(const double AValue) {
return (AValue - 273.15);
}
double __fastcall CelsiusToKelvin(const double AValue) {
return (AValue + 273.15);
}
Weitere Maßeinheiten registrieren
Nach der Definition der Umrechnungsfunktionen können Sie weitere Maßeinheiten für die Umrechnungsfamilie registrieren. Sie geben zudem Beschreibungen dieser Maßeinheiten an.
Mit folgendem Quelltext werden die weiteren Maßeinheiten der Umrechnungsfamilie registriert:
Delphi:
tuKelvin := RegisterConversionType(cbTemperature, 'Kelvin', KelvinToCelsius, CelsiusToKelvin);
tuFahrenheit := RegisterConversionType(cbTemperature, 'Fahrenheit', FahrenheitToCelsius, CelsiusToFahrenheit);
C++:
tuKelvin = RegisterConversionType(cbTemperature, "Kelvin", KelvinToCelsius,
CelsiusToKelvin);
tuFahrenheit = RegisterConversionType(cbTemperature, "Fahrenheit",
FahrenheitToCelsius, CelsiusToFahrenheit);
Neue Maßeinheiten verwenden
Die registrierten Maßeinheiten stehen nun Anwendungen für Umrechnungen zur Verfügung. Die globale Funktion Convert kann Temperaturwerte beliebig zwischen den in der Umrechnungsfamilie cbTemperature registrierten Einheiten umrechnen. Mit der folgenden Anweisung wird beispielsweise ein Wert von Grad Fahrenheit in Grad Kelvin umgerechnet.
Delphi:
Convert(StrToFloat(Edit1.Text), tuFahrenheit, tuKelvin);
C++:
Convert(StrToFloat(Edit1->Text), tuFahrenheit, tuKelvin);