Laden...

RichTextBox: das Wert von SelectionFont ist null

Erstellt von spongebob vor 9 Jahren Letzter Beitrag vor 9 Jahren 2.007 Views
S
spongebob Themenstarter:in
37 Beiträge seit 2008
vor 9 Jahren
RichTextBox: das Wert von SelectionFont ist null

Hallo, zusammen!
Das ist eigentlich ein String


"{\\rtf1\\ansi\\ansicpg1252\\deff0\\deflang1031{\\fonttbl{\\f0\\fswiss\\fprq2\\fcharset0 Arial;}{\\f1\\fdecor\\fprq2\\fcharset0 Broadway;}{\\f2\\fswiss\\fprq2\\fcharset0 Berlin Sans FB Demi;}{\\f3\\fscript\\fprq2\\fcharset0 Brush Script MT;}{\\f4\\fnil\\fcharset0 Microsoft Sans Serif;}}\r\n\\viewkind4\\uc1\\pard\\sa200\\sl276\\slmult1\\lang1033\\b\\i\\f0\\fs40 Test Rtf\\par\r\n\\b0\\i0\\f1\\fs48 Test Rtf \\f2 Test\\f1  \\f3 Rtf\\lang1031\\f4\\fs17\\par\r\n}\r\n"

, das Eigenschaft Rtf von Komponente RichTextBox initialisiert. Ich selektiere ein Wort, das mit 18 Positionen 18 fängt an. Und zwar ist das Wort „Test“. Dann die Eigenschaft SelectionFont das Wert null hat.
Obwohl die Schriftart für das Wort im rtf-Linie ist vorhanden "Berlin Sans FB Demi"
Wie kann ich das Problem zu lösen?
Danke im voraus

1.696 Beiträge seit 2006
vor 9 Jahren

Hallo,

laut RichTextBox.SelectionFont-Eigenschaft: Wenn für die aktuelle Textauswahl mehr als eine Schriftart angegeben ist, ist diese Eigenschaft null.

Und das ist auch so bei dir der Fall. Zwischen dem Wort Test und dem Schriftformat Berlin Sans FB Demi stehen noch Brush Script MT und Microsoft Sans Serif!

Grüße

Ich bin verantwortlich für das, was ich sage, nicht für das, was du verstehst.

**:::

S
spongebob Themenstarter:in
37 Beiträge seit 2008
vor 9 Jahren

Erst bedanke mich für Antwort.

Wenn für die aktuelle Textauswahl mehr als eine Schriftart angegeben ist, ist diese Eigenschaft null

Es ist mir klar. Aber wenn ich sogar EINE BUCHSTABE aus Wort "Test" mit Methode Select wähle - bekomme ich immer SelectionFont null.

Zwischen dem Wort Test und dem Schriftformat Berlin Sans FB Demi stehen noch Brush Script MT und Microsoft Sans Serif

Können Sie mir besser erklären, was Sie hier genau meinten

Nochmal Danke

1.696 Beiträge seit 2006
vor 9 Jahren

Zum einen duzen wir generell in allen deutschen Foren, die unter dem Motto "Hilfe zur Selbsthilfe" agieren, unabhängig davon welchen Alter man hat. Zum anderen du hast gepostet:

  
"{\\rtf1\\ansi\\ansicpg1252\\deff0\\deflang1031{\\fonttbl{\\f0\\fswiss\\fprq2\\fcharset0 Arial;}{\\f1\\fdecor\\fprq2\\fcharset0 Broadway;}{\\f2\\fswiss\\fprq2\\fcharset0 Berlin Sans FB Demi;}{\\f3\\fscript\\fprq2\\fcharset0 Brush Script MT;}{\\f4\\fnil\\fcharset0 Microsoft Sans Serif;}}\r\n\\viewkind4\\uc1\\pard\\sa200\\sl276\\slmult1\\lang1033\\b\\i\\f0\\fs40 Test Rtf\\par\r\n\\b0\\i0\\f1\\fs48 Test Rtf \\f2 Test\\f1  \\f3 Rtf\\lang1031\\f4\\fs17\\par\r\n}\r\n"  
  

schau also genau hin, dann siehst du auch dass

Zwischen dem Wort Test und dem Schriftformat Berlin Sans FB Demi stehen noch Brush Script MT und Microsoft Sans Serif

die Lösung besteht darin, dass du Bereichsweise formatieren muss, wenn du solche Info holen möchtest, d.h. zB:

falsch: (symbolisch)


Berlin Sans FB Demi
{
   Brush Script MT
   {
      Test
   }
}

richtig


Berlin Sans FB Demi
{
   Test
}
Brush Script MT
{
   Foo
}

Ich bin verantwortlich für das, was ich sage, nicht für das, was du verstehst.

**:::

S
spongebob Themenstarter:in
37 Beiträge seit 2008
vor 9 Jahren

Zwischen dem Wort Test und dem Schriftformat Berlin Sans FB Demi stehen noch Brush Script MT und Microsoft Sans Serif

Leider verstehe ich das nicht


\\f2 Test\\f1  \\f3 Rtf

