Hallo, ich versuche gerade die Textfarbe eines markierten Bereichs zu ändern. Den gesamten Text einer "richTextBox" kann ich in der Farbe ändern: this->colorDialog1->ShowDialog(); this->richTextBox1->ForeColor=colorDialog1->Color; //this->richTextBox1->BackColor=colorDialog1->Color; Hat mir einer von euch einen Tip wie ich das realisieren kann? Ich möchte für jeden Buchstaben in Textfeld eine eigene Farbkombination ermöglichen. Ich hab schon über Google gesucht (vielleicht fehlt das richtige Schlagwort), aber nichts gefunden. Danke schonmal! *Visual C++ 2005 Express Edition*
Du wirst den enthaltenen Text im RichText-Format entsprechend formatieren müssen, also den markierten Text extrahieren, die für Farbe zuständigen RTF-Attribute hinzufügen und das Resultat anstelle des markierten Textes wieder in das RichEdit-Control einfügen. Mal nachgesehen, wie das in einer RTF-Datei aussieht: Nach dem allgemeinen Blabla kommt eine Tabelle mit den verwendeten Farbwerten: {\colortbl ; \red255\green0\blue0; \red0\green255\blue0; \red0\green0\blue255;} Und dann kommt der farbig (oder auch nicht) formatierte Text: {\*\generator Msftedit 5.41.15.1507;} \viewkind4\uc1\pard\f0\fs20 black\par \cf1\f1 red\par \cf2 green\par \cf3 blue\cf0\f0\par black\par Farben werden also über ihren (bei 1 beginnenden) Index in der Farbtabelle referenziert. Für "schwarz" gibt es keinen Eintrag in der Tabelle, aber den Farbindex 0. Naja, in den RTF-Specs wird mehr zum Thema stehen.
Danke Rufus. Ich habe noch ein bißcchen gesucht und vielleicht etwas gefunden: richTextBox1->SelectedRtf werde aber nicht ganz schlau draus wie es funktioniert.
Das geht doch deutlich einfacher als zunächst von mir angenommen. Sieh Dir mal die Nachricht EM_SETCHARFORMAT mit wParam = SCF_SELECTION und die zugehörige Struktur CHARFORMAT an. (Bzw. die MFC-Funktion Funktion CRichEditCtrl::SetSelectionCharFormat). Solltest Du mit "managed C++" arbeiten - keine Ahnung, wie das da verwurschtelt und von zusätzlichen Abstraktionsschichten "einfacher" gemacht wird.
Moin! Stimmt, es geht einfacher... this->colorDialog1->ShowDialog(); richTextBox1->SelectionBackColor=colorDialog1->Color; und fertig! Danke für die Hilfe Rufus, war der richtige Tip!
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.