表示: Delphi
C++
表示設定
変換関数の使い方
提供:RAD Studio XE2
RTL の利用:インデックス への移動
複雑な変換を行う場合には,変換係数を使用する方法でなく,新しい関数を指定する別の構文を使って変換を実行することができます。たとえば,変換係数を使用しても温度の値は変換できません。これは,温度の目盛りによって基点が異なるからです。
新しい変換型を登録する例を下に示します。この例は StdConvs ユニットから取り出したもので,基本単位との間で変換を行う関数をいくつか示しています。
目次 |
変数を宣言する
最初に,識別子の変数を宣言します。cbTemperature 変換ファミリーと,そのメンバーである計量単位の中で識別子が使用されます。
var cbTemperature: TConvFamily; tuCelsius: TConvType; tuKelvin: TConvType; tuFahrenheit: TConvType;
TConvFamily cbTemperature; TConvType tuCelsius; TConvType tuKelvin; TConvType tuFahrenheit;
メモ: ここに列記した計量単位は,実際に StdConvs ユニットに登録されている温度単位の下位セットです。
変換ファミリーを登録する
次に,変換ファミリーを登録します。
cbTemperature := RegisterConversionFamily ('Temperature');
cbTemperature = RegisterConversionFamily ("Temperature");
基本単位を登録する
次に,変換ファミリーの基本単位(この例では摂氏)を定義し,登録します。なお,基本単位については,実行すべき変換が存在しないため単純な変換係数を使用できます。
tuCelsius:=RegisterConversionType(cbTemperature,'Celsius',1);
tuCelsius = RegisterConversionType(cbTemperature,"Celsius",1);
基本単位との間で変換するメソッドを記述する
温度単位を摂氏に変換するか,摂氏から別の単位に変換する場合には,単純な変換係数が使用できないので,自分でコードを書く必要があります。下に示す関数は StdConvs ユニットに入っています。
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;
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); }
ほかの単位を登録する
以上で変換関数が作成できました。これで,同じ変換ファミリー内のほかの計量単位を登録できます。このとき,単位に関する説明も書いておきます。
ほかの単位を登録するコードの例を下に示します。
tuKelvin := RegisterConversionType(cbTemperature, 'Kelvin', KelvinToCelsius, CelsiusToKelvin); tuFahrenheit := RegisterConversionType(cbTemperature, 'Fahrenheit', FahrenheitToCelsius, CelsiusToFahrenheit);
tuKelvin = RegisterConversionType(cbTemperature, "Kelvin", KelvinToCelsius, CelsiusToKelvin); tuFahrenheit = RegisterConversionType(cbTemperature, "Fahrenheit", FahrenheitToCelsius, CelsiusToFahrenheit);
新しい単位を使用する
この段階で,新規登録した単位を使ってアプリケーション内で変換を実行できます。前に変換ファミリー cbTemperature に登録した変換型であれば,グローバル関数 Convert で変換ができます。下の例は,温度の単位を華氏からケルビン(絶対温度単位)に変換しています。
Convert(StrToFloat(Edit1.Text), tuFahrenheit, tuKelvin);
Convert(StrToFloat(Edit1->Text), tuFahrenheit, tuKelvin);