Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   RTF - Absatzhintergrund setzen (https://www.delphipraxis.net/161467-rtf-absatzhintergrund-setzen.html)

DeddyH 11. Jul 2011 11:04

AW: RTF - Absatzhintergrund setzen
 
Also, mir persönlich würde es vorerst genügen, wenn ich mein RTF so abspeichern kann, dass Word das wie beabsichtigt darstellt. Bis auf das Füllmuster ist dies ja bereits gelungen. Wenn man natürlich mittelfristig in der Lage ist, einen RichEdit-Ersatz zu schreiben, der mit allen RTF-Features klarkommt und diese auch darstellt (also ähnlich zu TRichView und Konsorten), so ist das sicherlich nice to have, für mich aber gerade nicht so dringlich.

p80286 11. Jul 2011 11:49

AW: RTF - Absatzhintergrund setzen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ich hab im Augenblick keine Zeit zum testen, aber vielleicht als Denkanstoß:
(siehe screenshot)
Dieses Füllmuster verbirgt sich in Word hinter der Linienart (darauf muß man erst einmal kommen)
Wenn man die 100% auswählt, dann entspricht das der $0800 (?) die oben schon mal aufgetaucht ist.

vielleicht hilft's Dir weiter.

Gruß
K-H

DeddyH 11. Jul 2011 12:15

AW: RTF - Absatzhintergrund setzen
 
Völlig bescheuert, nicht? Ich werde auf jeden Fall mal in der Richtung weiterforschen, Danke.

Memnarch 11. Jul 2011 12:38

AW: RTF - Absatzhintergrund setzen
 
Das ist ja hier wie CSI :stupid:
Da les ich doch gerne weiter mit *popcorn holt*

RTF ist immerwieder einen Krimi wert :D

Viel glück auf der weiteren Suche, ich beobachte das mal.


MFG
Memnarch

DeddyH 11. Jul 2011 12:40

AW: RTF - Absatzhintergrund setzen
 
[OT] Bei CSI würde ich die Maske einfach ins Labor geben, statt die x-te Datei mit 65536 Zeilen zu erzeugen und anzuschauen :stupid: [/OT]

Memnarch 11. Jul 2011 12:43

AW: RTF - Absatzhintergrund setzen
 
@DeddyH: Tja.. ich fürchte IHR seit das LABOR. Offizielles KleinWeich Testgelände :stupid:

DeddyH 11. Jul 2011 17:27

AW: RTF - Absatzhintergrund setzen
 
Man mache Folgendes: Word öffnen, neue Datei erstellen, einen Absatz erstellen und mittels "Rahmen und Schattierung" formatieren (in meinem Falle rot und "Hell horizontal"). Diese Datei lädt man dann in ein RichEdit, liest mit EM_GETPARAFORMAT die Formatierung aus, erstellt einen weiteren Absatz, markiert ihn und weist ihm dann die eben ermittelte Formatierung zu. Das speichern wir nun wieder brav und öffnen das Dokument in Word. Was ist passiert? Nichts, der Text ist da, von der Formatierung keine Spur. Langsam komme ich mir echt veralbert vor :wall:

delnu 11. Jul 2011 19:33

AW: RTF - Absatzhintergrund setzen
 
Ich habe mittlerweile die RTF-Dokumentation geladen und ( weil die Datei dann kleiner ist und schneller geladen wird ) zu PDF konvertiert. Aber das ist sehr kompliziert zu lesen.

Allerdings habe ich noch was anderes gemacht, nämlich TRichView ausprobiert. Ich bin durchaus begeistert. Man kann die Hintergrundfarben von Blöcken auch innerhalb von Delphi sehen. Das scheint also wirklich ideal zu sein. Sowas hatte ich immer gesucht, um RTF-formatierte Texte mittels TDBF in einer Datenbank verwalten zu können.

Standardmäßig benutzt TRichView zwar ein eigenes Dateiformat ( RVF ) aber es läßt sich zu RTF konvertieren, so wie auch RTF geladen werden kann. Den Rest habe ich mir noch nicht genau angesehen. Für die Demo sind compilierte Units dabei und beim Start der EXE-Dateien erscheint oben links auf dem Bildschirm ein entsprechender Hinweis. Bei allem was ich so sah, war auch optisch kein Unterschied zwischen der Darstellung innerhalb von Delphi und mit Open Office zu sehen.

Leider kosten die Quelltexte viel Geld. Einzellizenz = 235 €, 2 bis 3 Entwickler = 340 €, Firmenlizenz = 710 € Hätte ich's übrig, wäre das keine Frage = unbedingt !

Aber vielleicht kommen wir trotzdem weiter. Wie ich sah, hatte ich tatsächlich schon 3 verschiedene Versionen alter Quelltexte von denen, nur Unitquellen ohne Beispiele - habe das darum nie nutzen können, sondern bloß auf CD abgelegt. Genaue Herkunft unbekannt. Ich weiß nicht mal, ob das früher mal umsonst war. Ein Bekannter lud mal vor mehr als 5 Jahren massenweise Delphiquellen für mich, als ich selbst noch kein Internet hatte. Die aktuellen Beispiele funktionieren nicht mit den alten Quellen. Ich suche aber jetzt mal gezielt darin. Wenn ich fündig werde, melde ich mich wieder, aber das kann dauern. Die nächsten Tage habe ich viel zu tun und muß außerdem einen meiner Rechner checken, da hatte sich ein Trojaner eingenistet - ja, ich gebe zu, weil ich per eMule nach Quellen suchte, wovon sich eine dann aber als sehr tückisch erwies. Avira erkannte das weder in der RAR-Datei, geschweige denn nach dem Start der darin enthaltenen EXE-Datei, sondern erst, als mir ein neues Verzeichnis "ProgramData" mit Inhalt auffiel, das neu angelegt worden war und das ich mir daraufhin ansah. Nie wieder starte ich EXE-Dateien, die in Archiven verpackt sind und außerdem eMule ade ... Das dauert sowieso alles viel zu lange.

Also dann, bis die Tage ...

Ach so, bzgl. Formatierung mit EM_GETPARAFORMAT auslesen : Wer weiß, wo da noch Dinge versteckt sind. Hast Du ALLES ausgelesen ( und entsprechend alle Parameter gesetzt, also die Maske nicht nur auf PFM_SHADING belassen ) ?

DeddyH 11. Jul 2011 19:51

AW: RTF - Absatzhintergrund setzen
 
Was ich gemacht hatte: fmt (Typ TParaFormat2) genullt und das cbSize-Feld gesetzt. Anschließend mit EM_GETPARAFORMAT befüllen lassen, originaler geht es wohl nicht ;)

