Editfeld nach 2.Nachkommastellen "sperren"

Specialguest@home

Erfahrenes Mitglied
Hallo

Ich würde gerne wissen wie ich es anstellen kann dass in einem Editfeld (CEdit) dobble werte eingeben werden und zwar nur bis zur 2. Nachkommastelle?

Das Abfangen der Zeichen außer
1234567890,.
hab ich bereits in der PreTarnslateMessage abgefangen. Ich weiß leider nicht wie ich es schaffen soll das ich dem Editfeld sage dass es ab der 2. Nachkommastelle keine weiteren Werte in das Editfeld aufnehmen soll?
Hat jemand von euch schonmal ein ähnliches Problem gehabt und es lösen können :)
Würde mich über jede Anregung freuen!

sven
 
Ich würde einen Command-Handler hinzufügen (OnCommand). Da kannste dann alle Events für Dein Edit-Feld "zu Fuß" bearbeiten.
 
Eigentlich muss man nur überprüfen, an welcher Stelle der Cursor im Text steht (bin mir nicht sicher, ob und wie das geht).

Wenn man die Stelle hat, dann prüfen, ob der Cursor gerade nach einem Punkt oder Komma ist, und ob da schon 2 Stellen sind. Wenn ja, return TRUE und PreTranslate gibt die Message NICHT an die Edit weiter.
 
@Endurion
danke
so in der Art hab ich es bereits, ich weiß wenn ich meine 2 Nachkommastellen erreicht habe! Dann nehme ich dem Edit einfach den currsor weg! Nur um dies wirklich gut zu machen möchte ich das halt der focus sowie der currsor im Edit bleibt! z.Z ist es bei mir so das nach der Eingabe der 2.NK zahl der Eingabecurrsor verschwindet und ich ihn auch erst wieder bekommen wenn ich den Focus in ein anderes Editfeld setze. Genau das ist ein wenig umständlich für den User!

@Skandalos
Danke aber wie komme in einer Dialoganwendung an die "(OnCommand)" message ran!
über die View oder Mainframe weiß ich es ja aber im dialog ?

sven
 
Specialguest@home hat gesagt.:
@Endurion
danke
so in der Art hab ich es bereits, ich weiß wenn ich meine 2 Nachkommastellen erreicht habe! Dann nehme ich dem Edit einfach den currsor weg! Nur um dies wirklich gut zu machen möchte ich das halt der focus sowie der currsor im Edit bleibt! z.Z ist es bei mir so das nach der Eingabe der 2.NK zahl der Eingabecurrsor verschwindet und ich ihn auch erst wieder bekommen wenn ich den Focus in ein anderes Editfeld setze. Genau das ist ein wenig umständlich für den User!
sven

Ja, reicht es denn dann nicht, wenn ein ungültiger Tastendruck kommt, diesen einfach nicht weiterbearbeiten lassen? Dann brauchst du auch den Cursor nicht gross zu verstecken.

Einfach ein MessageBeep und return ungleich 0, und die Edit bekommt den Tastendruck nicht. Eventuell musst du das für OnChar UND OnKeyDown machen, das OnKeyUp sollte die Edit dann ja nicht weiter stören.
-> Das geht davon aus, dass du in PreTranslateMessage WM_CHAR oder WM_KEYDOWN benutzt. EN_CHANGE ist ja eigentlich schon zu spät (oder EN_UPDATE?).
 
gern geschehen
bin nämlich auch im Moment an so einer Sache dran und muss den Zeitpunkt, wenn alle Zahlen eingegeben sind weitergeben und dieses Ereignis(bzw. den Inhalt des Editfeldes) auf ein SpinButtonCtrl umrechnen und die Position danach setzen
 
Specialguest@home hat gesagt.:
Danke aber wie komme in einer Dialoganwendung an die "(OnCommand)" message ran!
über die View oder Mainframe weiß ich es ja aber im dialog ?

Das macht der Klassenzauberer, wenn Du ihn lieb bittest ;)

ClassWizard öffnen, Deine Dialog-Klasse wählen, und unter Messages "OnCommand" doppelklicken, dann erscheint in den MemberFunctions diese neue Funktion, darauf klickst Du und dann klickst Du rechts auf "edit code".

Der Code könnte etwa so aussehen

bool CDeinDialog::OnCommand(WPARAM wparam, LPARAM lparam)
{
WPARAM wp = LOWORD(wparam);
CEdit *pEdit = (CEdit*)GetDlgItem(IDC_DEINE_EDITFELD_ID);

if((wp==IDC_DEINE_EDITFELD_ID) && (pEdit->GetModify()) {

Hier Code zur Überprüfung einfügen

return true;
}
return false;
}

Ich mach so Sachen aber meistens so, daß ich den Inhalt eines Felds erst dann prüfe, ggfs. ändere und den User warne, nachdem das Feld den Focus verloren hat. Sonst kanns echt nervig für den User werden.
 

Neue Beiträge

Zurück