MaskEdit Hex Eingabe



  • Hallo an alle, die bei diesem schönen Wetter vor dem Computer sitzen. 😃

    Mein Problem ist, das ich ein MaskEdit Eingabefeld habe und hier nur Eingaben zulassen will, die Hex Werten entsprechen also 0..9 und A..F. Nach langem suchen habe ich jetzt in der Borland Hilfe die Syntax für den EingabenMaskeneditor (FormatMaskText in der Hilfe) gefunden, jedoch bringt mich das auch nicht zum Ziel (glaube ich?). Weiß vielleicht jemand von euch wie ich das Problem löse. Optimal wäre es, wenn in dem MaskEdit Feld fest die 0x am Anfang drinnen stehen würde.
    Vielen Dank schon mal an alle.

    Gruß Alex

    PS: In der Suche und in den FAQ habe ich nichts gefunden, lasse mich aber gerne eines besseren belehren



  • Hallo

    das Problem ist, das durch die EditMask sich zwar Zahlen und Buchstaben unterscheiden lassen, aber nicht A-F von G-Z, sodas du mit den Buchstaben Probleme bekommst. Da helfen dir eher die OnKey...-Events, in denen du die Eingabe (zusätzlich?) filterst.

    bis bald
    akari



  • Hallo akari,
    klar die Bustaben G bis Z beziehungsweise g bis z sind das Problem. Hätte ich auch explizit schreiben können.
    Ich habs jetzt so gelöst(wie von Ihnen vorgeschlagen Danke!):

    void __fastcall TForm2::MaskEdit1KeyPress(TObject *Sender, char &Key)
    {
    	if ( (Key <'0') || (Key >'9' && Key < 'A') || (Key > 'F' && Key <'a') || (Key > 'f') )
        		Key = 0;
    }
    

    Zusätzlich filtere ich über Edit Mask alphanummerische Zeichen und lasse nur Großbuchstaben zu.
    Jetzt aber eine weitere Frage:
    Die Eingabe von 4 Zeichen ist Pflicht bei mir, wenn ich jetzt auf das letzte Zeichen klicke und etwas eingebe hätte ich gerne, das die Eingegebenen Zahlen nach links verschoben werden, damit ich weitere Zahlen eingeben kann.
    Im Klartext wäre es dann unrelevant wo ich hin klicke um meine Zahlen einzugeben.
    Ist es zudem möglich, das ich "0x" in das Feld eingebe ohne die Möglichkeit dies in der Anwendung zu editieren.

    Gruß Alex



  • Hallo

    Ist es zudem möglich, das ich "0x" in das Feld eingebe ohne die Möglichkeit dies in der Anwendung zu editieren.

    Das kannst du ja festlegen, indem du die EditMask (zusätzlich zur Filterung) auf "\0xAAAA" einrichtest. Dann hast du genau 4 Stellen.

    wenn ich jetzt auf das letzte Zeichen klicke und etwas eingebe hätte ich gerne, das die Eingegebenen Zahlen nach links verschoben werden, damit ich weitere Zahlen eingeben kann.

    Da wirst du wohl selber mit dem Event OnChange arbeiten müßen. Also TEdit::SelStart die Cursor-Position mit der Länge von TEdit::Text vergleichen und wenn Cursor nach letzten Zeichen, Textwert mit AnsiPos/Delete untersuchen und zurechtschneiden.

    Btw : Du brauchst hier niemanden zu siezen, das wirkt ... seltsam 😉

    bis bald
    akari



  • Danke akari,
    ich habs jetzt einfacher gelöst. Der Vollstandigkeit halber falls jemand irgendwann ein ähnliches Problem hat hier meine Lösung:

    void __fastcall TForm2::MaskEdit1Click(TObject *Sender)
    {
         if(MaskEdit1->Text.IsEmpty())
         	MaskEdit1->SelStart=2;
            //Wenn Feld leer setze Cursor an 3. Position (Position 1 und 2 sind "0x")
         else if(MaskEdit1->Text.Length()<4)
         	MaskEdit1->SelStart=MaskEdit1->Text.Length()+2;
      //Wenn Feld nicht voll setze Cursor an erste freie Position 0x ist nicht in Text
    }
    

    Ich danke Dir 😉 für deine Hilfe!!

    Gruß Alex


Anmelden zum Antworten