![]() |
Formatierung eines RichEdit speichern
Hallo,
ist es möglich die Formatierung eines RichEdit zu speichern, oder muss ich eine Art BBCode aus der Formatierung erstellen, diese mitspeichern und mit StringReplace etc. wieder in eine Formatierung umwandeln? Danke! |
Re: Formatierung eines RichEdit speichern
RichEdit.Lines.SaveToFile() oder ..SaveToStream() speichern Text+Formatierung :wink:
|
Re: Formatierung eines RichEdit speichern
Hm... ok,
aber leider muss ich den Text in eine XML-Datei schreiben. Bleibt sich das gleich? |
Re: Formatierung eines RichEdit speichern
RTF ist ja ein Format mit Formatierungen. In welchem Format du die Inhalte ablegst ist eigentlich egal.
|
Re: Formatierung eines RichEdit speichern
Das wäre zu schön. Aber wo werden denn die Infos für die Formatierung gespeichert? Ich speicher so:
Delphi-Quellcode:
DomElement:=TDomElement.Create(ParDoc, 'Def');
TBM.AppendChild(DomElement); DomText:=TDomText.Create(ParDoc); DomText.NodeValue:=reDef.Text; //RichEdit mit Formatierung TBM.ChildNodes.Item(1).AppendChild(DomText); |
Re: Formatierung eines RichEdit speichern
Die formatierungen werden im Text mitgespeichert (Lass ihn dir doch mal anzeigen)
|
Re: Formatierung eines RichEdit speichern
Hey,
Zitat:
Danke |
Re: Formatierung eines RichEdit speichern
So, hier bin ich wieder...
das klappt so nicht. Die Formatierung wird nicht übernommen. So speicher ich:
Delphi-Quellcode:
Und so lese ich wieder ein
DomText:=TDomText.Create(ParDoc);
DomText.NodeValue:=reSchema.Text; DomNode.AppendChild(DomText);
Delphi-Quellcode:
Ich benutze die ADOM-Library (OpenXML, oder?)
cbSchemata.Items.Add(NSchemata.Attributes.GetNamedItem('Name').NodeValue);
with (reSchemata) do begin Lines.Add(NSchemata.Attributes.GetNamedItem('Name').NodeValue); Lines.Add(NSchemata.TextContent); Lines.Add(''); end; NSchemata:=NSchemata.FindNextSiblingElement; |
Re: Formatierung eines RichEdit speichern
RichEdit.Text gibt auch nur den reinen Text zurück.
RichEdit.SaveToFile speichert im formatierten Format. |
Re: Formatierung eines RichEdit speichern
Tja, das nutzt mir aber reichlich wenig. Ich wollte das doch in einen XML-Knoten speichern. Matze hat gesagt das geht ;)
|
Re: Formatierung eines RichEdit speichern
Du kannst mal versuchen nach dem Erstellen des RichEdit auf PlainText=True umzuschalten. Dann sollte RichEdit.Text die Formatierung enthalten. Nein auch nicht... enthält nur den Code, wenn es schon zuvor eingeschaltet war.
|
Re: Formatierung eines RichEdit speichern
Hm... hab jetzt im OI PlainText auf True... aber keinen Erfolg. Sehe auch nicht, dass im XML irgendwelche Tags für die Styles drin stehen.
EDIT: Doch, im Dokument hat sich was geändert! |
Re: Formatierung eines RichEdit speichern
Unschön, würde aber gehen:
Als RTF speichern und mit einer Stringlist einlesen. Die hat keinen Converter, da ist StringList.Text dann mit Formatierungs-Code. Vielleicht weis ja jemand wie man den Converter ausschalten kann... |
Re: Formatierung eines RichEdit speichern
Das ist tatsächlich unschön.
Habe jetzt mal eine RTF als Plain gespeichert, mit dem Editor geöffnet und deren Inhalt mal mit Copy&Paste in die XML reinkopiert. Doch beim Öffnen sagt er immer: Fehler beim Einfügen einer Zeile in RichEdit :wink: |
Re: Formatierung eines RichEdit speichern
Copy+Paste behandelt sich evtl. überschneidende Steuerzeichen nicht? Würde im XML nur über die Komponente speichern.
|
Re: Formatierung eines RichEdit speichern
Ich hab's jetzt so gemacht:
Delphi-Quellcode:
Diese Funktion ist von marabu. Doch leider kommt wieder diese "Einfüge-Fehler"
function RichText(re: TRichEdit): String;
var ss: TStringStream; begin ss := TStringStream.Create (''); try re.Lines.SaveToStream(ss); Result := ss.DataString; finally ss.Free; end; end; EDIT: Jap, die XML-Datei ist nun nicht mehr wohlgeformt... Mal sehen, wie ich den RTF-Kram escapen kann. Liegt doch daran, oder? |
Re: Formatierung eines RichEdit speichern
Zitat:
![]() Mit einem CDATA-Abschnitt wird einem Parser mitgeteilt, dass kein Markup folgt, sondern normaler Text. Konkret müsste nur über die entsprechende DOM Funktion ein CDATA Element angehängt werden, und diesem dann als Inhalt der RTF Code zugewiesen werden. |
Re: Formatierung eines RichEdit speichern
Morgen!
Das hört sich interessant an. Das werde ich heute Mittag mal ausprobieren und Rückmeldung geben. Danke |
Re: Formatierung eines RichEdit speichern
Hey Leute...
ich bin geknickt... mit CData funzt es auch nicht. Die Formatierung wird überhaupt nicht übernommen - obwohl ich mit StringStream etc gespeichert hab... Was soll ich denn noch tun? ADOM OpenXML ist doch der hinterletzte Dreck.... :twisted: |
Re: Formatierung eines RichEdit speichern
Welchen Wert hat .PlainText?
|
Re: Formatierung eines RichEdit speichern
So sieht der CData-Teil aus:
Code:
Sobald das in der XML steht, ist die Datei nicht mehr wohlgeformt und es gibt Parser-Error.
<![CDATA[HALLO DU DA]]></Schema><Schema Name="dasdsad"><![CDATA[{\rtf1\ansi\ansicpg1252\deff0\deflang1031{\fonttbl{\f0\fnil Tahoma;}}
\viewkind4\uc1\pard\b\f0\fs16 I. Hallo\b0 \par II. Und wie? \par \par } ]]> Wenn dann noch PlainText auf False steht kommt die Meldung: Fehler beim Einfügen der Zeile in TRichEdit. |
Re: Formatierung eines RichEdit speichern
Was passiert, wenn du den "inneren" CDATA-Abschnitt entfernst?
|
Re: Formatierung eines RichEdit speichern
Hm... irgendwie auch einen Parser-Error
Code:
<Schema Name="xfgfdgfdg"><![CDATA[]]></Schema>
Delphi-Quellcode:
Node etc alles in Ordnung. Speicherort innerhalb der XML perfekt.
DomCData:=TDomCDataSection.Create(ParDoc);
ss := TStringStream.Create (''); try reSchema.Lines.SaveToStream(ss); DomCData.NodeValue:=ss.DataString; //DomText.AppendChild(DomCData); DomNode.AppendChild(DomCData); finally ss.Free; end; |
Re: Formatierung eines RichEdit speichern
So, jetzt funktioniert es. Hatte beim Auslesen einen Fehler. Hier die richtige "Auslese-Funktion":
Delphi-Quellcode:
Vielen Dank an alle, die mir geholfen haben!
ss:=TStringStream.Create('');
ss.WriteString(Base64Decode(NSchemata.TextContent)); ss.Position:=0; reSchemata.Lines.LoadFromStream(ss); ss.Free; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:03 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz