Formatmasken



  • Hallo,

    weiß jemand wo eine detaillierte Auflistung möglicher Maskierungen zu finden ist? Ich habe das Problem, dass ich Felder einer Tabelle maskieren möchte aber nicht weiß wie 🙄 Ich bräuchte eine detaillierte Beschreibung, wie ich diese Maskierungsstrings aufbaue. Kann mir jemand helfen?

    Vielen Dank !



  • Deine Problembeschreibung ist nicht wirklich aufschlussreich. Was konkret meinst du mit "Felder einer Tabelle maskieren"?



  • Ok ich geb zu meine Beschreibung war nicht besonders einleuchtend 🙂
    Also das Problem ist folgendes: Ich habe eine TStringGrid-Komponente innerhalb meiner Anwendung. In dieser Komponente möchte ich gerne den einzelnen Zellen Formatmaskierungen zuordnen, d.h. ich möchte beispielsweise in einigen Zellen festlegen, dass nur Kommawerte mit beliebig vielen Vorkomma- aber nur zwei Nachkommastellen eingegeben werden können. Ich habe erfahren, dass es mit dem Ereignis onGetEditMask der TStringGrid-Komponente möglich ist, solche Maskierungen den einzelnen Zellen hinzuzufügen. Das klappt auch sehr gut. Mein Problem ist jetzt, dass ich den genauen Aufbau solcher Strings nicht kenne, denn so weit ich das verstanden habe, haben die nichts mit den "normalen" Formatstrings zu tun, die man von printf her kennt (z.b. "%.2f").
    Ich suche nun eine Beschreibung, wie solche "Maskierungsstrings" aufgebaut werden können bzw. was mit ihnen alles realisiert werden kann.
    Ich hoffe, ich konnte nun etwas deutlicher schildern, wo mein Problem liegt. Ich weiß selbst nicht richtig wie ich das formulieren soll 😃

    Auf jeden Fall vielen Dank für die Hilfe !



  • In der Hilfe zu OnGetEditmask gibt's oben einen Link namens "Siehe auch". So gelangt man zu TCustomEditMaskEdit::EditMask, wo dann, Überraschung, das EditMask-Format erklärt wird. 😉



  • Erstmal vielen Dank für Deine Antwort. Also entweder bin ich zu blöd für das Thema hier oder ich habe eine andere Version. 😃 Bei mir wird da nichts erklärt, da steht nur, wofür eine solche Maskierung verwendet wird. Falls Du das Beispiel mit der amerikanischen Telefonnummer meinst, das habe ich bereits gesehen. Ich bräuchte eben eine Erklärung aller möglichen Maskierungsfunktionen. Was bedeutet z.B. die 1; am Schluss? Ich habe es mal ausprobiert aber nicht herausfinden können, weshalb sie angegeben wird. Es muss doch irgendwo eine Beschreibung dieser Masken geben !!! 😕



  • Die Eigenschaft EditMask definiert die Maske, mit der festgelegt wird, welche Eingaben im maskierten Steuerelement gültig sind.

    __property AnsiString EditMask = {read=FEditMask, write=SetEditMask};

    Beschreibung

    Mit Hilfe der Eigenschaft EditMask können Sie festlegen, welche Zeichen und Formate im maskierten Steuerelement gültig sind. Versucht der Benutzer, ein ungültiges Zeichen einzugeben, wird dieses nicht angenommen. Die Überprüfung wird von der Methode ValidateEdit zeichenweise durchgeführt.

    Eine Maske besteht aus drei Feldern, die durch Semikolons voneinander getrennt sind. Das erste Feld ist die Maske selbst. Das zweite Feld besteht aus einem Zeichen und bestimmt, ob die literalen Zeichen der Maske mit den Daten gespeichert werden. Das dritte Feld legt das Zeichen fest, das für noch nicht eingegebene Zeichen angezeigt wird.

    Die folgenden speziellen Zeichen werden im ersten Feld der Maske verwendet:

    Zeichen	Bedeutung in der Maske
    
          !	Das Zeichen ! gibt in einer Maske an, daß optionale Zeichen als führende Leerzeichen dargestellt werden.
     Ist kein !-Zeichen vorhanden, werden optionale Zeichen im EditText-Objekt als abschließende Leerzeichen dargestellt.
         >	Wird das Zeichen > in einer Maske angegeben, werden alle nachfolgenden Zeichen in Großbuchstaben 
    umgewandelt, bis das Ende der Maske erreicht ist oder das Zeichen < angetroffen wird.
         <	Wird das Zeichen < in einer Maske angegeben, werden alle nachfolgenden Zeichen in Kleinbuchstaben 
    umgewandelt, bis das Ende der Maske erreicht ist oder das Zeichen > angetroffen wird.
    
         <>	Werden diese beiden Zeichen zusammen verwendet, findet keine Überprüfung der Groß-/Kleinschreibung statt. 
    Die Daten werden in der Schreibweise formatiert, in der sie vom Benutzer eingegeben werden.
         \	Nach dem Zeichen \ folgt ein literales Zeichen. Mit seiner Hilfe können die speziellen Maskenzeichen als 
    Literale in den Daten angegeben werden.
         L	An dieser Stelle muß ein Buchstabe (A-Z, a-z) eingegeben werden.
         l	An dieser Stelle ist ausschließlich ein Buchstabe erlaubt. Eine Eingabe ist jedoch nicht erforderlich.
    
         A	An dieser Stelle muß ein alphanumerisches Zeichen (A-Z, a-z, 0-9) eingegeben werden.
         a	An dieser Stelle ist ausschließlich ein alphanumerisches Zeichen erlaubt. Eine Eingabe ist jedoch nicht erforderlich.
         C	An dieser Stelle muß ein beliebiges Zeichen eingegeben werden.
         c	An dieser Stelle kann ein beliebiges Zeichen eingegeben werden. Eine Eingabe ist jedoch nicht erforderlich.
         0	An dieser Stelle muß ein numerisches Zeichen eingegeben werden.
    
         9	An dieser Stelle darf ausschließlich ein numerisches Zeichen angegeben werden. Eine Eingabe ist jedoch nicht erforderlich.
         #	An dieser Stelle darf ausschließlich ein numerisches Zeichen oder ein Plus- bzw. Minuszeichen eingegeben werden.
     Eine Eingabe ist jedoch nicht erforderlich.
         :	Das Zeichen : wird verwendet, um in Zeitangaben Stunden, Minuten und Sekunden zu trennen. Ist unter Ländereinstellungen 
    in der Systemsteuerung ein anderes Trennzeichen eingestellt, wird dieses statt dessen verwendet.
    
         /	Mit dem Zeichen / werden in einer Datumsangabe der Monat, der Tag und das Jahr voneinander getrennt. Ist unter 
    Ländereinstellungen in der Systemsteuerung ein anderes Trennzeichen eingestellt, wird dieses statt dessen verwendet.
         ;	Das Zeichen ; wird verwendet, um die drei Felder der Maske voneinander zu trennen.
         _	Das Zeichen _ fügt automatisch Leerzeichen in den Text ein. Bei der Eingabe in das Feld werden diese Zeichen 
    vom Cursor übersprungen.
    

    Alle nicht in der Tabelle aufgeführten Zeichen können im ersten Feld der Maske als literale Zeichen angegeben werden. Literale Zeichen werden automatisch eingefügt und vom Cursor beim Bearbeiten übersprungen. Die speziellen Maskenzeichen können auch als Literale angegeben werden, sofern ihnen das Zeichen \ vorangestellt wird.

    Das Zeichen im zweiten Feld der Maske gibt an, ob die in der Maske enthaltenen literalen Zeichen zusammen mit dem Text des Eingabefeldes gespeichert werden. So kann beispielsweise die Maske für eine Telefonnummer mit Vorwahl folgendermaßen angegeben werden:

    (00000)_0000000;0;*

    Der Wert 0 im zweiten Feld gibt an, daß die Eigenschaft Text des Steuerelements aus den 10 einzugebenden Ziffern besteht und nicht aus den 14 Zeichen, aus denen sich die Nummer im Eingabefeld zusammensetzt.

    Eine 0 im zweiten Feld legt fest, daß Literale nicht gespeichert werden. Bei jedem anderen Zeichen werden sie als Teil des Textes behandelt. Dieser Wert kann mit der Eigenschaft EditMask im Objektinspektor oder im Programm durch Ändern der typisierten Konstante MaskNoSave eingestellt werden.

    Das dritte Feld der Maske enthält das Zeichen, das im Eingabefeld für Leerstellen (nicht eingegebene Zeichen) angezeigt wird. In der Voreinstellung entspricht es dem für literale Leerzeichen verwendeten Zeichen. Beide Zeichen werden im Eingabefenster identisch angezeigt. Gibt der Benutzer jedoch Informationen in das Feld ein, werden die Leerstellen der Reihe nach ausgewählt, während die Leerzeichen übersprungen werden.

    Bei Angabe eines leeren Strings für EditMask wird die Maske entfernt.

    Hinweis

    Bei Multibyte-Zeichensätzen wie dem japanischen Shift-JIS entspricht jedes Maskenzeichen einem einzelnen Byte. Zum Festlegen von Doppelbyte-Zeichen mit den Bezeichern L, l, A, a, C oder c müssen die Maskenzeichen auch verdoppelt werden. LL stellt beispielsweise zwei alphabetische Einzelbyte-Zeichen oder ein Doppelbyte-Zeichen dar. Es werden nur literale Einzelbyte-Zeichen unterstützt.



  • Cool, vielen Dank. Das ist genau das, wonach ich gesucht habe. Das gibts bei mir in der Hilfe tatsächlich nirgends.

    Vielen Dank auf jeden Fall !


Log in to reply