Zum Inhalt springen

Eingabe eines Zeichens nicht zulassen


Empfohlene Beiträge

Hi,

ich hab ein Editfeld und möchte das der Benutzer ein bestimmtes Zeichen nicht

eingeben kann. Also das nichts passiert wenn er die Taste drückt.

Wie würdet ihr das am besten angehen?

Das ganze läuft mit der WindowsAPI, aber wenn ihr ne MFC Lösung habt hilft mir das

evtl. auch weiter.

Gruß

Guybrush

Link zu diesem Kommentar
Auf anderen Seiten teilen

So ähnlich hab ich`s auch schon probiert, nämlich das die Nachricht in dem Fall

nicht an die WndProc weitergeleitet wird.

Aber irgendwie erkennt er nicht wenn eine Taste gedrückt wird, weißt du vielleicht

warum?


while(GetMessage(&Msg,0,0,0))
{
if (!IsDialogMessage(hMainWindow,&Msg))
{
if (Msg.message == WM_KEYDOWN)
if ((char)Msg.wParam == '#')
continue;
TranslateMessage(&Msg);
DispatchMessage(&Msg);
}
}
[/PHP]

Link zu diesem Kommentar
Auf anderen Seiten teilen

Weil IsDialogMessage die Nachricht nicht nur prüft, sondern gegebenenfalls auch verarbeitet:

Because the IsDialogMessage function performs all necessary translating and dispatching of messages, a message processed by IsDialogMessage must not be passed to the TranslateMessage or DispatchMessage function.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ok, ich hab das mal auskommentiert und jetzt erkennt das Programm an

der Stelle einen Tastendruck. Allerdings kann ich anscheinend das Zeichen

so nicht abfragen, ich glaube ich muss dafür Virtuelle Keys benutzen.

Weißt du zufällig in welcher Headerdatei VK_A, VK_TAB usw. deklariert sind?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Komisch die VK_`s kennt der trotzdem nicht.

Aber wenn ich den Ascii Code vom 'a' hinschreibe geht`s irgendwie auch nicht,

es wird trotzdem im Editfeld hinzugefügt.


while(GetMessage(&Msg,0,0,0))
{
// if (!IsDialogMessage(hMainWindow,&Msg))
// {
if (Msg.message == WM_KEYDOWN)
if ((int)Msg.wParam == 97)
continue;

TranslateMessage(&Msg);
DispatchMessage(&Msg);
// }
}
[/PHP]

:confused:

Link zu diesem Kommentar
Auf anderen Seiten teilen

Achso...

Komischerweise hatte er aber den Ascii Code von einem 'A' wenn ich ein 'a'

eingegeben hab.

Ich bin jetzt einfach hingegangen und hab im Debuger gekuckt welchen Wert

wParam hat wenn ich die # drücke und den dann angegeben.

Ich weiß zwar nicht wieso bei der Raute der Code 191 ist, aber hauptsache es geht.

Danke!

Guybrush

Link zu diesem Kommentar
Auf anderen Seiten teilen

Original geschrieben von Guybrush Threepwood

Komischerweise hatte er aber den Ascii Code von einem 'A' wenn ich ein 'a'

eingegeben hab.

Die VK-Codes beziehen sich auf Tasten, nicht auf Zeichen. Man musste sich also für einen ASCII-Code entscheiden.

Ich weiß zwar nicht wieso bei der Raute der Code 191 ist, aber hauptsache es geht.
Das ist VK_OEM_2, es kann also sein, dass ein anderer Tastaturtreiber einen anderen Wert für die #-Taste liefert.

Kannst du nicht WM_CHAR abfangen? Da sollte im WPARAM der ASCII-Code drinstehen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...