Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi SaveToStream in OnChange Ereignis... (https://www.delphipraxis.net/75847-savetostream-onchange-ereignis.html)

litsa 25. Aug 2006 22:16


SaveToStream in OnChange Ereignis...
 
Hallo

ich weiss es gibt sehr viele Beiträge zu savetostream trotzdem komme ich im moment nicht weiter..
Habe hier im Forum schon was gefunden um ein TRichEdit zu speichern:

Delphi-Quellcode:
procedure TcFrame.Button2Click(Sender: TObject);
var
  fs: TFileStream;
  fm: word;
  log: string;
begin
  if Panel4.Caption <> '' then
  begin
    log := Panel4.Caption;
    try
      if FileExists(ExtractFilePath(ParamStr(0)) + '.\logs\' + log + '.log') then
        fm := fmOpenReadWrite
      else
        fm := fmCreate;
      fs := TFileStream.Create(ExtractFilePath(ParamStr(0)) + '.\logs\' +
        log + '.log', fm, fmShareDenyWrite);
      fs.Seek(0, soFromEnd);
      cText.Lines.SaveToStream(fs);
    finally
      fs.Free;
    end;
  end;
end;
Nun möchte ich aber das ganze in einem OnChange Ereignis einbinden..im Grunde möchte ich dass wenn eine neue Zeile im RichEdit eingefügt wird dann diese Zeile in die Datei am Ende hinzufügen.

Wäre dankbar für jede Hilfe..

Christian Seehase 25. Aug 2006 22:25

Re: SaveToStream in OnChange Ereignis...
 
Moin Litsa,

muss es unbedingt ein Richedit sein, bzw. brauchst Du die Formatierung, oder ist das RichEdit auf PlainText eingestellt?

litsa 25. Aug 2006 22:30

Re: SaveToStream in OnChange Ereignis...
 
hi
also es muss ein richedit sein (habe schon ne menge code fertig) und ja is auf plan text eingestellt..

Christian Seehase 25. Aug 2006 23:27

Re: SaveToStream in OnChange Ereignis...
 
Moin litsa,

mit PlainText := true dürfte das so funktionieren:

Delphi-Quellcode:
var
  sLine : string;

begin
  if cText.Lines.Count = 0 then exit;
  fs := TFileStream.Create(....);
  try
    sLine      := cText.Lines[cText.Lines.Count-1]+#13#10;
    fs.Position := fs.Size;
    fs.Write(sLine[1],length(sLine));
  finally
    FreeAndNil(fs);
  end;
end;
Vielleicht könntest Du den Filestream auch als Feld im Formular anlegen, und im OnCreate erzeugen (OnDestroy freigeben), so dass Du ihn nicht immer neu erzeugen musst.

litsa 26. Aug 2006 12:50

Re: SaveToStream in OnChange Ereignis...
 
Hallo Christian
also OnChange will einfach nicht :( Nur mit ButtonClick krieg ich's hin..

Delphi-Quellcode:
fs.Write(sLine[1],length(sLine));
schreibt die zeile in ner art delimited text oder so ähnlich (wenn mehrere strings vorkommen)in die datei...ansonsten fügt er die zeile 3 mal in die datei ein..

DGL-luke 26. Aug 2006 13:41

Re: SaveToStream in OnChange Ereignis...
 
Du solltest es mit fmOpenWrite versuchen. Dann wird der Inhalt komplett gelöscht, bevor neu beschrieben wird.

allerdings ist das im OnChange pro Tastendruck ein Speichervorgang... das ist schlecht für die Festplatte! Ich würde das nur in Zeitintervallen, z.B. über einen Timer, speichern, oder durch den benutzer gesteuert, mit einem button.

das mit dem zeile anhängen finde ich zu kompliziert.

Jürgen Thomas 26. Aug 2006 14:19

Re: SaveToStream in OnChange Ereignis...
 
Zitat:

Zitat von DGL-luke
Du solltest es mit fmOpenWrite versuchen. Dann wird der Inhalt komplett gelöscht, bevor neu beschrieben wird.

allerdings ist das im OnChange pro Tastendruck ein Speichervorgang... das ist schlecht für die Festplatte! Ich würde das nur in Zeitintervallen, z.B. über einen Timer, speichern, oder durch den benutzer gesteuert, mit einem button.

das mit dem zeile anhängen finde ich zu kompliziert.

So würde ich es auch machen, aber genau dann wird ständig alles gespeichert, und das will litsa ja wohl vermeiden...

Zum Speichern der gesamten Datei bietet sich doch etwas viel Einfacheres an:
Delphi-Quellcode:
sDateiname := ...
cText.Lines.SaveToFile(sDateiname);
Gruß Jürgen

inherited 26. Aug 2006 15:31

Re: SaveToStream in OnChange Ereignis...
 
Zitat:

Zitat von DGL-luke
Du solltest es mit fmOpenWrite versuchen.

Déjà-lu :mrgreen:
Du kannst ja im OnChange-ereignis mit cText.Lines.Count ob Zeilen hinzugekommen sind oder nicht

litsa 26. Aug 2006 16:10

Re: SaveToStream in OnChange Ereignis...
 
SaveToFile löscht ja den Inhalt und das will ich net...

Ich glaube das Problem liegt bei der Write-Methode bzw. write soll erst aufgerufen werden wenn die zeile durch ist

Jürgen Thomas 26. Aug 2006 16:18

Re: SaveToStream in OnChange Ereignis...
 
Zitat:

Zitat von litsa
SaveToFile löscht ja den Inhalt und das will ich net...

Stimmt, es löscht den bisherigen Inhalt der Datei - aber es speichert den vollständigen aktuellen Inhalt des RTF-Edit. Jürgen


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:59 Uhr.
Seite 1 von 2  1 2      

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