[edit] Achja, wie ich auf der RichView-Seite gesehen habe bieten die wohl eine uralte Version als Freeware an. Allerdings stand was was von 1998, ob das heute noch interessant ist, vermag ich nicht zu beurteilen. [/edit]

p80286 12. Jul 2011 09:28

AW: RTF - Absatzhintergrund setzen
 
Die Frage ist eher ob Du Den Absatz auch richtig erwischt hast.
Auf jeden Fall sollte das abschließende [CRLF] mit selektiert sein.
Einfach nur einpaar Zeichen reicht nicht.

Gruß
K-H

DeddyH 12. Jul 2011 09:35

AW: RTF - Absatzhintergrund setzen
 
Das liest sich im MSDN aber (mal wieder) anders.
Zitat:

The EM_GETPARAFORMAT message retrieves the paragraph formatting of the current selection in a rich edit control.
...
If more than one paragraph is selected, the structure receives the attributes of the first paragraph, and the dwMask member specifies which attributes are consistent throughout the entire selection.
[edit] So, wieder einen Schritt weiter. Ich hatte vergessen, den Rückgabewert von EM_SETPARAFORMAT auszuwerten. Nun ist die Frage, wieso dieser Testcode "Das Handle ist ungültig" ausspuckt.
Delphi-Quellcode:
const
  TestFile = 'C:\temp\Test.rtf';
  TestFile2 = 'C:\temp\Test2.rtf';

