Textformatierung in TRichEdit



  • Hallo Leute,

    folgendes Problem: Mit Delphi kann ich Farb-Formatierungen der Schrift in einem RichEdit Feld wie folgt vornehmen:

    Messages.SelText := '{\rtf1\ansi\deff0{\colortbl;\red0\green0\blue0;}\cf1\i '+Nickname+ 
      ' ist der Sitzung beigetreten.\i0\line}';
    

    Nun meine Frage: Ist die prinzipiell auf diesem Wege auch unter C++ mit dem BCB möglich?

    RichEdit2->Lines->Add('{\rtf1\ansi\deff0{\colortbl;\red0\green0\blue0;}\cf1\i ' + Socket->RemoteAddress + 
      ' ist der Sitzung beigetreten.\i0\line}');
    

    Dies scheint nicht zu laufen.

    [C++ Warnung] main.cpp(149): W8098 Ungültige mehrstellige Zeichenkonstante
    [C++ Fehler] main.cpp(149): E2129 char-Konstanten dürfen ein oder zwei Zeichen lang sein

    Danke für jede Anregung!
    MfG
    Tippo



  • Einfache Hochkommas repräsentieren einen einzelnen Charakter. Tausche also die ' gegen " und sollte funktionieren.
    Ich sehe aber ehrlich gesagt keinen Grund die normalen Funktionen zu verwenden, um Farbe Schriftgröße etc zu setzen.



  • Strings werden bei C++ in Anführungsstriche gepackt ""



  • Also weiß nicht genau ob das so geht, aber du hast auf jeden fall einen fehler in deinem string.

    wenn dann musst du das so schreiben:

    RichEdit2->Lines->Add("{\rtf1\ansi\deff0{\colortbl;\red0\green0\blue0;}\cf1\i " + Socket->RemoteAddress + 
      " ist der Sitzung beigetreten.\i0\line}");
    

    D



  • Danke für die schnellen Antworten,
    nur wenn ich diesen weg weiter verfolge bekomme ich folgenden Output im RichEdit2

    {
    tf1nsideff0{colortbl;
    ed0green0lue0;}cf1i 127.0.0.1 ist der Sitzung beigetreten.i0line}

    genau mit den Sonderzeichen und den Zeilennumbrüchen.
    Kann man das korrigieren, wenn ja, wie?

    Danke!
    Tippo



  • Du mußt einfach alle vorkommenden Backslashs maskieren (verdoppeln) sonst interpretiert der Compiler das nachfolgende Zeichen als Steuerzeichen.



  • Braunstein schrieb:

    Du mußt einfach alle vorkommenden Backslashs maskieren (verdoppeln) sonst interpretiert der Compiler das nachfolgende Zeichen als Steuerzeichen.

    Wirklich alle?

    RichEdit1->Lines->Add(AnsiString("{\\rtf1\\ansi\\deff0{\\colortbl;\\red0\\green0\\blue0;}\\cf1\\i" 
      + astrText + " ist der Sitzung beigetreten.\\i0}"));
    

    Da schmiert mir das ganze Programm ab. Frierte einfach komplett ein. CPU Load steigt aber nicht auf 100%, es ist dann einfach weg und lässt sich nichtmal über den Builder Shortcut [Strg] + [F2] abbrechen.

    Ich weiss nicht weiter. 😞

    MfG
    Tippo



  • Hallo

    Arbeite doch besser mit den Eigenschaften von TRichEdit als mit direktem RTF-Formatierungen. Schau dir TRichEdit in der Builder-Hilfe mal genau an, da gibt es eine Eigenschaft die den Stil des Textes selektiv beeinflußen kann.

    bis bald
    akari



  • EDIT:

    folgendes funktioniert:

    AnsiString astrText = AnsiString("{\\rtf1\\ansi\\deff0{\\colortbl; \\red255\\green0\\blue0;}\\cf1 roter text\\cf0 noch ein text");
      RichEdit1->Text = astrText;
    

    wenn ich jetzt aber nicht RichEdit1->Tex = astrText mache, da ich ja eine Zeile anfügen möchte

    RichEdit1->Lines->Add(astrText);
    

    lautet der Fehler

    EOutOfReources

    gehen tut auch

    RichEdit1->Lines->Strings[RichEdit1->Lines->Count] = astrText;
    

    Sicher mache ich wieder einen dilettantischen Fehler...

    MfG
    Tippo


Anmelden zum Antworten