AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi RTF Linespacing speichern und wiederherstellen

RTF Linespacing speichern und wiederherstellen

Ein Thema von GreenHorn3600 · begonnen am 23. Okt 2008 · letzter Beitrag vom 26. Okt 2008
Antwort Antwort
Seite 2 von 2     12
Benutzerbild von toms
toms
(CodeLib-Manager)

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

Re: RTF Linespacing speichern und wiederherstellen

  Alt 26. Okt 2008, 09:12
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;
Thomas
  Mit Zitat antworten Zitat
hamburcher
(Gast)

n/a Beiträge
 
#12

Re: RTF Linespacing speichern und wiederherstellen

  Alt 26. Okt 2008, 09:29
Zitat von toms:
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;
Sind wir nicht wieder bei #9 in einer Schleife?
  Mit Zitat antworten Zitat
GreenHorn3600

Registriert seit: 24. Jun 2007
165 Beiträge
 
#13

Re: RTF Linespacing speichern und wiederherstellen

  Alt 26. Okt 2008, 09:47
Mhhh,

wenn ich das so mache, dann zeigt mir das RTF (beim Load) gar nix mehr an

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.
  Mit Zitat antworten Zitat
taaktaak

Registriert seit: 25. Okt 2007
Ort: Radbruch
1.990 Beiträge
 
Delphi 7 Professional
 
#14

Re: RTF Linespacing speichern und wiederherstellen

  Alt 26. Okt 2008, 13:31
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:
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;
Das erklärt nun zwar nicht, wieso es mit LineSpacingRule 1..3 nicht funktioniert, gibt aber eine funktionierende Alternative mit der man arbeiten kann.
Ralph
  Mit Zitat antworten Zitat
GreenHorn3600

Registriert seit: 24. Jun 2007
165 Beiträge
 
#15

Re: RTF Linespacing speichern und wiederherstellen

  Alt 26. Okt 2008, 14:13
Hallo TaakTaak,

das funktioniert wunderbar 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

  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 21:24 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