AGB  ·  Datenschutz  ·  Impressum  







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

RTF - Absatzhintergrund setzen

Ein Thema von DeddyH · begonnen am 5. Jul 2011 · letzter Beitrag vom 18. Jul 2011
Antwort Antwort
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#1

AW: RTF - Absatzhintergrund setzen

  Alt 12. Jul 2011, 12:41
mal abgesehen davon, daß diese Fummelei ganz interessant ist, was bringts?
Ich meine wenn Dein RTF-Interpreter (Word) mit der erzeugten RTF-Datei nichts anfangen kann (TRichEdit), ist das doch vergebliche Liebesmüh.

Word knallt doch erst einmal einen Standard-Header mit mindestens 3 Fonts und xFarben darein. Zuzüglich Autor, Datum usw.
das braucht halt.

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

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

AW: RTF - Absatzhintergrund setzen

  Alt 12. Jul 2011, 12:43
Was es bringt? Abgesehen davon, dass mein ursprüngliches Problem gelöst ist, interessiert es mich jetzt einfach, wie man das anzustellen hat, wenn man eine nett formatierte Datei erzeugen möchte (auch wenn das Standard-Control das so nicht darzustellen vermag).
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
delnu
(Gast)

n/a Beiträge
 
#3

AW: RTF - Absatzhintergrund setzen

  Alt 12. Jul 2011, 13:57
Die Meldung "Das Handle ist ungültig" ist eindeutig der Rückgabewerte von "GetLastError" !

Zusatzvariable "s" ( string ) und dann dies :
Delphi-Quellcode:
  if SendMessage(RichEdit1.Handle, EM_SETPARAFORMAT, 0, lParam(@fmt)) = 0 then
  begin
// s:=SysErrorMessage(GetLastError);
    ShowMessage(s)
  end
ergibt eine leere Meldung ohne Text. Also scheint doch wenigstens "GetLastError" korrekt zu funktionieren. Die Stelle, an der abgespeichert werden sollte, wird gar nicht erst erreicht. Folglich ist meine Theorie von vorhin schon deshalb falsch.

Wenn die Auswertung unbeachtet bleibt und man die Datei dennoch speichert, funktioniert das Anhängen nämlich.

Jetzt bleibt allerdings die Frage, wieso "RichEdit1.Handle" als ungültig erachtet wird. Interessanterweise aber nur bei EM_SETPARAFORMAT und nicht bei EM_GETPARAFORMAT. Genauer : Wenn erst GET und später SET aufgerufen wird. Zweimal gleich ist egal und erst SET und danach GET ebenso.

Oh ! Jetzt habe ich es mal mit einer nicht künstlich generierten, sondern von OO erzeugten RTF-Datei probiert. Stimmt ! Jede Formatierung ist weg und die Datei wird kleiner. Also ganz wie beschrieben.

Oh, oh, oh ! Probier einfach mal das, ohne alles andere :
Delphi-Quellcode:
  RichEdit1.Lines.LoadFromFile(TestFile);
  RichEdit1.Lines.SaveToFile(TestFile2);
Die Formatierung ist offenbar bereits beim Laden weg. Im Klartext heißt das, die übrigen Zuweisungen werten die Datei nicht korrekt aus. Ich habe es auch mit anderen Reihenfolgen probiert.

Wieso geht es mit selbst generierten RTF-Dateien und nicht bei anderen ? Das kann doch eigentlich nur heißen, daß andere Programme das gewünschte Ergebnis auf andere Weise erzeugen. Für heute reicht es mir.

