Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi 10 Richedit in eine Datei speichern und wieder auslesen (https://www.delphipraxis.net/36709-10-richedit-eine-datei-speichern-und-wieder-auslesen.html)

ferby 24. Dez 2004 14:29

Re: 10 Richedit in eine Datei speichern und wieder auslesen
 
Hi,

Also ich weiß nicht ob das so einfacher ist als meine Variante... ich schau mal ob ich auf den Fehler bei Variante finde und wenn nicht probier ich deine aus.

Christian Seehase 24. Dez 2004 14:33

Re: 10 Richedit in eine Datei speichern und wieder auslesen
 
Moin Ferby,

das könnte so aussehen, wenn Du nur den Text haben willst:

Delphi-Quellcode:
// schreiben
var
  iLen : integer;
  fs  : TFileStream;

begin
  fs := TFileStream.Create(....);
  try
    iLen := length(RichEdit1.Lines.Text);
    fsWrite(iLen,4);
    fs.Write(RichEdit1.Lines.Text[1],iLen);
  finally
    FreeAndNil(fs);
  end;
end;

// lesen
var
  iLen : integer;
  fs  : TFileStream;
  sBuf : string;

begin
  fs := TFileStream.Create(...,fmOpenRead);
  try
    fs.Read(iLen,4);
    SetLength(sBuf,iLen);
    fs.Read(sBuf[1],iLen);
    RichEdit1.Lines.Text := sBuf;
  finally
    FreeAndNil(fs);
  end;
end;
Nachdem Du den Wert ausgelesen/geschrieben hast, steht der FileStream auf der Länge des nächsten Eintrages.
Du kannst also das, was zwischen try/finally steht der Reihe nach für alle RichEdits ausführen.
Sollen auch die Formatierungen gespeichert werden wird's etwas komplizierter:

Delphi-Quellcode:
// schreiben
var
  iLen : integer;
  fs  : TFileStream;
  ms  : TMemoryStream;

begin
  ms := TMemoryStream.Create;
  fs := TFileStream.Create(....,fmCreate);
  try
    ms.Clear;
    RichEdit1.Lines.SaveToStream(ms);
    iLen := ms.Position;
    fs.Write(iLen,4);
    fs.CopyFrom(ms,0);
  finally
    FreeAndNil(fs);
    FreeAndNil(ms);
  end;
end;

// lesen
var
  iLen : integer;
  fs  : TFileStream;
  ms  : TMemoryStream;

begin
  ms := TMemoryStream.Create;
  fs := TFileStream.Create('c:\temp\riform.txt',fmOpenRead);
  try
    fs.Read(iLen,4);
    ms.Clear;
    ms.CopyFrom(fs,iLen);
    ms.Position := 0;
    RichEdit1.Lines.LoadFromStream(ms);
  finally
    FreeAndNil(fs);
    FreeAndNil(ms);
  end;
end;

ferby 24. Dez 2004 15:55

Re: 10 Richedit in eine Datei speichern und wieder auslesen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,


Das ist mir viel zu kompliziert, ich möchte nur Befehle verwenden die ich auch verstehe....

Ich habe jetzt alles nochmal geschrieben und zwar nach einen anderen prinizp.

Kann sich das wer mal anschauen, es funktioniert auch, nur Zeilenumbrüche werden gelöscht... warum????


Das Programm ist ganz kelein, es nimmt euch nur ganz wenig von eurer kostbaren Zeit weg :-)

Luckie 24. Dez 2004 16:03

Re: 10 Richedit in eine Datei speichern und wieder auslesen
 
Ein Zeilenumbruch ist #13#10 unter Windows. #01 ist das Steuerzeichen für "Start of Header".

Btw. sieht mir dein Quellcode reichlich kompliziert aus.

ferby 24. Dez 2004 16:07

Re: 10 Richedit in eine Datei speichern und wieder auslesen
 
Hallo,

Das weiß ich, wo muss ich das #10 einfügen damit es geht, ich habe es auf verschiedenen stellen ausproiert nur dan funktionieren auf einmal andere dinge nicht mehr.........

Luckie 24. Dez 2004 16:22

Re: 10 Richedit in eine Datei speichern und wieder auslesen
 
Warte ich schreibe es dir gerade.

Luckie 24. Dez 2004 17:43

Re: 10 Richedit in eine Datei speichern und wieder auslesen
 
So in etwa:
Delphi-Quellcode:
var
  Form1        : TForm1;
  RichEditArray: array[0..2] of TRichedit;

implementation

{$R *.dfm}

procedure SaveRichtEdit(RichEdit: TRichEdit; const Filename: string);
var
  sl          : TStringList;
begin
  sl := TStringList.Create;
  try
    if FileExists(Filename) then
      sl.LoadFromFile(Filename);
    sl.Add(RichEdit.Text);
    sl.SaveToFile(Filename);
  finally
    FreeAndNil(sl);
  end;
end;

procedure LoadRichEdits;
var
  Filename    : string;
  sl          : TStringList;
  i           : Integer;
begin
  Filename := ExtractFilePath(ParamStr(0)) + 'test.txt';
  if FileExists(Filename) then
  begin
    sl := TStringList.Create;
    try
      sl.LoadFromFile(Filename);
      for i := 0 to Min(length(RichEditArray), sl.Count) - 1 do
      begin
        RichEditArray[i].Text := sl.Strings[i];
      end;
    finally
      FreeAndNil(sl);
    end
  end;
  for i := 0 to length(RichEditArray) - 1 do
    RichEditArray[i].Visible := True;
end;

procedure TForm1.FormCreate(Sender: TObject);
var
  i           : integer;
begin
  for i := 0 to length(RichEditArray) - 1 do
  begin
    RichEditArray[i] := TRichedit.Create(Self);
    RichEditArray[i].Parent := Self;
    RichEditArray[i].SetBounds(100, 10, 550, 250);
    RichEditArray[i].Visible := False;
  end;
end;

procedure TForm1.speichernClick(Sender: TObject);
var
  Filename    : string;
  i           : Integer;
begin
  Filename := ExtractFilePath(ParamStr(0)) + 'test.txt';
  if FileExists(Filename) then
  begin
    if not DeleteFile(Filename) then
      ShowMessage(SysErrorMessage(GetLastError))
    else
      for i := 0 to length(RichEditArray) - 1 do
        SaveRichtEdit(RichEditArray[i], Filename);
  end;
end;

procedure TForm1.waserwillmenueClick(Sender: TObject);
var
  i           : Integer;
begin
  for i := 0 to length(RichEditArray) - 1 do
    RichEditArray[i].Visible := False;
  RichEditArray[waserwillmenue.ItemIndex].Visible := True;
end;

procedure TForm1.ladenClick(Sender: TObject);
var
  i           : Integer;
begin
  speichern.Visible := True;
  LoadRichEdits;
  for i := 0 to length(RichEditArray) - 1 do
    RichEditArray[i].Visible := True;
end;

ferby 24. Dez 2004 18:01

Re: 10 Richedit in eine Datei speichern und wieder auslesen
 
Hallo,

Danke werde ich später ausprobieren habe jetzt leider keine Zeit mehr.... das Christkind kommt muss gucken gehen :shock:


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:28 Uhr.
Seite 2 von 2     12   

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