AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Mit SaveToFile Daten an eine Datei anhängen?
Thema durchsuchen
Ansicht
Themen-Optionen

Mit SaveToFile Daten an eine Datei anhängen?

Ein Thema von meierotto · begonnen am 21. Jun 2005 · letzter Beitrag vom 14. Mär 2008
Antwort Antwort
Seite 2 von 3     12 3      
Benutzerbild von freak4fun
freak4fun

Registriert seit: 22. Sep 2004
Ort: Hannover
1.807 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#11

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

  Alt 21. Jun 2005, 12:47
Hallo ,
TEditStream gibt es in Delphi7 nicht, da hast du recht.
Da sieht man mal wieder wie wichtig es ist, so viel Angaben wie Möglich zu machen, um Missverständnisse zu vermeiden. Dadurch kann man sich viel Arbeit, Nerven und Zeit sparen.

MfG
freak
Christian
IT: Schließen Sie bitte das Fenster. User: Die Tür auch?
i++; // zaehler i um 1 erhoehen
  Mit Zitat antworten Zitat
Benutzerbild von Flocke
Flocke

Registriert seit: 9. Jun 2005
Ort: Unna
1.172 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#12

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

  Alt 21. Jun 2005, 13:18
uses RichEdit; Diese Zeile übersehen?
Diese Unit gibt's schon bei Delphi 5 und da drin ist TEditStream definiert.
Volker
  Mit Zitat antworten Zitat
meierotto

Registriert seit: 20. Mai 2005
Ort: Cottbus
73 Beiträge
 
Delphi 2005 Professional
 
#13

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

  Alt 21. Jun 2005, 13:35
Natürlich musste nur meine Uses-Klausel erweitert werden

Aber... folgender Fehler folgt: "Inkompatible Typen TStream und _editstream"

Sorry, dass ich langsam ans Aufgeben denke, aber ist die Copy-Paste-Methode eigentlich unsicher?
  Mit Zitat antworten Zitat
Benutzerbild von Flocke
Flocke

Registriert seit: 9. Jun 2005
Ort: Unna
1.172 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#14

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

  Alt 21. Jun 2005, 13:46
Also noch einmal komplett:
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(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;

procedure AlteDateiPlusInhaltGleichNeueDatei(const DieAlteDatei: string;
  RichEdit, TempRichEdit: TJvRichEdit; const DieNeueDatei: string);
var MemoryStream: TMemoryStream;
begin
  TempRichEdit.LoadFromFile(DieAlteDatei);
  TempRichEdit.SelStart := TempRichEdit.Perform(WM_GETTEXTLENGTH, 0, 0);

  MemoryStream := TMemoryStream.Create;
  try
    RichEdit.SaveToStream(MemoryStream);
    AddRtfFromStream(TempRichEdit.Handle, MemoryStream);
  finally
    MemoryStream.Free;
  end;

  TempRichEdit.SaveToFile(DieNeueDatei);
end;
Volker
  Mit Zitat antworten Zitat
meierotto

Registriert seit: 20. Mai 2005
Ort: Cottbus
73 Beiträge
 
Delphi 2005 Professional
 
#15

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

  Alt 21. Jun 2005, 14:16
Ich bewundere deine Geduld, Flocke
Mir geht sie leider aus. Es wird erstmal fehlerfrei compiliert.
kleine Korrektur: TempRichEdit.SaveToFile(DieNeueDatei); muss heißen:TempRichEdit.Lines.SaveToFile(DieNeueDatei); und so weiter...

Aber beim Ausführen der Prozedur AddRtfFromStream wird die Exception "RichEdit operation fehlgeschlagen!" erzeugt.

Mir gehts wie diesem kleinen Smilie

Nochmal meine Frage: Was ist der Nachteil an der Copy-Paste-Methode?
  Mit Zitat antworten Zitat
Benutzerbild von Flocke
Flocke

Registriert seit: 9. Jun 2005
Ort: Unna
1.172 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#16

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

  Alt 21. Jun 2005, 14:28
Das hat nur den Nachteil, dass du den Inhalt der Zwischenablage zerstörst (falls der User den noch braucht).

Probier doch mal zwei kleine Änderungen:

TempRichEdit.LoadFromFile(DieAlteDatei); hast du ja bestimmt schon in TempRichEdit.Lines.LoadFromFile(DieAlteDatei); geändert.

Füge hier eine Zeile ein:
Delphi-Quellcode:
RichEdit.SaveToStream(MemoryStream);
MemoryStream.Position := 0; // <-- hier
AddRtfFromStream(TempRichEdit.Handle, MemoryStream);
Ich hab's hier nur mit 'nem TFileStream direkt aus der Datei probiert, da hab' ich die Neupositionierung wohl vergessen.
Volker
  Mit Zitat antworten Zitat
meierotto

Registriert seit: 20. Mai 2005
Ort: Cottbus
73 Beiträge
 
Delphi 2005 Professional
 
#17

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

  Alt 21. Jun 2005, 16:06
Ein Hoch auf Flocke

Seine Geduld führte dazu, dass ich jetzt mein Copy-Paste-Prinzip über Bord werfen kann und das gleiche per Streaming erreiche.

Vielen Dank

(Jetzt muss ichs nur noch nachvollziehen)
  Mit Zitat antworten Zitat
Sors

Registriert seit: 2. Mär 2008
3 Beiträge
 
#18

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

  Alt 12. Mär 2008, 18:37
In Zeile
 EditStream.pfnCallback := @_AddRtfCallback; kommt bei mir ein Fehler. *Variable erforderlich*. Woran liegt das?????
  Mit Zitat antworten Zitat
Sors

Registriert seit: 2. Mär 2008
3 Beiträge
 
#19

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

  Alt 14. Mär 2008, 16:13
Komischerweise tritt der Fehler jetzt nicht mehr auf. *grübel*

habe trotzdem eine Frage. Und zwar kann mir jemand erklären was die Befehle

EM_STREAMIN EM_STREAMOUT SFF_SELECTION machen?
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#20

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

  Alt 14. Mär 2008, 16:20
Zitat von Win32 SDK:
The EM_STREAMIN message replaces the contents of a rich edit control with the specified data stream.

EM_STREAMIN
wParam = (WPARAM) (UINT) uFormat;
lParam = (LPARAM) (EDITSTREAM FAR *) lpStream;


Parameters

uFormat

One of the following data formats:

Value Meaning
SF_TEXT Text
SF_RTF Rich Text Format (RTF)


Both data formats may be combined with the SFF_SELECTION flag. If the SFF_SELECTION flag is specified, the stream replaces the contents of the current selection. Otherwise, the stream replaces the entire contents of the control.
The SF_RTF format may be combined with the SFF_PLAINRTF flag. If the SFF_PLAINRTF flag is specified, language-specific RTF keywords in the stream are ignored. Only keywords common to all languages are streamed in.

lpStream

Pointer to an EDITSTREAM structure. The control reads (streams in) the data by repeatedly calling the function specified by the structure's pfnCallback member.



Return Values

Returns the number of characters read.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:20 Uhr.
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