Wie kann ich auf die Enter-Taste bei MEHRZEILIGEN Edit-Feldern reagieren?
-
Hi,
Ich würde gerne auf die Enter-Taste in mehrzeiligen Edit-Feldern reagieren (d.h. der Benutzer kann soviel reinschreiben wie er will (Zeilenumbrüche
passieren ja automatisch wenn horizontales scrollen ausgeschaltet und vertikales Scrollen eingeschaltet ist) und bei Enter wird eine Funktion/Ereignis (wie man's auch immer nennt) ausgelöst)
Weiß jemand wie das geht?
-
ich glaube es kommt echt cool, wenn du in diesem fall auf eine windowmessage reagierst. warscheinlich wäre wm_keydown oder so was krasses...
habt ihr kein buch zuhause?! programmiert ihr nur mit forumsantworten?
Esco
-
Also 1. Ich habe sehr wohl Bücher zuhause (Easy C++, Visual C++ in 21 Tagen) und programmiere daher nicht nur mit Forum-Antworten (dies ist außerdem mein 1. erstellter Thread, ich habe mich am 27.9.2004 im Forum angemeldet, also daher ("Mitleser" seit 25.9. oder so)...)
2. OnKeyDown funktioniert irgendwie nicht so wie ich das will, hier der Code:void MeinDlg::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags) { // TODO: Code für die Behandlungsroutine für Nachrichten hier einfügen und/oder Standard aufrufen if(GetDlgItem(IDC_EDIT1)->GetCapture()) { if(nChar == char(10)) // gemaeß ASCII-Tabelle ist 10 ein zeilenumbruch, mit '\n' geht es auch nicht //Funktionsaufruf } CDialog::OnKeyDown(nChar, nRepCnt, nFlags); }
Weiß jemand was da falsch ist? (wenn ich auf Enter drücke kommt einfach eine neue Zeile)
-
also ich habs nur für dich! nochma abgecheckt...
beim editfeld gibts die windowmessage EN_CHANGE.
mit dieser funktion könntest du jetzt zB den String auslesen, der da grad drinsteht und schauen, ob das letzte zeichen ein '\n' ist.
Esco
-
sorry ich muss ma hier weitermachen, aber damit du nich behaupten kannst, ich wärn assi:
void CDialog::OnChangeEdit() { UpdateData(true); if (!m_Edit.IsEmpty()) { int iLaenge = m_Edit.GetLength(); if ( m_Edit[iIndex - 1] == '\n') { m_Edit.TrimRight("\r\n"); UpdateData(false); } } }
problem hierbei: wenn du mitten in den text klickst und dann enter drückst reragiert die funktion natürlich nicht. ich weiss aber nicht ob du alle enter eingaben abfangen willst oder wie. du bekommst das bestimmt noch hin ;).
ansonsten kannst auch den gesamten string durchsuchen und schauen ob die '\n' an den vorgesehenen stellen sind oder nicht.Esco
-
aber damit du nich behaupten kannst, ich wärn assi
würd ich nie tun
Thx auf jeden fall, ich muss noch n bissle dran rumschrauben (wenn ich das nicht müsste wäre der Spaß ja weg :D) aber der Rest müsste zu schaffen sein
Danke noch mal.