![]() |
Re: RTF Linespacing speichern und wiederherstellen
Ich meinte du könntest den RTF Code vorher und nachher auslesen und dann vergleichen.
Delphi-Quellcode:
function GetRTFText(RichEdit: TRichedit): string;
var s: string; Stream: TStringStream; begin s := ''; Stream := TStringStream.Create(s); try RichEdit.PlainText := False; RichEdit.Lines.SaveToStream(Stream); Result := Stream.DataString; finally Stream.Free end; end; |
Re: RTF Linespacing speichern und wiederherstellen
Zitat:
:cheers: |
Re: RTF Linespacing speichern und wiederherstellen
Mhhh,
wenn ich das so mache, dann zeigt mir das RTF (beim Load) gar nix mehr an :cry:
Delphi-Quellcode:
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, richedit, StdCtrls, ComCtrls; type TForm1 = class(TForm) bStore: TButton; bLoad: TButton; bFormat: TButton; re: TRichEdit; procedure bStoreClick(Sender: TObject); procedure bLoadClick(Sender: TObject); procedure bFormatClick(Sender: TObject); procedure FormCreate(Sender: TObject); private { Private-Deklarationen } aString: string; public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.bFormatClick(Sender: TObject); var aparaformat2 : TParaFormat2; begin ZeroMemory(@aparaformat2, sizeof(aparaformat2)); aparaformat2.cbSize := SizeOf(aparaformat2); aparaformat2.dwMask := PFM_LINESPACING; aparaformat2.bLineSpacingRule := 2; SendMessage(re.Handle, EM_SETPARAFORMAT, 0, LParam(@aparaformat2)); end; procedure TForm1.bLoadClick(Sender: TObject); var ss: TStringStream; begin ss := TStringStream.Create; try ss.WriteString(aString); re.Lines.LoadFromStream(ss); finally ss.Free; end; // re.Lines.LoadFromFile(ChangeFileExt(Application.ExeName, '.txt')); end; procedure TForm1.bStoreClick(Sender: TObject); var ss: TStringStream; begin ss := TStringStream.Create; try re.Lines.SaveToStream(ss); aString := aString; finally ss.Free; end; // re.Lines.SaveToFile(ChangeFileExt(Application.ExeName, '.txt')); end; procedure TForm1.FormCreate(Sender: TObject); begin re.PlainText := false; end; end. |
Re: RTF Linespacing speichern und wiederherstellen
Moin, Moin.
Habe mir das jetzt mal im Detail angesehen und muss gestehen, dass ich es auch mit dem "normalen" RichEdit nicht hinbekomme. Egal ob direktes Speichern oder indirekt über den Umweg mit einem MemoryStream. Nach dem Laden ist die Formatierung verschwunden. Ob die Formatierung überhaupt gespeichert wird, habe ich nicht untersucht. Wenn ich nun in #3 geschrieben habe, dass es bei mir ohne Probleme funktioniert, dann stützt sich diese Bemerkung darauf, dass in einem meiner Programme die Zeilenabstände verändert werden können und diese Formatierung auch nach dem Wiedereinlesen wieder angezeigt wird. Wieso? Nach kurzer Suche hier die Lösung: Ich verwende LineSpacingRule=4 und stelle das LineSpacing in Twips ein, nutze also nicht die Auswahl 1 / 1,5 / 2-zeilig. Ist zwar ein wenig umständlicher, erfüllt aber seinen Zweck.
Delphi-Quellcode:
Das erklärt nun zwar nicht, wieso es mit LineSpacingRule 1..3 nicht funktioniert, gibt aber eine funktionierende Alternative mit der man arbeiten kann.
procedure reSetLineSpacing(re:TRichEdit;LineSpacing:LongInt);
var PF2 : TParaFormat2; begin FillChar(PF2,SizeOf(PF2),0); with PF2 do begin cbSize :=SizeOf(PF2); dwMask :=PFM_LineSpacing; bLineSpacingRule:=4; dyLineSpacing :=LineSpacing; // in twips > 567 twips = 1 cm end; SendMessage(re.Handle,EM_SetParaFormat,0,LParam(@PF2)); end; |
Re: RTF Linespacing speichern und wiederherstellen
Hallo TaakTaak,
das funktioniert wunderbar :lol: ich persönlich hänge da nicht so sehr an den LineSpacingRoule 1, 2, 3. Hauptsache ist, dass das Spacing vernünftig dargestellt und auch nach dem Abspeichern wieder vernünftig hergestellt wird. Da ein TWIPs 1/20 Punkt ist, und 1 Zeilig 120%, 1.5 Zeilig 150% und 2 Zeilig 200% der Fonthöhe ist, ist die Berechnung ja auch nicht so dramatisch 8) Schöne Grüsse an die WaterKant Greeny :cheers: :cheers: :cheers: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:23 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