AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

RichEdit: Inhalt im Speicher halten?

Ein Thema von HJay · begonnen am 28. Okt 2010 · letzter Beitrag vom 31. Okt 2010
Antwort Antwort
HJay

Registriert seit: 7. Dez 2009
172 Beiträge
 
Delphi XE7 Enterprise
 
#1

AW: RichEdit: Inhalt im Speicher halten?

  Alt 28. Okt 2010, 11:52
Die TMemoryStreams zum Halten der Inhalte klappen gut. Ich kann leicht den Inhalt verschiedener TMemoryStream-Objekte abwechselnd in ein RichEdit laden. Danke!

Den alten Inhalt in einen weiteren Stream laden, dort den vorhandenen Streaminhalt hintendran kopieren und alles wieder zurück ins RichEdit. So würde ich es zumindest versuchen.
Hm, das schaffe ich leider nicht. Ich habe aber auch nicht so viel Erfahrungen mit TMemoryStream. Ich habe es so probiert:

Code:
procedure TForm1.ButtonUseAStreamClick(Sender: TObject);
begin // funktioniert: Stellt Inhalt von AStream in RichEdit dar!
  AStream.Position := 0;
  RichEdit1.Lines.LoadFromStream(AStream);
end;

procedure TForm1.ButtonAddAStreamClick(Sender: TObject);
  var CSTream : TMemoryStream;
begin // verändert den Inhalt nicht -- warum?
  CStream := TMemoryStream.Create;
  RichEdit1.Lines.SaveToStream(CStream);
  AStream.Position := 0;
  AStream.SaveToStream(CStream);
  CStream.Position := 0;
  RichEdit1.Lines.LoadFromStream(CStream);
  CStream.Free;
end;
Die Prozedur ButtonAddAStream() funktioniert leider nicht. RichEdit enthält hinterher genau den gleichen Inhalt wie vorher, aber keineswegs wie gewünscht zusätzlich den Inhalt von AStream. Was mache ich falsch?

Geändert von HJay (28. Okt 2010 um 12:21 Uhr)
  Mit Zitat antworten Zitat
HJay

Registriert seit: 7. Dez 2009
172 Beiträge
 
Delphi XE7 Enterprise
 
#2

AW: RichEdit: Inhalt im Speicher halten?

  Alt 28. Okt 2010, 12:21
NACHTRAG:
Ich habe inzwischen die Ursache festgestellt: Ein RichText darf nur einmal die Konstruktion {\rtf1 ... enthalten. Beim Zusammenkopieren der beiden RichText-Streams werden aber logischerweise die beiden {\rtf}-Blöcke hintereinander kopiert und der zweite Block wird dann vom RichEdit einfach ignoriert.

Daraus schließe ich, dass das bloße Zusammenführen der Memory-Streams nicht klappen wird.

FRAGE: Wer hat eine Idee, wie man einfach zwei RTF-Texte, von denen einer in einem RichText-Objekt, der andere in einem TMemoryStream gehalten wird, zusammenzuführen? Am besten sogar an der aktuellen Caret-Positon einzufügen?

Geändert von HJay (28. Okt 2010 um 13:13 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von toms
toms
(CodeLib-Manager)

Registriert seit: 10. Jun 2002
4.648 Beiträge
 
Delphi XE Professional
 
#3

AW: RichEdit: Inhalt im Speicher halten?

  Alt 30. Okt 2010, 00:51
2 RichEdits kannst du mittels EM_STREAMOUT, EM_STREAMIN zusammenführen.

Ein Beispiel dafür findest du hier:

Zusätzlich noch diese Zeile ändern, damit der alte Inhalt nicht überschrieben wird:

SendMessage(RichEdit, EM_STREAMIN, SF_RTF, lParam(@EditStream)); ändern zu:

SendMessage(RichEdit, EM_STREAMIN, SF_RTF + SFF_SELECTION, lParam(@EditStream));
Thomas
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

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

AW: RichEdit: Inhalt im Speicher halten?

  Alt 30. Okt 2010, 10:43
Aber bitte nicht addieren, sondern verodern.
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
HJay

Registriert seit: 7. Dez 2009
172 Beiträge
 
Delphi XE7 Enterprise
 
#5

AW: RichEdit: Inhalt im Speicher halten?

  Alt 31. Okt 2010, 17:16
@toms: Danke! Hat geklappt. Ich kann jetzt direkt einen TMemoryStream in ein TRichEdit hineinkopieren, so dass er an der Cursorposition eingefügt wird. Ich habe noch einige ähnliche Aufrufe im Netz gefunden und eine "eingedampfte" Prozedur erzeugt, die jetzt griffig und geradlinig ist.
  Mit Zitat antworten Zitat
Antwort Antwort


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 16:11 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