Nicht in Richedit-Feld klicken können
-
Hallo,

ich habe zwei RichEdit-Felder. In diese werden Daten von den COM-Ports ausgegeben. ( Ich hab RichEdit genommen, weil ich einige Daten farbig anzeigen wollte ). Nun will ich ja nicht, dass der User in diese RichEdit-Felder hineinschreiben kann. Also hab ich die Felder im Ressourceneditor "Read-Only" gemacht. Leider kann der User aber noch in die Felder hineinklicken und dann steht der Cursor irgendwo im RichEditFeld und meine Daten werden durcheinander ausgegeben.Wie verhindere ich nun, dass der User in ein RichEdit-Feld klicken kann?
-
Servus,
ich glaube das ging mit der Nachricht EN_SETFOCUS (Bei den Ereignissen des Controls). Wenn er die Nachricht bekommt setzt du einfach den Focus wieder auf dein Fenster. Dann wird das Control nicht aktiv. Das wäre eine Möglichkeit, so hatte ich das mal gemacht.
*winke*
Hellsgore
-
Also so richtig empfängt meine CDialog - Klasse die EN_SETFOCUS - Nachricht vom RichEdit nicht. Hab mal mit Spy++ geguckt...

Naja, hab jetz in der MSDN was mit SetEventMask gefunden. Werd mal n bisschen rumprobieren. Falls Dir ( @Hellsgore ) oder jmd anderes noch was anderes einfällt, immer her damit.

-
*arghh* ich raste aus. Es funzt einfach nich. Kann mir keiner helfen?
-
Ich hab jetzt das hier:
Wenn ich in mein RichEdit rechts klicke, so setzt er den Cursor im RichEdit wieder an das Ende:BOOL CMyDlg::OnNotify(WPARAM wParam, LPARAM lParam, LRESULT* pResult) { CRichEditCtrl *ctrl = reinterpret_cast< CRichEditCtrl *>( GetDlgItem( IDC_RICHEDIT ) ); MSGFILTER * lpMsgFilter = (MSGFILTER *)lParam; if( ( wParam == IDC_RICHEDIT ) && ( lpMsgFilter->nmhdr.code == EN_MSGFILTER ) && (lpMsgFilter->msg == WM_RBUTTONDOWN) ) { int iTotalTextLength = ctrl->GetWindowTextLength(); ctrl->SetSel( iTotalTextLength, iTotalTextLength ); } return CDialog::OnNotify(wParam, lParam, pResult); }Problem: Mit WM_RBUTTONDOWN funktioniert es einwandfrei, aber mit WM_LBUTTONDOWN nicht!!!

Weiß jemand wieso?
-
Wieso werden deine Daten durcheinander ausgegeben?? Wie gibst du sie denn aus?
-
Also: Es kommen schnell hintereinander verschiedene Frames vom COM-Port. Diese gebe ich im RichEdit zeilenweise und durchnummeriert aus. Das funktioniert soweit auch gut. Nun kann man aber in das RichEdit-Feld klicken und dann befindet sich da wo man hingeklickt hat ein Schreibcursor. ( So ein blinkendes: "|" ). Auch wenn man das RichEdit "Read-Only" macht. Nun werden alle neu auszugebenden Frames schön bei diesem Schreibcursor ausgegeben und nicht am Ende. Das meinte ich mit durcheinander. Die Ausgabe mach ich z.Z: so:
RichEdit->ReplaceSel( InsertString), false );Weiter oben hab ich schon gepostet, wie ich versucht habe, die Mausevents abzufangen, was aber nur mit dem Rechtsklick funktioniert hat.
Ich hab auch vorher:RichEdit->SetEventMask( ENM_MOUSEEVENTS );gemacht.

-
Mach vor deinem ReplaceSel einfach folgendes:
int nWindowTextLength = RichEdit->GetWindowTextLength(); RichEdit->SetSel(nWindowTextLength, nWindowTextLength);Und schon isses egal, ob der User reinklickt oder net
