"Umrechnungsprobleme" in CMyEdit::PreTranslateMessage
-
Hallo!
Ich bin dabei ein Edit zu schreiben, dem ich einen Filter vorgeben kann, welche Zeichen angenommen werden dürfen.
Nun habe ich nach endlosem Rumsuchen auch viele Tasten gefunden, die ich für eine normale Handhabung zulassen muss und auch mit dem Zifferblock komme ich jetzt klar - aber momentan kriege ich den "." nicht hin.Der macht da immer ein 3/4-Zeichen draus.
Hier ist die Funktion.
Wenn ihr eine bessere habt, dann immer her damit.// Wurde eine Taste gedrückt? if (pMsg->message == WM_KEYDOWN) { UINT nKeyCode = pMsg->wParam; // virtual key code of the key pressed // nicht STRG + C / X / V? if ((nKeyCode == _T('C') || nKeyCode == _T('X') || nKeyCode == _T('V')) && (::GetKeyState(VK_CONTROL) & 0x8000)) { return CEdit::PreTranslateMessage(pMsg); } if ((nKeyCode == VK_ESCAPE) || (nKeyCode == VK_F10) || (nKeyCode == VK_F1) || (nKeyCode == VK_PRINT) || (nKeyCode == VK_HOME) || (nKeyCode == VK_END) || (nKeyCode == VK_TAB) || (nKeyCode == VK_INSERT) || (nKeyCode == VK_DELETE) || (nKeyCode == VK_LEFT) || (nKeyCode == VK_RIGHT) || (nKeyCode == VK_BACK)) { return CEdit::PreTranslateMessage(pMsg); } CString strZeichen = nKeyCode; switch(nKeyCode) { case VK_NUMPAD0: strZeichen = _T("0"); break; case VK_NUMPAD1: strZeichen = _T("1"); break; case VK_NUMPAD2: strZeichen = _T("2"); break; case VK_NUMPAD3: strZeichen = _T("3"); break; case VK_NUMPAD4: strZeichen = _T("4"); break; case VK_NUMPAD5: strZeichen = _T("5"); break; case VK_NUMPAD6: strZeichen = _T("6"); break; case VK_NUMPAD7: strZeichen = _T("7"); break; case VK_NUMPAD8: strZeichen = _T("8"); break; case VK_NUMPAD9: strZeichen = _T("9"); break; case VK_DECIMAL: strZeichen = _T(","); break; } if ((!m_strErlaubt.IsEmpty()) && (m_strErlaubt.Find(strZeichen) == -1)) { return TRUE; } } return CEdit::PreTranslateMessage(pMsg);
-
Servus,
einfach mal eine Frage an dich. Warum überprüfst du eigentlich nicht das letzte eingegebene Zeichen und wenns nicht passt dann löschst du es wieder? Du überprüfst doch jetzt alle gedrückte Tasten. Ist das nicht ein wenig umständlich???
*winke*
Hellsgore
-
Ist schon umständlich, aber ich glaube das flackerte so tierisch...
Ich guck mir das Morgen nochmal an...
Diese Funktion hatte ich aus einem Beispiel in CodeProject.
-
Ach was...
Ich hatte mir mal ein EDIT geschrieben, bei dem man eine Maske vorgeben kann und er anhand dieser den Text zulässt oder nicht. Dabei habe ich die beiden MSG SetText und GetText abgefangen, geguckt was dort für ein Zeichen engegeben wurde und dann zugelassen oder abgelehnt. Hatte noch so Features wie Negativzahlen rot darstellen und noch ein paar Dinger. Die Maske war ein property als string. Wenn du willst kann ich mal danach suchen, dann brauchst du denn Käse dort nicht zu machenAber so Editfelder gibts doch bestimmt schon fertig bei codeproject / codeguru oder nicht? Da bin ich mir eigentlich sicher, weil ich mir damals in den Arsch gebissen habe wegen der quasi verschwendeten Zeit.
*wink*
Hellsgore
-
Hi Hellsgore!
Ich gucke mal, ob ich mit deinem Ansatz weiter komme.
Wenn das nix wird melde ich mich nochmal.Ich wollte eine eigene Klasse aus dem einfachen Grund, dass die vorgefertigten meistens viel zu viel können und ich es nicht auf meine Bedürfnisse reduziert bekomme oder auch andere Funktionalitäten nicht eingebaut bekomme.
Es war im Prinzip ein Lernobjekt.