Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi RichEdit.txt als Stream speichern (https://www.delphipraxis.net/56729-richedit-txt-als-stream-speichern.html)

moperswings 10. Nov 2005 08:58


RichEdit.txt als Stream speichern
 
Hallo,

folgender Code funktioniert so weit um einen Text zu speichern - nur:
Ist er auch damit richtig?
Vielleicht kann ein Profi mal einen Blick drauf werfen?
Danke und Grüsse, moperswings

Delphi-Quellcode:
var
        Stream: TFileStream;

procedure TForm1.open1Click(Sender: TObject);
begin
        try
        If OpenDialog1.Execute then begin
        Stream := TFileStream.Create(OpenDialog1.FileName, fmOpenRead);
        RichEdit1.Lines.LoadFromStream(Stream);
        Stream.Free;
        Stream := nil;
        end;
        except
        Form1.Close;
        end;
end;

procedure TForm1.save1Click(Sender: TObject);
begin
        try
        if SaveDialog1.Execute then begin
        Stream := TFileStream.Create(SaveDialog1.FileName, fmCreate);
        RichEdit1.Lines.SaveToStream(Stream);
        Stream.Free;
        Stream := nil;
        end;
        except
        Form1.Close;
        end;
end;

Der_Unwissende 10. Nov 2005 09:26

Re: RichEdit.txt als Stream speichern
 
Hey, im Prinzip ist der Code so richtig, aber es gibt natürlich (fast immer) Kleinigkeiten die man anmerken kann.
Fangen ich doch einfach mal an:
Als erstes stellt sich für mich die Frage warum du extra einen Stream benutzt, ich denke RichEdit1.Lines.LoadFromFile(OpenDialog1.Filename) ; sollte es auch tun.
Eine andere Sache die mir noch aufgefallen ist, ist dein etwas drastisches Abfangen von Fehlern. Immerhin ist das schließen des Forms doch ein wenig hart, nur weil ein Fehler aufgetreten ist.

Ansonsten würde ich dir zu einem try ... finally Block um den Stream raten, damit der immer freigegeben wird. Zudem solltest du die Restriktionen des Streams noch etwas erweitern

Delphi-Quellcode:
procedure TForm1.open1Click(Sender: TObject);
var Stream: TFileStream;
begin
 try
  if OpenDialog1.Execute then
   begin
    try
     Stream := TFileStream.Create(OpenDialog1.FileName, fmOpenRead or fmShareDenyWrite);
     RichEdit1.Lines.LoadFromStream(Stream);
    finally
     Stream.Free;
     Stream := nil;
    end;
   end;
 except
  Form1.Close;
 end;
end;

procedure TForm1.save1Click(Sender: TObject);
var Stream: TFileStream;
begin
 try
  if SaveDialog1.Execute then
   begin
    try
     Stream := TFileStream.Create(SaveDialog1.FileName, fmCreate or fmShareExclusive);
     RichEdit1.Lines.SaveToStream(Stream);
    finally
     Stream.Free;
     Stream := nil;
    end;
   end;
 except
  Form1.Close;
 end;
end;
[/quote]

Ja, zudem kann man (hier auch gemacht) die Variable weniger global setzen. Ist zwar "mehr arbeit" aber auch sauberer. Der eigentliche Vorteil liegt jedoch darin, dass lokale Variablen immer stärker gebunden werden, also Namenskonflikte sind eher auszuschließen.

Gruß Der Unwissende

moperswings 10. Nov 2005 10:16

Re: RichEdit.txt als Stream speichern
 
Danke schön, ich werde Deine Vorschläge bei mir einbauen!

Viele Grüsse

moperswings


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:21 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