Verwendung TEditMask



  • Hallo, liebe Kollegen!

    Bin nach fast zehn Jahren Perl und später PHP, wieder C-rückfällig geworden. Nun probiere ich schon eine Weile mit dem C++ Builder herum und wenns mal hängt, finde ich, nicht zuletzt in diesem Forum, eigentlich immer die richtige Antwort.

    Wo ich seit gestern jedoch partout nicht vorankomme, ist die Verwendung von TEditMask. Scheint ein echtes Geheimnis zu sein, nur die Chinesen wissen Antwort.

    Hat vielleicht jemand einen Link zu einem kurzen Quellcode wo ich ersehen kann wie man TEditMask anwendet? Konkret versuche ich das gerade auf ein TValueListEditor anzuwenden oder auf ein TEdit.

    Freue mich über Tipps.

    Grüße
    Rob



  • Der Typ TEditMask wird für die Maske verwendet, die Benutzereingaben überprüft und formatiert.

    Unit

    MaskUtils

    typedef AnsiString TEditMask

    Beschreibung

    TEditMask ist ein String, der aus drei durch Semikolon getrennten Feldern besteht. Das erste Feld enthält die Maske selbst. Das zweite Feld ist das Zeichen, das festlegt, ob die literalen Zeichen der Maske als Teil der Daten gespeichert werden.

    Die folgenden Zeichen können im ersten Feld der Maske verwendet werden:

    Zeichen	Bedeutung in der Maske
    
     !	Wird in der Maske das Zeichen ! verwendet, werden optionale Zeichen im Text als führende Leerzeichen dargestellt. Fehlt das Zeichen !, werden optionale Zeichen im Text als abschließende Leerzeichen dargestellt.
     >	Wird in der Maske das Zeichen > verwendet, sind alle folgenden Zeichen bis zum Ende der Maske oder bis zum Zeichen < Großbuchstaben.
     <	Wird in der Maske das Zeichen < verwendet, sind alle folgenden Zeichen bis zum Ende der Maske oder bis zum Zeichen > Kleinbuchstaben.
    
     <>	Werden in der Maske diese beiden Zeichen zusammen verwendet, wird keine Prüfung der Groß-/Kleinschreibung durchgeführt. Die Groß-/Kleinschreibung wird so übernommen, wie sie der Benutzer eingibt.
    \	Das Zeichen, das auf \ folgt, soll als literales Zeichen interpretiert werden. Verwenden Sie dieses Zeichen, wenn eines der Maskenzeichen als Literal in die Daten übernommen werden soll.
     L	Das Zeichen L verlangt an dieser Position einen Buchstaben (in Deutschland A-Z und a-z).
    
     l	Das Zeichen l läßt an dieser Position nur einen Buchstaben zu, erfordert ihn aber nicht.
    A	Das Zeichen A verlangt an dieser Position ein alphanumerisches Zeichen (in Deutschland A-Z, a-z und 0-9).
     a	Das Zeichen a läßt an dieser Position ein alphanumerisches Zeichen, erfordert es aber nicht.
    C	Das Zeichen C verlangt an dieser Position ein beliebiges Zeichen.
     c	Das Zeichen c läßt an dieser Position ein beliebiges Zeichen zu, erfordert es aber nicht.
     0	Das Zeichen 0 verlangt an dieser Position ein numerisches Zeichen.
    
     9	Das Zeichen 9 läßt an dieser Position ein numerisches Zeichen zu, erfordert es aber nicht.
    #	Das Zeichen # läßt an dieser Position ein numerisches Zeichen oder ein Plus- bzw. Minuszeichen zu, erfordert es aber nicht.
    :	Das Zeichen : dient dazu, in Zeitangaben Stunden, Minuten und Sekunden voneinander zu trennen. Wenn die Ländereinstellungen in der Systemsteuerung Ihres Rechners ein anderes Trennzeichen vorsehen, wird dieses anstelle von : verwendet.
     /	Das Zeichen / dient dazu, in Datumsangaben Jahr, Monat und Tag voneinander zu trennen. Wenn die Ländereinstellungen in der Systemsteuerung Ihres Rechners ein anderes Trennzeichen vorsehen, wird dieses anstelle von / verwendet.
    
     ;	Das Zeichen ; trennt die drei Felder der Maske voneinander.
     _	Das Zeichen _ fügt automatisch Leerzeichen in den Text ein. Wenn der Benutzer Zeichen in das Feld eingibt, überspringt der Curosr das Zeichen _.
    

    Jedes Zeichen, das nicht in der obigen Tabelle enthalten ist, kann im ersten Teil der Maske als Literal angegeben werden. Literale Zeichen müssen exakt mit den Zeichen im Eingabefeld übereinstimmen. Sie werden automatisch eingefügt und der Cursor überspringt diese Zeichen beim Bearbeiten. Auch die Maskenzeichen selbst können als Literale verwendet werden, wenn ihnen ein umgekehrter Schrägstrich (\) vorangestellt ist.

    Das zweite Feld der Maske enthält ein einzelnes Zeichen, das angibt, ob die literalen Zeichen der Maske im Text des Eingabefelds enthalten sein sollen. Die Maske für eine Telefonnummer mit Vorwahl könnte beispielsweise so aussehen:

    (000)_000-0000;0;*

    Die 0 im zweiten Feld legt fest, daß die Eigenschaft Text des Eingabefeldes aus den zehn eingegebenen Ziffern bestehen soll, nicht aus den 14 Zeichen, die im Eingabefeld erscheinen.

    Eine 0 im zweiten Feld gibt an, daß Literale ignoriert werden, alle anderen Zeichen geben an, daß sie einbezogen werden. Das Zeichen, das dies festlegt, kann im Eigenschaftseditor oder programmseitig in der typisierten Konstante MaskNoSave
    geändert werden.

    Das dritte Feld der Maske ist das Zeichen, das im Eingabefeld für Leerzeichen eingesetzt wird (Zeichen, die nicht eingegeben wurden). Per Vorgabe ist dies dasselbe Zeichen, das für literale Leerzeichen steht. Die beiden Zeichen werden im Eingabefeld identisch dargestellt. Wenn ein Benutzer jedoch den Text in einem maskierten Eingabefeld bearbeitet, markiert der Cursor alle leeren Zeichen, überspringt aber alle Leerzeichen.

    Hinweis

    Wenn Sie mit Multibyte-Zeichensätzen arbeiten, wie z.B. dem japanischen Shift-JIS, steht jedes Maskenzeichen für ein Byte. Wenn Sie also die Maskenzeichen L, l, A, a, C oder c auf Multibyte-Zeichen anwenden, müssen Sie die Maskenzeichen duplizieren. LL steht beispielsweise für zwei numerische Einzelbyte-Zeichen oder für ein Doppelbyte-Zeichen. Als literale Zeichen werden nur Einzelbyte-Zeichen unterstützt.



  • Vielen Dank für Deine Mühe. So stehts in der Borland-Hilfe 🙂

    Was ich viel mehr nicht verstehe ist, wie man TMaskEdit auf ein TValuaListEditor Element anwendet. Ich habe das irgendwo gelesen, dass das geht, bzw. ist auf jedes Element anwendbar, es stand aber nicht dabei, wie. OOP ist für mich moentan noch Böhmische Dörfer ...



  • Hi,

    der TValueListEditor ist eine Komponente, abgeleitet von TCustomDrawGrid. Dieses hat bereits ein Event OnGetEditMask.
    Was willst du also mit TMaskEdit?

    Beispiel:

    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner)  : TForm(Owner)
    {
       StringGrid1->Cells[2][0] = "Phone Number";
    }
    //---------------------------------------------------------------------------
    
    void __fastcall TForm1::ValueListEditor1GetEditMask(TObject *Sender, int ACol, int ARow,
              UnicodeString &Value)
    {
       if (StringGrid1->Cells[ACol][0] == "Phone Number") {
    	Value =  "!\(999\)000-0000;1";
       }
    }
    

    Auch aus der BCB-Hilfe 😉

    mfg
    kpeter



  • Klasse! Das wars!

    Ganz herzlichen Dank für Deine Mühe! 🙂 🙂 🙂

    Die VCL bzw. die Zusammenhänge erschließen sich mir erst nach und nach. Dass man das so macht, da wäre ich samt Doku nie drauf gekommen.

    Falls Du eines hast: Eine schönes verlängertes Wochenende!

    Rob



  • regexp schrieb:

    Falls Du eines hast: Eine schönes verlängertes Wochenende!

    Dito !

    Es geht nach Rügen ! 🕶


Anmelden zum Antworten