Währungsumrechnung
Der Kern der Grundversion des Programms besteht aus einer Funktion, die den eingegebenen Eurobetrag in die entsprechende Fremdwährung umrechnet. Der aktuelle Kurs wird aus dem Kurs-anzeigenden Label entnommen.
Die Berechnung soll immer dann starten, wenn eine Taste gedrückt wurde und wieder ausgelassen wird (Edit1KeyUp-Ereignis).
float rechneEF(float euro) {float fremd, kurs; kurs=StrToFloat(Form1->Label4->Caption); fremd=euro*kurs; return fremd; } //--------------------------------------------------------------------------- void __fastcall TForm1::Edit1KeyUp(TObject *Sender, WORD &Key, TShiftState Shift) {float fremd; fremd=rechneEF(StrToFloat(Edit1->Text)); Edit2->Text=FloatToStrF(fremd,ffFixed,6,2); } //---------------------------------------------------------------------------
Die Funktionen, die beim Klicken auf einen Radiobutton ablaufen, sind der Edit1KeyUp-Funktion sehr ähnlich und untereinander fast identisch.
void __fastcall TForm1::RadioButton1Click(TObject *Sender) {float fremd; Label4->Caption="13,7603"; Label2->Caption="Schilling"; fremd=rechneEF(StrToFloat(Edit1->Text)); Edit2->Text=FloatToStrF(fremd,ffFixed,6,2); } //---------------------------------------------------------------------------
Nähere Erklärungen zum Befehl FloatToStrF gibt es hier: AnsiString Konvertierungsfunktionen
void __fastcall TForm1::RadioButton2Click(TObject *Sender) { {float fremd; Label4->Caption="1,4659"; Label2->Caption="Schweizer Franken"; fremd=rechneEF(StrToFloat(Edit1->Text)); Edit2->Text=FloatToStrF(fremd,ffFixed,6,2); } //--------------------------------------------------------------------------- void __fastcall TForm1::RadioButton3Click(TObject *Sender) { {float fremd; Label4->Caption="1,36168"; Label2->Caption="Dollar"; fremd=rechneEF(StrToFloat(Edit1->Text)); Edit2->Text=FloatToStrF(fremd,ffFixed,6,2); } //---------------------------------------------------------------------------
Die drei Ereignismethoden für die Radiobuttons können auch zu einer gemeinsamen Methode zusammengefasst werden. Die Methode wird RadioButtonClick genannt. Dabei verwendet man den Parameter Sender.
void __fastcall TForm1::RadioButtonClick(TObject *Sender) { float fremd; if (Sender==RadioButton1) {Label4->Caption="13,7603"; Label2->Caption="Schilling"; } if (Sender==RadioButton2) {Label4->Caption="1,4659"; Label2->Caption="Schweizer Franken"; } if (Sender==RadioButton3) {Label4->Caption="1,36168"; Label2->Caption="Dollar"; } fremd=rechneEF(StrToFloat(Edit1->Text)); Edit2->Text=FloatToStrF(fremd,ffFixed,6,2); } //---------------------------------------------------------------------------
Im Objektinspektor stellt man für jeden Radiobutton für das Standardereignis OnClick die Methode RadioButtonClick ein. In dieser Methode wird nun der Parameter Sender abgefragt. Je nachdem, von welchem Radiobutton die Ereignismethode nun aufgerufen wird, erhält die Variable Kurs den richtigen Wert und die Umrechnung wird gestartet.
In den Eingabefeldern sind nur ganz bestimmte Tasten sinnvoll (die Ziffern von 0 bis 9, das Komma und die Backspace-Taste. Um nur diese Tasten zuzulassen, kann das KeyPress-Ereignis benützt werden. Werden andere als die vorgesehenen Tasten gedrückt, wird der Parameter Key auf Null gesetzt.
void __fastcall TForm1::Edit1KeyPress(TObject *Sender, char &Key) {if (!((Key>='0')&&(Key<='9')||(Key==',')||(Key==8))) {Key=0; } if (Key==',' && Edit1->Text.Pos(",")!=0) { //verhindert 2 Kommas! Key=0; } }
Besser lesbar wird der Quelltext, wenn die verwendeten Spezial-ASCII-Werte wie Backspace zuvor mit #define als Konstante definiert werden, z.B.
#define BS 8 #define LEER 0
Die obige Funktion sieht damit folgendermaßen aus:
void __fastcall TForm1::Edit1KeyPress(TObject *Sender, char &Key) {if (!((Key>='0')&&(Key<='9')||(Key==',')||(Key==BS))) {Key=LEER; } if (Key==',' && Edit1->Text.Pos(",")!=0) { //verhindert 2 Kommas! Key=0; } }