Forum: PC-Programmierung Farbe ändern


von Danny (Gast)


Lesenswert?

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*

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

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.

von Danny (Gast)


Lesenswert?

Danke Rufus.
Ich habe noch ein bißcchen gesucht und vielleicht etwas gefunden:
richTextBox1->SelectedRtf
werde aber nicht ganz schlau draus wie es funktioniert.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

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.

von Danny (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.