![]() |
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:
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.
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; Wäre dankbar für jede Hilfe.. |
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? |
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.. |
Re: SaveToStream in OnChange Ereignis...
Moin litsa,
mit PlainText := true dürfte das so funktionieren:
Delphi-Quellcode:
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.
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; |
Re: SaveToStream in OnChange Ereignis...
Hallo Christian
also OnChange will einfach nicht :( Nur mit ButtonClick krieg ich's hin..
Delphi-Quellcode:
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..
fs.Write(sLine[1],length(sLine));
|
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. |
Re: SaveToStream in OnChange Ereignis...
Zitat:
Zum Speichern der gesamten Datei bietet sich doch etwas viel Einfacheres an:
Delphi-Quellcode:
Gruß Jürgen
sDateiname := ...
cText.Lines.SaveToFile(sDateiname); |
Re: SaveToStream in OnChange Ereignis...
Zitat:
Du kannst ja im OnChange-ereignis mit cText.Lines.Count ob Zeilen hinzugekommen sind oder nicht |
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 |
Re: SaveToStream in OnChange Ereignis...
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:59 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-2025 by Thomas Breitkreuz