Ich verstehe so - Für Test ist zuständig Schriftart mit Bezeichnung f2, für Leerezeichen - f1 und für Rtf - f3
Oder verstehe ich etwas falsch?

1.696 Beiträge seit 2006
vor 9 Jahren

siehe hier: Rich Text Format und hier Font Table

Ich bin verantwortlich für das, was ich sage, nicht für das, was du verstehst.

**:::

S
spongebob Themenstarter:in
37 Beiträge seit 2008
vor 9 Jahren

Also Font Tab Sagt

Unique \fN control words define each font available in the document, and are used to reference that font throughout the document.

Wie ich gesagt habe.

\\f2 Test\\f1  \\f3 Rtf  

Ich verstehe so - Für Test ist zuständig Schriftart mit Bezeichnung f2, für Leerezeichen - f1 und für Rtf - f3

f2 ist für

{\\f2\\fswiss\\fprq2\\fcharset0 Berlin Sans FB Demi;}

Ich hab probiert statt Berlin Sans FB Demi andere Schriftart benutzen z.B. so

{\\f2\\fswiss\\fprq2\\fcharset0 Bauhaus 93;}

Und in diesem Fall Schriftart wurde erkannt.

Kannst Du das erklären?

1.696 Beiträge seit 2006
vor 9 Jahren

Nein, leider kann ich es nicht erklären, da so tief in RTF kenne ich mich auch nicht aus, aber IMHO sollst du mit geschweifte Klammer { und } im Textfluß arbeiten, damit die Begrenzung eindeutig ist.

Ich bin verantwortlich für das, was ich sage, nicht für das, was du verstehst.

**:::

S
spongebob Themenstarter:in
37 Beiträge seit 2008
vor 9 Jahren

IMHO sollst du mit geschweifte Klammer { und } im Textfluß arbeiten, damit die Begrenzung eindeutig ist.

Leider ich erstelle kein rft, sondern analysiere eingegangene rtf-strings.

P
660 Beiträge seit 2008
vor 9 Jahren

Mal ne Alternative:

wäre es nicht eine Option das RTF in ein HTML umzuwandeln und dann entsprechend zu parsen?
das dürfte denke ich mal einfacher sein.

Du willst doch nur wissen welche Schriftart für welchen Text verwendet wird oder?

MfG
ProGamer*Der Sinn Des Lebens Ist Es, Den Sinn Des Lebens Zu Finden! *"Wenn Unrecht zu Recht wird dann wird Widerstand zur Pflicht." *"Ignorance simplifies ANY problem." *"Stoppt die Piraterie der Musikindustrie"

H
523 Beiträge seit 2008
vor 9 Jahren

Schau Dir mal dieses Projekt an: http://sourceforge.net/projects/rtfdomparser/
Da wird der ganze RTF-Text schon zerlegt. Das könnte Dir die passenden Ansätze liefern.

S
spongebob Themenstarter:in
37 Beiträge seit 2008
vor 9 Jahren

Du willst doch nur wissen welche Schriftart für welchen Text verwendet wird oder?

Nicht nur...
Ich benutze follgende Eigenschäften vom RichTextBox
SelectedText
SelectionFont
SelectionColor
Width
Height
bzw. Methode GetPositionFromCharIndex

Schau Dir mal dieses Projekt an:
>

Sieht gut aus, aber ich kann es nicht erstellen, da ich drei mal eine Fehlermeldung kriege. "Zu viele Zeichen im Zeichenliteral"

Fehler erscheint in der Zeilen 165, 171 in der Datei RTFNodeGroup.cs und in der Zeile 85 in der Datei Parser.cs


///Datei RTFNodeGroup.cs
					if( node.Keyword == "emdash")
					{
						AddString( myStr , buffer );
						myStr.Append( '¡ª'); ///Fehler
						continue ;
					}
					if( node.Keyword == "" )
					{
						AddString( myStr , buffer );
						myStr.Append( '¨C' ); ///Fehler
						continue ;
					}

////Datei Parser.cs
            if ( token.Key == "emdash")
            {
                CheckBuffer();
                myStr.Append('¡ª'); ///Fehler
                return true;
            }

Ich verstehe, dass so es nicht umsonst gemacht wurde. Aber wie kann ich das ohne Fehler erstellen?

16.807 Beiträge seit 2008
vor 9 Jahren

Diese Fehlermeldung fällt unter die Grundlagen, die wir vorraussetzen.
[Hinweis] Wie poste ich richtig? 1.1.1

Der Fehler wird die Zeile if ( token.Key == "emdash") sein. Stichwort: Datentypen.

Die Forensuche bringt Dich im 4. Treffer auf [Hinweis] Syntaxfehler selbst lösen (Compilerfehlermeldungen)
Bitte zeig in Zukunft ein wenig mehr Eigeninitative und lass nich uns Deinen Job machen.

4.931 Beiträge seit 2008
vor 9 Jahren

Hallo,

die drei Fehler erscheinen mir eher als Encoding-Problem der Source-Code-Datei (ASCII <-> UTF8 o.ä).