Eingabefeld Zeichensatz limitieren



  • Hallo,

    ich möchte, dass man in mein Eingabefeld nur Hex-Zeichen eintragen kann.
    Also ein "R" oder "K" soll daher gar nicht erst akzeptiert werden und auch nicht dargestellt werden in dem Eingabefeld.
    Wie könnte man das realisieren?

    mfg
    Fred



  • EN_CHANGE (ist eine EditControl-Message, sobald der Inhalt geändert wird)



  • Hi,

    ja das ist mir bekannt, aber das müsste ich ja dann wirklich selbst alles programmieren ob nun z.B. ein "R" gedrückt wurde und dann den String der aus dem Edit-Feld eingelesen müsste wieder das "R" raus löschen und dann den String wieder dort einsetzen etc. Das ist ja schon aufwendig..
    Ich dachte vielleicht gibt es so was wie EM_LIMITTEXT nur für die Zeichen die akzeptiert werden.
    Gibt's so etwas nicht?

    mfg
    Fred



  • Du kannst meines Wissens nach nur bestimmen, das ein EditControl nur Ziffern zur Eingabe zuläßt...

    Alles andere mußt Du selbst programmieren...



  • Hmm schade. Dann muss ich das wohl tun.
    Thx.

    mfg
    Fred



  • Man kännte das Edit auch subclassen und denn WM_CHAR abfangen. Ob das allerdings einfacher ist, wie auf EN_CHANGE zu reagieren, weiß ich nicht.

    Ein andere Möglichkiet wäre das Edit mit einem Spin-Controll zu versehen, da kann man einstellen, dass die Zahlen im hex-Format angezeigt werden sollen.



  • Ist doch ganz einfach!
    Du musst das Edit Feld subclassen.
    Wird etwas anderes als Zahlen, A, B, C, D, E, F gedrückt machst du ein return 0 und schon können andere Sachen nicht eingegeben werden...

    ciao
    😃



  • Ich habe es jetzt schon gelöst:

    ret=GetDlgItemText(hDlg,ItemID,temp,16);
    
    if(ret>0)
    if(TestHex(temp[ret-1])) 
    {
        temp[ret-1]='\0';
        SetDlgItemText(hDlg,ItemID,temp);
        SendMessage(hID,EM_SETSEL,(WPARAM)ret,(LPARAM)-1);
    }
    
    int TestHex(char c)
    {
        if((c!='0')&&(c!='1')&&(c!='2')&&(c!='3')&&(c!='4')&&(c!='5')&&(c!='6')&&(c!='7')&&(c!='8')&&(c!='9')&&(c!='A')&&(c!='a')&&(c!='B')&&(c!='b')&&(c!='C')&&(c!='c')&&(c!='D')&&(c!='d'  )&&(c!='E')&&(c!='e')&&(c!='F')&&(c!='f')) return 1;
    
    else return 0;
    }
    

    Ist zwar nicht so elegant, aber wirksam..

    mfg
    Fred

    [ Dieser Beitrag wurde am 04.05.2003 um 21:00 Uhr von Fred99 editiert. ]


Anmelden zum Antworten