procedure TFormTest.Button1Click(Sender: TObject);
var
  fmt: TParaFormat2;
begin
  RichEdit1.Lines.LoadFromFile(TestFile);
  RichEdit1.SelectAll;
  ZeroMemory(@fmt, SizeOf(fmt));
  fmt.cbSize := SizeOf(fmt);
  SendMessage(RichEdit1.Handle, EM_GETPARAFORMAT, 0, lParam(@fmt));
  RichEdit1.SelLength := 0;
  RichEdit1.SelStart := Length(RichEdit1.Lines.Text);
  RichEdit1.SelText := 'Dies ist die Kopie.' + sLineBreak;
  if SendMessage(RichEdit1.Handle, EM_SETPARAFORMAT, 0, lParam(@fmt)) = 0 then
    ShowMessage(SysErrorMessage(GetLastError))
  else
    RichEdit1.Lines.SaveToFile(TestFile2);
end;
[/edit]

[edit2] GetLastError scheint auch Quatsch zu sein, wie kann ich denn nun die Fehlerursache ermitteln? [/edit2]

p80286 12. Jul 2011 11:15

AW: RTF - Absatzhintergrund setzen
 
Welchen Fehler?
das geht ohne Fehlermeldung:
Delphi-Quellcode:
format.cbSize:=sizeof(format);
  format.dwMask:=PFM_SHADING;
  //richedit1.Perform(EM_GETPARAFORMAT,0,longint(@format));
  SendMessage(richedit1.handle,EM_GETPARAFORMAT,0,lparam(@format));
  application.ProcessMessages;
und abgesehen von der Schönhet und ZeroMemory sollte es das gleiche sein?

Gruß
K-H

DeddyH 12. Jul 2011 11:47

AW: RTF - Absatzhintergrund setzen
 
Du wertest ja auch den Rückgabewert nicht aus.
Zitat:

The EM_SETPARAFORMAT message sets the paragraph formatting for the current selection in a rich edit control.
...
Return Value

If the operation succeeds, the return value is a nonzero value.

If the operation fails, the return value is zero.
[edit] Sry, bei GET ist das ja die Maske, bei SET eben die 0, wenn ein Fehler auftritt. [/edit]

delnu 12. Jul 2011 12:14

AW: RTF - Absatzhintergrund setzen
 
Ich komme gerade nicht dazu, das zu testen. Aber könnte das ungültige Handle damit zu tun haben, daß Du mit dem selben RichEdit eine andere Datei speichern willst, als Du vorher eingelesen hast ? Was ist denn, wenn Du den Inhalt in ein zweites RichEdit kopierst ? :roll: ( Nicht durch Direktzuweisung, denn dann wäre es wohl das gleiche Handle, sondern mit Assign. ) Dann kannst Du den Inhalt ja erstmal unverändert speichern und mit dem Original vergleichen und danach ändern, usw. ...

Ich habe jetzt erstmal was anderes zu tun. Bis dann ...

DeddyH 12. Jul 2011 12:20

AW: RTF - Absatzhintergrund setzen
 
Das erscheint mir zwar nicht schlüssig, aber ich probiere es heute Abend mal aus. Witzig ist, dass die mit Word erstellte Datei 10 KB groß ist, die von mir erzeugte mit der weiteren Zeile (und zumindest optisch originalem Absatzformat der ersten) aber nur noch 1 KB. Da kann man mal wieder sehen, wieviel Müll MS in Dateien produziert :lol:

p80286 12. Jul 2011 12:41

AW: RTF - Absatzhintergrund setzen
 
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

DeddyH 12. Jul 2011 12:43

