Schriftart eines RichEdits ändern
-
OK, das klappt jetzt mit CHARFORMAT
Jetzt habe ich das Problem, dass wenn ich ENTER drücke das ganze RichEdit verschwindet. Habe es bereits read-only...EDIT: Hat sich erledigt, liegt nicht am RichEdit sondern generell am TabControl, irgendwie verschwindet das dann, mal sehen was es ist.
-
TabControl? Hast Du das ganze in einem Dialog? In diesem Fall führ VK_ENTER den Default-Button aus (meistens OK).
-
Martin Richter schrieb:
TabControl? Hast Du das ganze in einem Dialog? In diesem Fall führ VK_ENTER den Default-Button aus (meistens OK).
Danke, sowas dachte ich mir schon. Noch eine Frage: Wie beende ich eine Zeile im RichEdit? Geht sicher mit einem ASCII-Character? Wie füge ich diesen ein? Ich kenn das nur unter Delphi...
-
Nur zur Info, ein "\n" habe ich als erstes probiert, es wird zwar richtigerweise nicht ausgegeben, aber eine neue Zeile fängt er damit nicht an.
-
Strg+Eingabe-Taste bewirkt eine Zeilenschaltung. Das ist auch in einem Dialog sicher.
-
Achso, hätte dabei sagen sollen, dass ich den Text nicht per Hand eingebe, sondern das Programm den Text ausgibt. Es ist eine Art Debug- bzw. Log-Ausgabe.
Ein
m_rDebug.ReplaceSel("["+time+"]"+ text+"\r\n");führt leider zu gar nichts.
-
Vielleicht akzeptiert ReplaceSel() keine Zeilenumbrüche... wie füge ich denn sonst Text ans Ende ein?
-
Bin wieder einen Schritt weiter, gleiches Problem, aber anderer Ansatz: Ich habe im Dialog4 (Unterdialog innerhalb eines TabControl) die OnOK Methode überschrieben und nun schliesst sich der Dialog nicht mehr. Nun bemerke ich aber, dass der Zeilenumbruch im RichEdit nicht funktioniert, weil nichtmal die Entertaste zum manuellen umbrechen akzeptiert wird. Sie wird nun komplett ignoriert. Jetzt weiss ich überhaupt nicht mehr weiter... bekommt das RichEdit keine Messages mehr?
-
Auch für ein RichEditCtrl muss man ES_MULTILINE angeben!
-
*haarerauf*
Ich hätte mal im Dialog-Editor nach eben diesen Optionen schauen sollen... vielen Dank!
-
Nun stelle ich fest, dass die Schriftfarbe zunächst invertiert ist, also der Text markiert ist, wenn ich das Tab mit dem RichEdit aktiviere. Fügt er dann neuen Text hinzu, erscheint er in der korrekten Farbe und der Rest am Anfang bleibt in dieser markierten Farbe. Klicke ich dann in den Text ist der gesamte Text wieder normal. In meinem oben genannten Code kann ich nichts finden, dass den ersten Text markiert und damit die Schriftfarbe vorübergehend ändert.
-
Ich hab den Kontrast mal zwischen Text- und Hintergrundfarbe verändert und nun ist es eindeutig: Wenn das RichEdit zum ersten Mal angezeigt wird (wenn ich das Tab aufrufe), wird automatisch der gesamte bisherige Inhalt markiert. Die Frage ist also nur noch, wie verhindere ich dies? Kann ich irgendwie einen Cursor dareinforcieren? SetCaretPos scheint nur Pixeleingaben zu verarbeiten. SetSel(-1,-1) macht auch nichts sichtbares.
-
Automatisch macht dies ein Dialog für alle Controls die auf WM_GETDLGCODE ein DLGC_HASSETSEL returnieren.
Also müsstest Du ein eigenes Fenster von Rich Edit Control ableiten einen Handler für WM_GETDLGCODE überschreiben und DLGC_HASSETSEL nicht returnieren.
-
Ich hab jetzt einige Zeit versucht, Deine Worte zu interpretieren, aber meine Hauptfrage bleibt: Wo genau leite ich was von TRichEditCtrl ab? Das Prinzip verstehe ich, aber nicht, wo ich das machen muss. Muss ich dazu eine neue Klasse schreiben, die von TRichEditCtrl abgeleitet wird, oder schreibe ich alles in mein myDialog4 das das RichEdit enthält?
-
So, habe nun doch etwas probiert: In die h-Datei des Dialogs eine Subclass MyRichEditCtrl erstellt und in der cpp-Datei den dazugehörigen OnGetDlgCode neu definiert und 0 zurückgeben lassen. Das RichEdit-Control ist nun vom Typ MyRichEditCtrl. Er akzeptiert dies alles ohne Fehlermeldungen, bloss ein Problem: Er durchläuft OnGetDlgCode nicht (das MessageBox da drin wird nicht ausgeführt)...
-
Wird Dein Control in einr resource erzeugt?
Wird wirklich ein entsprechender Subclass durchgeführt?
Hast Du eine Messagemap für Dein neues RTF Control?
-
Ja, wird in einer Ressource erzeugt. Das Subclassing hab ich so gemacht, wie CAboutDlg automatisch mit in den Hauptdialog eingebunden wird. Mit MessageMaps hab ich nichts gemacht, das könnte der Grund sein, wieso die Nachricht nicht empfangen wird. Andererseits wird ja EM_SETSEL empfangen, sonst wäre mein Text ja nicht markiert... hmmmmm
-
Juhu! Es klappt
Die MessageMaps fehlten 