Geändert von delnu (12. Jul 2011 um 14:45 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

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

AW: RTF - Absatzhintergrund setzen

  Alt 12. Jul 2011, 18:59
Es scheint, dass das MS-RichEdit (TRichEdit ist ja nur ein Wrapper dafür) bestimmten RTF-Code nicht nur ignoriert, sondern gleich mal "stinkelinkpief" entfernt. Somit komme ich zu dem Schluss, dass wir hier bei dieser Vorgehensweise wohl am Ende der Fahnenstange angekommen sind. Damit sind wir aber immer noch weiter als jeder Code, den ich im Internet finden konnte und der auch auf dem RichEdit basiert.
Aber: ignoriert man einfach den Fehlercode und speichert die Datei trotzdem ab, dann bleibt auch die ursprüngliche Absatzformatierung der Originaldatei weitestgehend erhalten (zumindest war das bei mir so). Nur leider nützt einem das gar nüscht, wenn man selbst das Füllmuster setzen möchte. Das geht dann wohl nur noch auf die harte Tour: RichEdit RichEdit sein lassen, RTF-Spezifikation auswendig lernen und per Streams direkt auf den Rohdaten operieren. Mir persönlich geht das im Moment einen Tick zu weit.
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
delnu
(Gast)

n/a Beiträge
 
#5

AW: RTF - Absatzhintergrund setzen

  Alt 13. Jul 2011, 09:02
Nun, mit "Formatierung" meinte ich gesetzte Hintergrundfarben usw., also alles, was nicht nur der Text selbst ist. Aber mal was anderes : Mit OO habe ich anscheinend keine Möglichkeit, Füllmuster zu setzen und beim neueren LibreOffice, das ich zu Testzwecken als Portable geladen habe, scheint es sowas auch nicht zu geben.

Kann es sein, daß sowas wirklich nur bei Word existiert ?
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

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

AW: RTF - Absatzhintergrund setzen

  Alt 13. Jul 2011, 14:04
Kann es sein, daß sowas wirklich nur bei Word existiert ?
Das halte ich durchaus für möglich. Sowohl OpenOffice als wohl auch LibreOffice (haben die nicht sogar denselben Ursprung?) sind ja plattformunabhängig, von daher wären die Entwickler ja mit der Muffe gepufft, wenn sie sich von einer Microsoft-DLL abhängig machten. Also verfügen wohl beide Suiten über einen eigenen Wordprocessor. Mag sein, dass der dann nicht alle Features unterstützt, die das RTF-Format rein technisch bietet.
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
delnu
(Gast)

n/a Beiträge
 
#7

AW: RTF - Absatzhintergrund setzen

  Alt 13. Jul 2011, 17:54
Heute mittag, das muß zwischen den beiden obigen Beiträgen gewesen sein, hatte ich mal kurz an einem fremden Rechner die Gelegenheit, WORD zu starten. Ich habe mir dann die interessante Sache mit den Sprungmarken angesehen. Allerdings wüßte ich nicht, wozu man die dann im richtigen Leben brauchen kann. Ich habe die Funktionsweise nur zufällig über ein Untermenü gefunden. Während Farbe, Hintergrund usw. wirklich den Inhalt betreffen, also auch z.B. bei Konvertierung als Grafik oder ausgedruckt immer erkennbar sind, betrifft das doch bei Sprungmarken nur das Bearbeiten bzw. Betrachten.

Ich hatte dann mal nach den speziellen Hintergrundfeatures gesucht, aber habe auf die Schnelle nichts Passendes gefunden. Das scheint gut versteckt zu sein und ist wohl eher was für Spezialisten, die das Prog in- und auswendig kennen.

Was Libre Office angeht : Stimmt, das ist eine Weiterentwicklung von OO. Drum dachte ich, man wäre dort vielleicht auch diesbzgl. weiter. Dieses "von daher wären die Entwickler ja mit der Muffe gepufft" muß ich mir merken - schöner Spruch. Schon wegen der Plattformunabhängigkeit muß es also eine Eigenentwicklung sein. Hmmm - die Quellen gibt es doch, ich weiß nur nicht, womit es geschrieben ist. Mit viel Mühe könnte man da vielleicht ein paar andere Strukturen abgucken ?

Das hat aber nur Sinn, wenn man den Source versteht. Beispielsweise war "C" mit all seinen Abarten nie mein Ding.

Geändert von delnu (13. Jul 2011 um 18:15 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#8

AW: RTF - Absatzhintergrund setzen

  Alt 13. Jul 2011, 12:07
Es scheint, dass das MS-RichEdit (TRichEdit ist ja nur ein Wrapper dafür) bestimmten RTF-Code nicht nur ignoriert, sondern gleich mal "stinkelinkpief" entfernt.
Da hast Du leider recht. ich habe unter Word ein RTF-Doc erstellt mit drei Bookmarks.
Code:
{\rtf1\ansi\ansicpg1252\uc1\deff0\stshfdbch13\stshfloch0\stshfhich0\stshfbi0\deflang1033\deflangfe2052{\fonttbl{\f0\froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}
{\f13\fnil\fcharset134\fprq2{\*\panose 02010600030101010101}SimSun{\*\falt Arial Unicode MS};}{\f355\fnil\fcharset134\fprq2{\*\panose 00000000000000000000}@SimSun;}{\f356\froman\fcharset238\fprq2 Times New Roman CE;}
{\f357\froman\fcharset204\fprq2 Times New Roman Cyr;}{\f359\froman\fcharset161\fprq2 Times New Roman Greek;}{\f360\froman\fcharset162\fprq2 Times New Roman Tur;}{\f361\froman\fcharset177\fprq2 Times New Roman (Hebrew);}
{\f362\froman\fcharset178\fprq2 Times New Roman (Arabic);}{\f363\froman\fcharset186\fprq2 Times New Roman Baltic;}{\f364\froman\fcharset163\fprq2 Times New Roman (Vietnamese);}}{\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;
\red0\green255\blue0;\red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0;\red255\green255\blue255;\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0;\red128\green0\blue128;\red128\green0\blue0;\red128\green128\blue0;
\red128\green128\blue128;\red192\green192\blue192;}{\stylesheet{\ql \li0\ri0\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \fs24\lang1033\langfe2052\loch\f0\hich\af0\dbch\af13\cgrid\langnp1033\langfenp2052 \snext0 Normal;}{\*\cs10 
\additive \ssemihidden Default Paragraph Font;}{\*\ts11\tsrowd\trftsWidthB3\trpaddl108\trpaddr108\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\trcbpat1\trcfpat1\tscellwidthfts0\tsvertalt\tsbrdrt\tsbrdrl\tsbrdrb\tsbrdrr\tsbrdrdgl\tsbrdrdgr\tsbrdrh\tsbrdrv
\ql \li0\ri0\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \fs20\lang1024\langfe1024\loch\f0\hich\af0\dbch\af13\cgrid\langnp1024\langfenp1024 \snext11 \ssemihidden Normal Table;}}{\*\latentstyles\lsdstimax156\lsdlockeddef0}
{\*\rsidtbl \rsid148831\rsid286133\rsid339185\rsid860998\rsid984241\rsid984450\rsid1004256\rsid1135108\rsid1867516\rsid2033815\rsid2186730\rsid2651832\rsid2709365\rsid2763979\rsid2770010\rsid2850316\rsid3034264\rsid3043031\rsid3161640\rsid3166147
\rsid3176606\rsid3421001\rsid3764785\rsid3765739\rsid4532240\rsid5065658\rsid5444682\rsid5523901\rsid5592349\rsid5775163\rsid6039071\rsid6240517\rsid6314697\rsid6372026\rsid6516505\rsid6633370\rsid6907469\rsid7293895\rsid7356863\rsid8278815\rsid9269557
\rsid9400270\rsid9518292\rsid9578992\rsid9582052\rsid10118095\rsid10888404\rsid11013118\rsid11295661\rsid11628073\rsid11810928\rsid12001982\rsid12079470\rsid12398361\rsid12658918\rsid12921025\rsid13506130\rsid13711537\rsid13916882\rsid14036614
\rsid14105085\rsid14122565\rsid14162813\rsid14299974\rsid14319551\rsid15021587\rsid15428711\rsid16007591\rsid16208196\rsid16265863\rsid16402579\rsid16536528\rsid16600936\rsid16721138}{\*\generator Microsoft Word 11.0.6568;}
\widowctrl\ftnbj\aenddoc\noxlattoyen\expshrtn\noultrlspc\dntblnsbdb\nospaceforul\formshade\horzdoc\dgmargin\dghspace180\dgvspace180\dghorigin1800\dgvorigin1440\dghshow1\dgvshow1
\jexpand\viewkind1\viewscale90\pgbrdrhead\pgbrdrfoot\splytwnine\ftnlytwnine\htmautsp\nolnhtadjtbl\useltbaln\alntblind\lytcalctblwd\lyttblrtgr\lnbrkrule\nobrkwrptbl\snaptogridincell\allowfieldendsel\wrppunct
\asianbrkrule\rsidroot3034264\newtblstyruls\nogrowautofit \fet0\sectd \linex0\headery708\footery708\colsx708\endnhere\sectlinegrid360\sectdefaultcl\sftnbj {\*\pnseclvl1\pnucrm\pnstart1\pnindent720\pnhang {\pntxta .}}{\*\pnseclvl2
\pnucltr\pnstart1\pnindent720\pnhang {\pntxta .}}{\*\pnseclvl3\pndec\pnstart1\pnindent720\pnhang {\pntxta .}}{\*\pnseclvl4\pnlcltr\pnstart1\pnindent720\pnhang {\pntxta )}}{\*\pnseclvl5\pndec\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl6
\pnlcltr\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl7\pnlcrm\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl8\pnlcltr\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl9\pnlcrm\pnstart1\pnindent720\pnhang
{\pntxtb (}{\pntxta )}}\pard\plain \ql \li0\ri0\widctlpar\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \fs24\lang1033\langfe2052\loch\af0\hich\af0\dbch\af13\cgrid\langnp1033\langfenp2052 {\lang1031\langfe2052\langnp1031\insrsid3034264 
\hich\af0\dbch\af13\loch\f0 \hich\f0 Testdokument f\'fc\loch\f0 r bookmarks unter rtf}{\lang1031\langfe2052\langnp1031\insrsid14299974 
\par }{\lang1031\langfe2052\langnp1031\insrsid3034264 \hich\af0\dbch\af13\loch\f0 W\hich\af0\dbch\af13\loch\f0 ert1\hich\af0\dbch\af13\loch\f0 ={\*\bkmkstart w1}{\*\bkmkend w1}\tab \hich\af0\dbch\af13\loch\f0 wert2={\*\bkmkstart w2}\hich\af0\dbch\af13\loch\f0 
w2{\*\bkmkend w2}
\par \hich\af0\dbch\af13\loch\f0 W\hich\af0\dbch\af13\loch\f0 ert3\hich\af0\dbch\af13\loch\f0 ={\*\bkmkstart w3}\hich\af0\dbch\af13\loch\f0 watwert}{\lang1031\langfe2052\langnp1031\insrsid3034264\charrsid3034264 {\*\bkmkend w3}
\par }}
Und was MS-Richedit daraus gemacht hat:
Code:
{\rtf1\ansi\ansicpg1252\deff0\deflang1033\deflangfe2052{\fonttbl{\f0\froman\fprq2\fcharset0 Times New Roman;}{\f1\fnil\fprq2\fcharset134 SimSun;}}
\viewkind4\uc1\pard\lang1031\f0\fs24 Testdokument f\'fcr bookmarks unter rtf\f1 
\par \f0 Wert1=\tab wert2=w2
\par Wert3=watwert\f1 
\par }
abgesehen von den "überflüssigen" Font und Farbdefinitionen ist das ja schon minimalistisch.
Bleibt die Frage "Wo gibt's ein besseres Richedit?"

Edith:
Kopf und Fußzeilen verschwinden ebenso!

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector

Geändert von p80286 (13. Jul 2011 um 12:13 Uhr)
  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 09:44 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