AW: RTF - Absatzhintergrund setzen
 
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).

delnu 12. Jul 2011 13:57

AW: RTF - Absatzhintergrund setzen
 
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 ! :shock: 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. :shock:

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. :pale: Für heute reicht es mir.

DeddyH 12. Jul 2011 18:59

AW: RTF - Absatzhintergrund setzen
 
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.

delnu 13. Jul 2011 09:02

AW: RTF - Absatzhintergrund setzen
 
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 ? :roll:

p80286 13. Jul 2011 12:07

AW: RTF - Absatzhintergrund setzen
 
Zitat:

Zitat von DeddyH (Beitrag 1111398)
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

DeddyH 13. Jul 2011 14:04

AW: RTF - Absatzhintergrund setzen
 
Zitat:

Zitat von delnu (Beitrag 1111440)
Kann es sein, daß sowas wirklich nur bei Word existiert ? :roll:

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.

delnu 13. Jul 2011 17:54

AW: RTF - Absatzhintergrund setzen
 
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.

DeddyH 14. Jul 2011 12:59

AW: RTF - Absatzhintergrund setzen
 
Ich habe jetzt auf die Schnelle den Source zu OO/LibreOffice nicht gefunden, möchte aber fast wetten, dass es sich um C++ (evtl. auch Java, aber C++ erscheint mir wahrscheinlicher) handelt.

delnu 14. Jul 2011 16:13

AW: RTF - Absatzhintergrund setzen
 
"Auf die Schnelle" war das aber schon ziemlich perfekt, weil nämlich beides zutrifft, siehe http://sourceforge.net/projects/libreoffice/develop und falls Du beides kannst, den Source gibt es offensichtlich hier : http://www.libreoffice.org/download/

Nach OpenOffice habe ich nicht mehr gesucht, weil das offenbar veraltet ist bzw. nicht mehr weiterentwickelt wird. Ich hatte bei lima-city im Forum mal irgendwas in der Art gelesen, finde es aber jetzt nicht mehr.

DeddyH 14. Jul 2011 16:23

AW: RTF - Absatzhintergrund setzen
 
Oh nee, Danke, lass mal. Vade retro, Satanas :lol:

delnu 14. Jul 2011 16:59

AW: RTF - Absatzhintergrund setzen
 
Na ! :angel2: Mich aber bitte nicht mit diesen Sprachen verwechseln. :shock: Aber bitte, wenn statt dessen ich weichen soll, phh. :roll:

Übrigens : Bei lima-city heißt "angel2" aber "holy" ...

DeddyH 14. Jul 2011 17:14

AW: RTF - Absatzhintergrund setzen
 
Du warst ja auch nicht gemeint ;)

p80286 14. Jul 2011 17:35

AW: RTF - Absatzhintergrund setzen
 
Zitat:

Zitat von delnu (Beitrag 1111598)
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.

