Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi RichEdit Speichern/Laden (https://www.delphipraxis.net/139510-richedit-speichern-laden.html)

gangs-taas 30. Aug 2009 11:20


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

Chefx 30. Aug 2009 11:35

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:

gangs-taas 30. Aug 2009 12:05

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 ...

DeddyH 30. Aug 2009 12:10

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.

gangs-taas 30. Aug 2009 12:41

Re: RichEdit Speichern/Laden
 
meine formatierung bleibt trotzdem nicht erhalten -.-

Lannes 30. Aug 2009 13:04

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?

gangs-taas 30. Aug 2009 13:13

Re: RichEdit Speichern/Laden
 
ich hab kein word, aber open office zeigt meien formatierung auch nichtm it an


hier ist mein code :

Delphi-Quellcode:
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.
wpbei die druckfunktion noch nicht funktioniert ...

Lannes 30. Aug 2009 13:40

Re: RichEdit Speichern/Laden
 
Hallo,

in RichEdit.Text ist die Formatierung nicht enthalten.
Ausschnitt aus Deinem Code:
Delphi-Quellcode:
   RichEdit1.Text := (Seitenzahlen.Text+'/'+Titel.Text+'/'+Datum.Text+'/'+ #13#10) + RichEdit1.Text;
Mit der Zeile überschreibst Du die zuvor angelegten Formatierungen.

Ersetz mal die Zeile(n) durch:
Delphi-Quellcode:
  RichEdit1.SelStart := 0;
  RichEdit1.SelText := (Seitenzahlen.Text+'/'+Titel.Text+'/'+Datum.Text+'/'+ #13#10);
Wenn im Richedit formatierter Text enthalten ist kann man nicht mit der Eigenschaft Text zur Veränderung des RichEdit-Inhalts arbeiten.

Ps.:
Delphi-Quellcode:
function Prüfen(Hilfsvar : integer; Text : String; var Örtchen : String) :boolean;
das funktioniert? :shock:

DeddyH 30. Aug 2009 13:45

Re: RichEdit Speichern/Laden
 
Neuere Delphi-Versionen akzeptieren anscheinend Umlaute, aber man sollte vielleicht doch besser darauf verzichten :roll:

haentschman 30. Aug 2009 17:31

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:


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:16 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz