[Problem]MaskEdit einzelne Zeichen abfragen und ändern
-
Ich hab ein MaskEdit mit er long Time Maske also ::__ und um eingaben wie
12:76:89 zu verhinden hab ich versucht hiermitif (MaskEdit1->Text[4]!=L' ') { if (StrToInt(MaskEdit1->Text[4])>=6) { MaskEdit1->Text[4]='5'; } } if (MaskEdit1->Text[7]!=L' ') { if (StrToInt(MaskEdit1->Text[7])>=6) { MaskEdit1->Text[7]='5'; } }
die stellen abzufragen und zu ändern.
aber das klappt nicht.
ich hab onchange, onkeydown, onkeyup und onkeypress getestet.
-
Alternativ kannst du den Benutzer erstmal die Zeit eintragen lassen und danach abschließend mit TryStrToTime() prüfen. Im Fehlerfall kannst du es anzeigen und den Cursor wieder zurück in das Feld setzen.
-
du könntest auch einen TDateTimePicker verwenden
-
Hi,
für diese Komponente gibts für die Prüfung die Methode ValidateEdit :
BCB-Hilfe schrieb:
Die Methode ValidateEdit validiert den String EditText mit Hilfe der aktuellen Maske.
void __fastcall ValidateEdit(void);
Beschreibung
ValidateEdit validiert EditText nach jedem Tastendruck bzw. nach jedem Versuch, das maskierte Eingabefeld zu verlassen.
Stimmt EditText nicht mit der Maske überein, ruft ValidateEdit die Methode ValidateError auf, um eine Exception auszulösen,
und setzt den Cursor an die erste Position, die sich nicht mit der Maske deckt.Du musst also nur ValidateEdit aufrufen...
edit:
Achso, dein obiger Code müsste in etwa so aussehen:
//Bei Programmstart setzen: MaskEdit->EditMask = "!90:00:00;1;_"; MaskEdit->Text = "00:00:00"; // OnChange void __fastcall TForm1::MaskEditChange(TObject *Sender) { // MaskEdit nach jeder Änderung auslesen, Zeichen prüfen und // zum Schluss wieder ersetzen. String Line = MaskEdit->Text; if (StrToInt(Line[4]) > 5) Line[4] = '5'; if (StrToInt(Line[7]) > 5) Line[7] = '5'; // String wieder zuweisen MaskEdit->Text = Line; } //---------------------------------------------------------------------------
ValidateEdit muss wohl nur explizit aufgerufen werden, wenn die Maske zwischendurch gelöscht wurde.
Auf jeden Fall werden schon mal alphanumerische Zeichen ignoriert.mfg
kpeter