In CEdit Text formatiern ähnlich IP



  • Ich möchte ein Edit-Feld haben, das ähnlich wie das IP-Adressen-Feld funktioniert.

    Funktion: Ich gebe Zahlen ein nach spätestens 3 Zahlen springt der Cursor hinter den nächsten Punkt was auch mit dem Cursor (rechts) auch geht.

    Ich möchte nämlich ein Editfeld, wo man das Datum eingibt, die Punkte zur Trennung aber im Feld schon stehen. (Wer WISO Sparbuch kennt, weis was ich meine)

    Wie kann man das verwirklichen?



  • Hi,
    warum verwendest du dazu nicht den DateTimePicker ?

    mfg TakeItEasy!



  • Nimmer dochkeine Editfeld sondern gleich Das Steuerelement "IP-Adresse" (neben Monatskalender und unter Datums-/Zeitauswahl).Diesem Steuerelement übergiebst du mit.

    GetDlgItem(IDC_IPADDRESS1)->SetWindowText(m_ipadresse);

    Deine und alles sieht so aus wie du es möchtest.



  • Das mit dem Datum ist ja ein Beispiel. Ich möchte es ja auch für andere Sachen verwenden z.B. Interne Nummern, Firma xyz hat xyz.???. Die erste ist die nummer für die Firma, ??? für z.B. Auftragsnummer (oder ähnliches).



  • Hi,
    also am einfachsten wären drei Editfelder direkt nebeneinander. Dann kannste sobald im ersten 3 Zeichen eingegeben wurden den Fokus aufs 2. setzen und so weiter. Bsp:

    void CDeinDlg::OnChangeEdit1()
    {
        UpdateData();
    
        if(m_strVariableDeinesErstenEditfeldes.GetLength() == 3)
          GetDlgItem(IDC_ZWEITESEDITFELD)->SetFocus();
    }
    

    u.s.w.

    Wenn du aber nur ein Editfeld haben willst. Müssen die Punkte vorher drin sein ? Ansonsten könntest du nach 3 Zeichen einen Punkt einfügen. OK, wenn die Punkte da sein sollen, fülle das Editfeld vorher mit " . . ." Wenn er dann das dritte Zeichen geschrieben hat, musste den Cursor an die 4. Position setzen(keine Ahnung, wie das geht). Und dann haste noch das Problem mit den Pfeiltasten.......
    Nimm einfach 3 Editfelder. Ist das beste. Und wegen den Pfeiltasten. Meine Lösung dazu bei drei Editfeldern. Erstelle eine Klasse von CEdit abgeleitet. Darin fügst du die Funktion OnKeyDown(...) hinzu. Dann deklarierst du drei Klassenvariablen (für die drei Editfelder) und verknüpfst diese mit den Editfeldern:

    void CDeinDlg::DoDataExchange(CDataExchange* pDX)
    {
        CDialog::DoDataExchange(pDX);
            DDX_Text(pDX, IDC_DEINEDITFELD1, m_VariableDerEditKlasseFür1.Editfeld);
            // selbiges für die beiden anderen Editfelder
        //{{AFX_DATA_MAP(CRegSicherungDlg)
        //}}AFX_DATA_MAP
    }
    

    So, dann musste nur noch in der OnKeyDown-Funktion auf VK_RIGHT oder VK_LEFT testen.

    Edit:
    Falls das mit VK_RIGHT und VK_LEFT unter OnKeyDown(...) nicht funktioniert, kam bei mir schon vor, dann probier es in PreTranslateMessage(...).

    So, ich hoffe, ich konnte dir weiterhelfen.

    mfg TakeItEasy!

    [ Dieser Beitrag wurde am 15.01.2003 um 21:58 Uhr von takeiteasy editiert. ]



  • Moin,
    vielleicht hilft Dir ja das CExEdit. Ist aber ein ActiveX Steuerelement und heisst Masked Edit Control.

    Gruß, Tom


Anmelden zum Antworten