tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
5
ZUGRIFFE
478
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    ExtremeSnail ExtremeSnail ist offline Mitglied Gold
    Registriert seit
    Nov 2003
    Ort
    Hamburg
    Beiträge
    157
    Hallo,

    kann mir jemand sagen, wie ich ein Einagebfeld auf 25 zeichen beschränken kann?
    So dass wenn mehr Zeichen eingegeben werden einfach die letzten nicht mehr akzeptiert werden?

    Und dann hab ich noch die Frage, ob ich ein Eingabefeld so formatieren kann, dass nur Zahlen erlaubt sind, aber auch negative....

    Für Hilfe wäre ich sehr dankbar.
     

  2. #2
    Registriert seit
    Jul 2003
    Ort
    Duisburg (NRW)
    Beiträge
    1.788
    Hier kommt ein Schnipsel für dich!

    PreTranslateMessage() wird vor der Verarbeitung jeder Windowsnachricht aufgerufen (Mit Classwizard in den Dialog einsetzen!). Damit kannst du alles abfangen, was du willst. Wenn du nichts unternehmen willst, gib ein TRUE zurück - dadurch wird das Standardverhalten (z.B. Einfügen eines Zeichens) ausgelöst.
    Wenn du zum Beispiel eine Längenprüfung einbauen willst, könntest du das bei WM_CHAR machen und bei zu lngem String das Zeichen nicht einfügen und ein FALSE zurückgeben (sonst wird er doch noch eingefügt). Nicht vergessen, dass gewisse Tasten (Backspace) auch zur Verkürzung führen können. Ausserdem berücksichtigen, was Copy&Paste anrichten könnten!

    Das Beispiel fängt das 'x' ab und ersetzt es durch ein 'u'. Ich habe den Schnipsel in dieser Form nicht kompiliert; es können sich also Fehler eingeschlichen haben.
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    
    BOOL CEinDlg::PreTranslateMessage(MSG* pMsg) 
    {
      if ( pMsg->hwnd == m_ctlEdit.GetSafeHwnd() && pMsg->message == WM_CHAR  )
      {
        char c = pMsg->wParam;
        if ( c == 'x' )
        {
          // es ist ein x, also ein u draus machen
          c = 'u';
          CString temp;
          m_ctlEdit.GetWindowText( temp );
          temp += c;
          m_ctlEdit.SetWindowText( temp );
          return FALSE;
        }
        else    
        {
          // es ist was anderes, also Defaultverhalten
          return TRUE;
        }
      }
      else
      {
        // ist irgendwas anderes -  ignorieren
        return CDialog::PreTranslateMessage(pMsg);
      }
    }
    Ich hoffe, das hilft dir weiter!
    Geändert von Kachelator (12.02.04 um 10:37 Uhr)
     
    Chor: "Wir sind der Chor, und wir stimmen zu. Wir stimmen zu, wir stimmen zu, wir stimmen zu."

  3. #3
    ExtremeSnail ExtremeSnail ist offline Mitglied Gold
    Registriert seit
    Nov 2003
    Ort
    Hamburg
    Beiträge
    157
    Irgendwie steig ich da nicht so richtig durch....

    Kansnt du mir das vielleicht etwas genauer erklären?
     

  4. #4
    Registriert seit
    Jul 2003
    Ort
    Duisburg (NRW)
    Beiträge
    1.788
    Vielleicht, wenn du mir erklärst, was du nicht verstehst? Ansonsten erschien mir die Information recht vollständig zu sein.
     
    Chor: "Wir sind der Chor, und wir stimmen zu. Wir stimmen zu, wir stimmen zu, wir stimmen zu."

  5. #5
    ExtremeSnail ExtremeSnail ist offline Mitglied Gold
    Registriert seit
    Nov 2003
    Ort
    Hamburg
    Beiträge
    157
    Hi,

    ich hab das nun so gemacht, dass ich für die Eingabefelder Membervariablen mithilfe des Klassenassistenten erstellt habe und diese Variablen dann so eingestellt habe, dass halt nur 25 Zeichen bzw eine Zahl von 1900 bis 2100 eingegeben werden dürfen.

    Kann mir jemand sagen, wie ich es nun schaffe ein EIngabefeld zu leeren also so das es blank ist, auch wenn es als Integerfeld eingestellt ist?

    Weil das was ich sonst benutze sowas wie: m_strTitel = " ";

    Geht in diesem Falle nicht....
     

  6. #6
    Registriert seit
    Jul 2003
    Ort
    Duisburg (NRW)
    Beiträge
    1.788
    Oh, ich hatte angenommen, dass du Edit-Controls als Member verwendest anstelle von CStrings.

    Die CEdit kannst du dir statt CStrings vom Classwizard einsetzen lassen. Das solltest du vielleicht tun, da du dadurch wesentlich mehr Kontrolle über das Verhalten bekommst. Die Verwendung ist auch nicht allzu knifflig. Mein Codeschnipsel von oben bezog sich übrigens auf die Verwendung eines CEdit.
     
    Chor: "Wir sind der Chor, und wir stimmen zu. Wir stimmen zu, wir stimmen zu, wir stimmen zu."

Ähnliche Themen

  1. Eingabefelder hinzufügen
    Von Calab im Forum Visual Basic 6.0
    Antworten: 2
    Letzter Beitrag: 14.04.06, 20:12
  2. C++ - Eingabefelder
    Von DO1983 im Forum C/C++
    Antworten: 5
    Letzter Beitrag: 05.11.04, 00:09
  3. Eingabefelder.....
    Von BigBruder im Forum HTML & XHTML
    Antworten: 2
    Letzter Beitrag: 15.11.03, 08:13
  4. Eingabefelder
    Von BlackJack im Forum PHP
    Antworten: 4
    Letzter Beitrag: 18.11.01, 11:59
  5. 3d-Eingabefelder
    Von Kimble im Forum CSS
    Antworten: 7
    Letzter Beitrag: 16.10.01, 10:47