Sicherheitabfragen

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=='-'))) 
 {Key=0;
 }
 if (Key==',' && Edit1->Text.Pos(",")!=0) {  //verhindert 2 Kommas!
  Key=0;       
 }
 if (Key=='-' && Edit1->Text!="") {          //erlaubt ein Minus an erster Stelle! (negative Zahlen)
  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=='-'))) 
 {Key=LEER;
 }
 if (Key==',' && Edit1->Text.Pos(",")!=0) {  //verhindert 2 Kommas!
  Key=0;       
 }
 if (Key=='-' && Edit1->Text!="") {          //erlaubt ein Minus an erster Stelle! (negative Zahlen)
  Key=0;
  }
 
}
void __fastcall TForm1::Edit1KeyPress(TObject *Sender, System::WideChar &Key)
{
if (!((Key>='0')&&(Key<='9')||(Key==',')||(Key==8)))
 {Key=0;
 }
 if (Key==',' && Edit1->Text.Pos(",")!=0) {  //verhindert 2 Kommas!
  Key=0;
 }
 //Erlaubt nur 2 weitere Ziffern nach dem Komma!
 if (Edit1->Text.Length()-Edit1->Text.Pos(",")==2&&(Key!=8)&&Edit1->Text.Pos(",")!=0) {
	 Key=0;
 }