![]() |
RichEdit Speichern/Laden
Hey,
ich wollte mal fragen, wie ich das machen soll, dass ich RichEdit's mit Formatierung speichern und laden kann ... also Speichern klappt ja mit RichEdit1.Lines.SaveToFile(); aber wenn ich das in eine normale .txt-datei speicher dann steht in dieser komisches zeugs mit drin (ich vermute das das wegen der Formatierung ist) soweit so gut. wenn ich die Datei dann wieder in ein RichEdit-Feld lade sind zwar die Formatierungsangaben weg aber meine Formatierung ist nicht so wie ich die gespeichert hab, sondern garnicht vorhanden... ps. in meiner txt datei steh ungefär sowas drin (ist jetztn ur nen test-text) {\rtf1\ansi\ansicpg1252\deff0\deflang1031{\fonttbl {\f0\fnil\fcharset238 Comic Sans MS;}} \viewkind4\uc1\pard\li800\f0\fs24 6/Titel/30.08.2009/ \par \pard RichEdit1 \par test \par test 123 323213131 bnb kjhkjhuihui \par } das mit \par und so ist nach dem laden zwar weg, meine formation ist aber trotzdem nicht vorhanden wie könnte ich das lösen ? danke schonmal |
Re: RichEdit Speichern/Laden
wenn ich das richtig verstanden hab soll der dann wieder schön bunt sein.
bei mir geht das mit .txt oder willst du die formatierung nicht mehr haben also nicht bunt? :mrgreen: |
Re: RichEdit Speichern/Laden
also es ist so
ich habe diese komischen aufzählungszeichen darin und hab abundan die FirstIndent option verändert und das möchte ich nach dem laden wieder haben... aber das klappt nicht ... nachdem laden ist es werder eingerückt noch hat es diese aufzähungszeichen ... |
Re: RichEdit Speichern/Laden
Wenn Du die Formatierungen beibehalten willst, stell PlainText des Richedit auf false und speichere unter der Endung *.rtf. Ansonsten PlainText auf true und Endung *.txt.
|
Re: RichEdit Speichern/Laden
meine formatierung bleibt trotzdem nicht erhalten -.-
|
Re: RichEdit Speichern/Laden
Hallo,
sollte eigentlich funktionieren. Wie sieht denn Dein Code aus zum Formatieren und Laden. Das Speichern klappt ja offensichtlich, siehe #1 Öffne doch mal die gespeicherte Datei mit einem RTF-fähigen Editor z.B. Word etc., werden die Formatierungen dann interpretiert/angezeigt? |
Re: RichEdit Speichern/Laden
ich hab kein word, aber open office zeigt meien formatierung auch nichtm it an
hier ist mein code :
Delphi-Quellcode:
wpbei die druckfunktion noch nicht funktioniert ...
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ComCtrls, Printers; type TForm1 = class(TForm) Datum: TEdit; Label1: TLabel; Label2: TLabel; Seitenzahlen: TEdit; Speichern: TButton; Titel: TEdit; RichEdit1: TRichEdit; nach_links_einruecken: TButton; nach_rechts_ausruecken: TButton; Edit3: TEdit; Label3: TLabel; Label4: TLabel; Edit4: TEdit; Button3: TButton; Nummerieren_an: TButton; Laden: TButton; procedure TextClick(Sender: TObject); procedure FormCreate(Sender: TObject); function Prüfen(Hilfsvar : integer; Text : String; var Örtchen : String) :boolean; procedure nach_links_einrueckenClick(Sender: TObject); procedure SpeichernClick(Sender: TObject); procedure nach_rechts_ausrueckenClick(Sender: TObject); procedure RichEdit1Change(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure TitelClick(Sender: TObject); procedure Neu; procedure Button3Click(Sender: TObject); procedure Nummerieren_anClick(Sender: TObject); procedure LadenClick(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; Pfad : String; Ort_In : String; gespeichert : boolean ; const ext = '.rtf'; implementation {$R *.dfm} procedure TForm1.nach_links_einrueckenClick(Sender: TObject); begin nach_links_einruecken.Tag := nach_links_einruecken.Tag + 5; Edit3.Text := IntToStr(nach_links_einruecken.Tag); end; procedure TForm1.nach_rechts_ausrueckenClick(Sender: TObject); begin nach_links_einruecken.Tag := nach_links_einruecken.Tag - 5; Edit3.Text := IntToStr(nach_links_einruecken.Tag); end; procedure TForm1.Button3Click(Sender: TObject); var printDialog : TPrintDialog; myPrinter : TPrinter; i, y : integer ; begin // Create a printer selection dialog printDialog := TPrintDialog.Create(Form1); // If the user has selected a printer (or default), then print! if printDialog.Execute then begin // Use the Printer function to get access to the // global TPrinter object. // All references below are to the TPrinter object myPrinter := Printer; with myPrinter do begin // Start printing BeginDoc; // Set up the RichEdit font Canvas.Font := RichEdit1.Font; // Write out the page size Canvas.TextOut(40, 20, Titel.Text); y := 150; For i := 1 to RichEdit1.Lines.Count do begin Canvas.TextOut(40, y, RichEdit1.Lines[i]); y := y +130; end; // Finish printing EndDoc; end; end; end; procedure TForm1.Nummerieren_anClick(Sender: TObject); begin RichEdit1.Paragraph.Numbering := TNumberingStyle(nsBullet); end; procedure TForm1.LadenClick(Sender: TObject); var Ort : String ; begin Ort := Pfad + Seitenzahlen.Text + ext; try RichEdit1.Lines.LoadFromFile(Ort); Except ShowMessage('Fehler'); end; end; procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); var buttonSelected : Integer; begin if gespeichert = False then begin buttonSelected := MessageDlg('Willst du vorm beenden speichern ?',mtInformation ,mbYesNo,0); if (buttonSelected = mrYes) then begin if not (RichEdit1.Text[1] = '/') then begin RichEdit1.Text := (Seitenzahlen.Text+'/'+Titel.Text+'/'+Datum.Text+'/'+ #13#10) + RichEdit1.Text; Speichern.Click; end; end; end; end; procedure TForm1.FormCreate(Sender: TObject); var Liste : Tstringlist; Prüfstring,TempZählsTring : String ; Zeile,i,Zähler : Integer; begin Pfad := Application.ExeName; Pfad := Copy(Pfad,0,Length(Pfad)-4)+'/'; Ort_In := Pfad + 'Inhaltsverzeichnis' + ext; Datum.Text := DateToStr(Date); Liste := Tstringlist.Create; RichEdit1.Text := ''; RichEdit1.Paragraph.Numbering := TNumberingStyle(nsBullet); If (Prüfen(1,'1/Inhaltsverzeichnis/'+Datum.Text+'/',Ort_In) = True) Then begin Liste.LoadFromFile(Ort_In); Zeile := (Liste.Count - 1); Prüfstring := Liste[Zeile] ; TempZählString := ''; i := Pos('/',Prüfstring); TempZählString := Copy(Prüfstring,1,i-1); Zähler := StrToInt(TempZählString); Inc(Zähler); Seitenzahlen.Text := IntToSTr(Zähler); end else Seitenzahlen.Text := '1'; end; procedure TForm1.TextClick(Sender: TObject); begin RichEdit1.Text := ''; end; procedure TForm1.TitelClick(Sender: TObject); begin Titel.Text := ''; end; function TForm1.Prüfen(Hilfsvar : integer; Text : String; var Örtchen : String) :boolean; var Dokument : Tstringlist; begin Dokument:= Tstringlist.Create; if not (FileExists(Örtchen)) then begin ForceDirectories(Pfad); If (Hilfsvar = 1) Then begin Dokument.Add(Text); Dokument.SaveToFile(Örtchen); end; Result := False; end Else Result := True; end; procedure TForm1.Neu ; var Liste : Tstringlist; Prüfstring,TempZählsTring : String ; Zeile,i,Zähler : Integer; begin Liste := TStringlist.Create; Liste.Clear; RichEdit1.Text := '-'; Titel.Text := 'Stichpunkte ' + Datum.Text ; If (Prüfen(1,'1/Inhaltsverzeichnis/'+Datum.Text+'/',Ort_In) = True) Then begin Liste.LoadFromFile(Ort_In); Zeile := (Liste.Count - 1); Prüfstring := Liste[Zeile] ; TempZählString := ''; i := Pos('/',Prüfstring); TempZählString := Copy(Prüfstring,1,i-1); Zähler := StrToInt(TempZählString); Inc(Zähler); Seitenzahlen.Text := IntToSTr(Zähler); end else Seitenzahlen.Text := '1'; RichEdit1.Tag := 0; Edit3.Text := IntToStr(RichEdit1.Tag); Edit4.Text := IntToStr(RichEdit1.Lines.Count); end; procedure TForm1.SpeichernClick(Sender: TObject); var ort : String ; Liste : Tstringlist; begin Liste := Tstringlist.Create; Liste.LoadFromFile(Ort_In); Liste.Add(Seitenzahlen.Text+'/'+Titel.Text+'/'+Datum.Text+'/'); Liste.SaveToFile(Ort_In); Liste.Clear; if not (RichEdit1.Text[1] = '/') then begin RichEdit1.Text := (Seitenzahlen.Text+'/'+Titel.Text+'/'+Datum.Text+'/'+ #13#10) + RichEdit1.Text; Ort := Pfad + Seitenzahlen.Text + ext; RichEdit1.Lines.SaveToFile(Ort); end; gespeichert := True ; end; procedure TForm1.RichEdit1Change(Sender: TObject); var buttonSelected : integer; Liste : Tstringlist; Datei : String; Seitenzahl : Integer ; begin RichEdit1.Paragraph.FirstIndent := nach_links_einruecken.Tag*4; If (RichEdit1.Lines.Count = 41) Then begin buttonSelected := MessageDlg('Du hast Mehr geschrieben als auf eine Seite passt' +#13#10 + 'Willst du nun speichern und eine neue Datei anlegen ?',mtInformation ,mbYesNo,0); if (buttonSelected = mrYes) then begin Liste := Tstringlist.Create; Liste.LoadFromFile(Ort_In); Liste.Add(Seitenzahlen.Text+'/'+Titel.Text+'/'+ Datum.Text+'/'); Liste.SaveToFile(Ort_In); Liste.Clear; Liste.Text := Titel.Text + '/'; Liste.Add(RichEdit1.Text); if not (RichEdit1.Text[1] = '/') then begin Datei := Pfad + Seitenzahlen.Text + ext; Liste.SaveToFile(Datei); end; Titel.Text := Titel.Text + ' II'; SeitenZahl := StrToInt(Seitenzahlen.Text); Inc(Seitenzahl); Seitenzahlen.Text := IntToStr(SeitenZahl); RichEdit1.Text := ''; end; end; Edit4.Text := IntToStr(RichEdit1.Lines.Count); end; end. |
Re: RichEdit Speichern/Laden
Hallo,
in RichEdit.Text ist die Formatierung nicht enthalten. Ausschnitt aus Deinem Code:
Delphi-Quellcode:
Mit der Zeile überschreibst Du die zuvor angelegten Formatierungen.
RichEdit1.Text := (Seitenzahlen.Text+'/'+Titel.Text+'/'+Datum.Text+'/'+ #13#10) + RichEdit1.Text;
Ersetz mal die Zeile(n) durch:
Delphi-Quellcode:
Wenn im Richedit formatierter Text enthalten ist kann man nicht mit der Eigenschaft Text zur Veränderung des RichEdit-Inhalts arbeiten.
RichEdit1.SelStart := 0;
RichEdit1.SelText := (Seitenzahlen.Text+'/'+Titel.Text+'/'+Datum.Text+'/'+ #13#10); Ps.:
Delphi-Quellcode:
das funktioniert? :shock:
function Prüfen(Hilfsvar : integer; Text : String; var Örtchen : String) :boolean;
|
Re: RichEdit Speichern/Laden
Neuere Delphi-Versionen akzeptieren anscheinend Umlaute, aber man sollte vielleicht doch besser darauf verzichten :roll:
|
Re: RichEdit Speichern/Laden
mir ist, unabhängig von den Sonderzeichen, noch was aufgefallen:
wo gibst du die dynamisch erzeugten Ojekte (Sting Listen, Printer Dialog ) wieder frei ? :hi: |
Re: RichEdit Speichern/Laden
Zitat:
Zitat:
versuch ich mir zu merken und in zukunft zu vermeiden Zitat:
ja das funktioniert ... jedenfalls macht es keien fehlr oder so ... danke |
Re: RichEdit Speichern/Laden
Zitat:
hey, wenn ich das so ersetze, verschiebt der aber meine zeilen mit nach unten sprich wenn meine erste zeile z.b. garnicht eingerückt ist, meine zweite aber schon, ist nach dem speichern meine erste Zeile auch eingerückt ... versteht ihr was ich mein ? :-D |
Re: RichEdit Speichern/Laden
hat sich geklärt
danke :-D |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:00 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 by Thomas Breitkreuz