Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Mit SaveToFile Daten an eine Datei anhängen? (https://www.delphipraxis.net/48148-mit-savetofile-daten-eine-datei-anhaengen.html)

meierotto 21. Jun 2005 09:46


Mit SaveToFile Daten an eine Datei anhängen?
 
Bin immer noch bei RichEdit :?

Ist es möglich, mit SaveToFile den Inhalt eines Richedit-Feldes an eine vorhandene Datei anzuhängen?
Und wenn nein, wie könnte ich das sonst realisieren?
Mit append hab ichs schon versucht, leider habe ich es so aber noch nicht hinbekommen, dass die Formatierungen mitgespeichert werden.

Dank im Voraus! :)

Flocke 21. Jun 2005 09:49

Re: Mit SaveToFile Daten an eine Datei anhängen?
 
Öffne einen TFileStream mit der Datei, mach ein Seek ans Ende und benutze SaveToStream.

alzaimar 21. Jun 2005 09:51

Re: Mit SaveToFile Daten an eine Datei anhängen?
 
Das wird nicht gehen (denke ich). Ich glaube, Du musst den Inhalt der Datei in ein TRichMemo einlesen, den Text hinten ran kleben und dann alles wieder abspeichern... Du kannst Dir auch die RTF-Datei parsen (naja, die Präambel extrahieren reicht), dann den Text hintenran und alles mit der Präambel zusammen wieder abspeichern: RTF ist ja nur Text...

meierotto 21. Jun 2005 09:55

Re: Mit SaveToFile Daten an eine Datei anhängen?
 
:wiejetzt: Bitte, bitte, könnt ihr das nochmal etwas genauer erklären? Am besten mit Delphi-Code?

freak4fun 21. Jun 2005 10:00

Re: Mit SaveToFile Daten an eine Datei anhängen?
 
Hallo :hi:

Von welchen Typ ist denn die Datei, an die du den Text aus deinem RichEdit ranhängen möchtest. Das wäre auch noch recht hilfreich. :)

MfG
freak

meierotto 21. Jun 2005 10:06

Re: Mit SaveToFile Daten an eine Datei anhängen?
 
:hi: Hallo zurück freak4fun

Es handelt sich um eine RTF-Datei.

Flocke 21. Jun 2005 10:39

Re: Mit SaveToFile Daten an eine Datei anhängen?
 
.... uuups, das hab' ich ja voll verpeilt.

Du nimmst am besten ein zweites RichEdit-Control (versteckt) und diese Routine:

Delphi-Quellcode:
uses
  RichEdit;

// Hilfsroutine für AddRtfFromStream
function _AddRtfCallback(dwCookie: Longint; pbBuff: PByte;
  cb: Longint; var pcb: Longint): Longint; stdcall;
begin
  try
    Result := 0;
    pcb := TStream(dwCookie).Read(pbBuff^, cb);
  except
    Result := 1;
  end;
end;

// Ersetzt die aktuelle Auswahl durch den Inhalt des Streams
procedure AddRtfFromStream(RichEdit: TCustomRichEdit; Stream: TStream);
var EditStream: TEditStream;
begin
  EditStream.dwCookie := LongInt(Stream);
  EditStream.dwError := 0;
  EditStream.pfnCallback := @_AddRtfCallback;

  RichEdit.Perform(EM_STREAMIN, SF_RTF + SFF_SELECTION, LongInt(@EditStream));
  if EditStream.dwError <> 0 then
    raise Exception.Create('RichEdit operation fehlgeschlagen!');
end;
Und dann gehst du etwa wie folgt vor (Pseudocode):

Delphi-Quellcode:
RichEdit2.LoadFromFile(DieAlteDatei);
RichEdit1.SaveToStream(TemporärerMemoryStream);
AddRtfFromStream(RichEdit2, TemporärerMemoryStream);
RichEdit2.SaveToFile(DieNeueDatei);

meierotto 21. Jun 2005 10:50

Re: Mit SaveToFile Daten an eine Datei anhängen?
 
:? Ups. Sorry Flocke. Vielleicht hätte ich noch erwähnen sollen, dass ich mit dem Jedi-Richedit arbeite. Und damit läuft dein angegebener Vorschlag leider nicht :(

Flocke 21. Jun 2005 10:59

Re: Mit SaveToFile Daten an eine Datei anhängen?
 
Ist ja noch einfacher, JvRichEdit hat nämlich die Eigenschaft "StreamMode".
Delphi-Quellcode:
RichEdit2.LoadFromFile(DieAlteDatei);
RichEdit1.SaveToStream(TemporärerMemoryStream);
RichEdit2.StreamMode := RichEdit2.StreamMode + [smSelection];
RichEdit2.LoadFromStream(TemporärerMemoryStream);
RichEdit2.StreamMode := RichEdit2.StreamMode - [smSelection];
RichEdit2.SaveToFile(DieNeueDatei);
[Nachtrag]

An sich müsste mein alter Vorschlag auch laufen, du musst dann nur den Typen von TCustomRichEdit auf TJvRichEdit ändern.

Oder alternativ so:

Delphi-Quellcode:
// Ersetzt die aktuelle Auswahl durch den Inhalt des Streams
procedure AddRtfFromStream(RichEditHandle: THandle; Stream: TStream);
var EditStream: TEditStream;
begin
  EditStream.dwCookie := LongInt(Stream);
  EditStream.dwError := 0;
  EditStream.pfnCallback := @_AddRtfCallback;

  SendMessage(RichEditHandle, EM_STREAMIN, SF_RTF + SFF_SELECTION, LongInt(@EditStream));
  if EditStream.dwError <> 0 then
    raise Exception.Create('RichEdit operation fehlgeschlagen!');
end;
und dann aufrufen mit AddRtfFromStream(RichEdit2.Handle, TemporärerMemoryStream);

meierotto 21. Jun 2005 11:33

Re: Mit SaveToFile Daten an eine Datei anhängen?
 
:oops: Nochmal ups Flocke
Was ich auch nicht erwähnt habe - ich muss im Moment mit Delphi 7 arbeiten. Kann es sein, dass es dort TEditStream nicht gibt? Mit TMemoryStream habe ich es probiert, da überschreibt er aber alles, was vorher eingelesen wurde.
Bei mir funktioniert es übrigens mit Copy-Paste wie folgt:
Delphi-Quellcode:
RichEdit2.Lines.Append(chr(13)); //Ans Ende springen
RichEdit1.SelectAll;
RichEdit1.CopyToClipboard;
RichEdit2.PasteFromClipboard;
Deine vorgeschlagene Möglichkeit mit den Streams wäre aber mit Sicherheit besser, wenns bei mir nur funktionieren würde. :wink:


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:46 Uhr.
Seite 1 von 3  1 23      

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