www.mikrocontroller.net

Forum: PC-Programmierung Farbe ändern


Autor: Danny (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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*

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Danny (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Danny (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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!

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.