Dann sprich mal mit den Leuten, die "Automation" betreiben, die haben da durchaus verwendung für.
Platt gesagt schiebst Du Daten aus z.B.einer DB-Abfrage auf die Bookmarks und fertig ist dein gefülltes Formschreiben. (Na gut ist ein wenig komplizierter aberso geht's im Prinzip)

Gruß
K-H

omata 14. Jul 2011 17:54

AW: RTF - Absatzhintergrund setzen
 
Zitat:

Zitat von p80286 (Beitrag 1111767)
Platt gesagt schiebst Du Daten aus z.B.einer DB-Abfrage auf die Bookmarks und fertig ist dein gefülltes Formschreiben.

Das ist allerdings kein schöner Weg! Ich habe soetwas auch schon gesehen und mich dermaßen geärgert. Dafür nimmt man keine Bookmarks sondern MergeFields! Das scheinen einige Leute noch nicht begriffen zu haben.

@p80286: Das geht nicht gegen Dich.

Aber das mußte ich jetzt einfach mal loswerden, weil das absolut super schlechter Stil ist. Vor allem deshalb, weil es etwas viel besseres und flexibleres gibt.

p80286 15. Jul 2011 10:34

AW: RTF - Absatzhintergrund setzen
 
Ich hab nichts dagegen etwas dazu zu lernen.
Aber sind die Mergefields nicht den "Adressen im Serienbrief vorbehalten?
So wie ich es kenne werden die Bookmarks gefüllt, über die Ref-Felder die Mehrfachausgabe geregelt und dann die Mergefields mit den "Adressen" gefüllt.

Gruß
K-H

omata 15. Jul 2011 12:31

AW: RTF - Absatzhintergrund setzen
 
Deine Annahme ist völlig korrekt. Allerdings war das, was ich schonmal gesehen hatte eine OLE-Steuerung über Delphi und dort wurde von der Word-Seite das Schlüsselwort Bookmark verwendet und das bezog sich auf Textmarken. Also festplazierte Positionen, die ganz zwierig gewartet werden konnten, weil sie sich nicht mit dem Text bewegten.

Du hast davon gesprochen, die Daten aus einer Datenbank zuholen. Was außer einem Serienbrief sollten das dann sein. Das ist doch das Einfachste und da werden dann Mergefields verwendet. An die REF-Felder hatte ich jetzt selbst nicht gedacht. Da gebe ich dir recht, eventuell sind das die besseren Textmarken (ohne feste Plazierung). Das habe ich noch nicht ausprobiert, ob man über Delphi + Bookmark-Zugang auch REF-Felder mit Inhalt belegen kann.

Aber wir entfernen uns langsam zu sehr von dem eigentlichen Thema. Also, nicht für ungut.

Viele Grüße

delnu 15. Jul 2011 15:52

AW: RTF - Absatzhintergrund setzen
 
Zitat:

Aber wir entfernen uns langsam zu sehr von dem eigentlichen Thema.
Trotzdem :thumb: Sehr interessant, auch wenn's für mich ( obwohl langjährige Programmier-Erfahrung ) "böhmische Dörfer" sind. Macht doch ein neues Thema dazu auf !

p80286 15. Jul 2011 16:23

AW: RTF - Absatzhintergrund setzen
 
Einigen wir uns auf
" Es gibt Funktionalitäten in MS-Word, die von anderen (Kompatiblen) Textverarbeitungssystemen nicht unterstützt werden."

Ach ja, wie kann ich heraus bekommen wlche RichEdit-Version aktuell (von Delphi) genutzt wird?
MS sagt LoadLibrary aber das bringt mich nicht so richtig weiter.
Hilft ein Blick in die known DLLs?

Gruß
K-H

delnu 15. Jul 2011 17:18

AW: RTF - Absatzhintergrund setzen
 
Zitat:

wie kann ich heraus bekommen wlche RichEdit-Version aktuell (von Delphi) genutzt wird?
Jetzt, wo Du es erwähnst :
Bei Delphi 7, Unit "ComCtrls" heißt es :
Delphi-Quellcode:
procedure TCustomRichEdit.CreateParams(var Params: TCreateParams);
const
  RichEditModuleName = 'RICHED32.DLL';
  HideScrollBars: array[Boolean] of DWORD = (ES_DISABLENOSCROLL, 0);
  HideSelections: array[Boolean] of DWORD = (ES_NOHIDESEL, 0);
begin
  if FRichEditModule = 0 then
  begin
    FRichEditModule := LoadLibrary(RichEditModuleName);
    if FRichEditModule <= HINSTANCE_ERROR then FRichEditModule := 0;
  end;
  inherited CreateParams(Params);
  CreateSubClass(Params, 'RICHEDIT');
  with Params do
  begin
    Style := Style or HideScrollBars[FHideScrollBars] or
      HideSelections[HideSelection];
    WindowClass.style := WindowClass.style and not (CS_HREDRAW or CS_VREDRAW);
  end;
end;
Ob es aber was bringt, statt 'RICHED32.DLL' nun 'RICHED20.DLL' hinzuschreiben, glaube ich nicht, zumal es ja nicht wirklich möglich ist, die Standard-Units neu zu compilieren.

Wie man einige neuere RichEdit-Möglichkeiten nutzen kann, wird ja von Wolfgang Beintvogl ( siehe den Auszug aus der Toolbox inkl. Sourcen im Beitrag #8 ) erklärt.

Wie man gezielt DLLs auswertet, um dann anhand der gewonnenen Namen von Funktionen und Prozeduren auf diese zugreifen zu können, weiß ich leider nicht mehr. Dafür habe ich mich einige Jahre lang nicht mehr intensiv genug mit Delphi befaßt. Es kann natürlich sein, daß Borland seinerzeit nicht alles eingebunden hat, weil es das z.B. vielleicht damals noch nicht gab. In sofern ein interessanter Aspekt.

So, ich hatte jetzt zwischendurch mal etwas gegoogelt und dann bei Heise diesen Download-Link http://www.heise.de/software/download/ddwl37900 für "Dependency Walker" gefunden und mir dann damit mal kurz die 'RICHED20.DLL' angesehen. Was da erst noch alles an weiteren DLLS eingebunden wird, ist erschreckend.

Allerdings ist das eigentliche Endergebnis eher ernüchternd :
IID_IRichEditOle
IID_IRichEditOleCallback
CreateTextServices
IID_ITextServices
IID_ITextHost
IID_ITextHost2
REExtendedRegisterClass
RichEdit10ANSIWndProc
RichEditANSIWndProc

p80286 18. Jul 2011 09:48

AW: RTF - Absatzhintergrund setzen
 
Vielen Dank,
da gibt es wieder was für langweilige Abende zu tun. Mir ging es eigentlich um die MSFTEDIT.dll, die ja die offizelle dll für Rich Edit 4.1 sein soll.
Mal sehen was sich daraus machen läßt.

Gruß
K-H
Edith:
Ich habe einmal nachgeschaut welche RICHEDxx.DLLs es auf meinem Rechner gibt:

* C:\WINDOWS\system32\RICHED20.DLL
ProductVersion:5.0.0.0

* C:\WINDOWS\system32\RICHED32.DLL
ProductVersion:5.1.2600.0

C:\Program Files\Common Files\Microsoft Shared\Office10\RICHED20.DLL
ProductVersion:5.0.0.0

C:\Program Files\Common Files\Microsoft Shared\OFFICE11\RICHED20.DLL
ProductVersion:5.0.0.0

C:\Program Files\Common Files\Microsoft Shared\OFFICE12\RICHED20.DLL
ProductVersion:12.0.6500.0

die beiden mit * markierten werden von Delphi7 bzw XE genutzt.
Wie Übereinstimmung der Versionsangaben mit den Infos in msdn zu erreichen ist? Keine Ahnung!

delnu 18. Jul 2011 20:42

AW: RTF - Absatzhintergrund setzen
 
Interessant ! Die MSFTEDIT.DLL kannte ich nicht, habe sie aber gerade geladen und mit "Dependency Walker" angesehen.

Da gibt es tatsächlich etwas mehr :

IID_IRichEditOle
IID_IRichEditOleCallback
CreateTextServices
IID_ITextServices
IID_ITextHost
IID_ITextHost2
REExtendedRegisterClass
RichEditANSIWndProc
RichEdit10ANSIWndProc
SetCustomTextOutHandlerEx
DllGetVersion
RichEditWndProc
RichListBoxWndProc
RichComboBoxWndProc

Aber mich frage bitte keiner, wie man das einsetzt. Momentan suche ich auch was ganz anderes, nämlich einen Delphi-Wrapper für den Firefox. Fast überall tote Links und/oder unbrauchbare Tipps.


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:13 Uhr.
Seite 2 von 2     12   

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