Delphi-PRAXiS
Seite 2 von 8     12 34     Letzte »    

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 7. Jul 2011 14:26

AW: RTF - Absatzhintergrund setzen
 
Zitat:

Zitat von delnu (Beitrag 1110593)
Wenn Du was gefunden hast, denke ich mal, daß Du es andere wissen läßt.

Aber selbstverfreilich :zwinker:

p80286 7. Jul 2011 16:23

AW: RTF - Absatzhintergrund setzen
 
Ich habe einmal etwas herum gespielt, mit folgendem Code kann man durchaus Farbmanipulationen durchführen:
Delphi-Quellcode:
var
  format:tparaformat2;
begin
  richedit1.SelStart:=11;
  richedit1.SelLength:=40;
  memo1.Lines.Text:=richedit1.seltext;
  format.cbSize:=sizeof(format);
  format.dwMask:=PFM_SHADING;
  richedit1.Perform(EM_GETPARAFORMAT,0,longint(@format));
  application.ProcessMessages;
  format.dwMask:=PFM_SHADING;
  format.cbSize:=sizeof(format);
  format.wShadingWeight:=50;
 // format.wShadingStyle:=$0FF0;
 // format.wShadingStyle:=$0700;
 format.wShadingStyle:=$0800;
  richedit1.Perform(EM_SETPARAFORMAT,0,longint(@format));
  application.ProcessMessages;
  richedit1.Lines.SaveToFile('c:\temp\test.rtf');
end;
Das ist dann das Ergebnis:
Code:
{\rtf1\ansi\ansicpg1252\deff0\deflang1033{\fonttbl{\f0\fnil Tahoma;}}
{\colortbl ;\red0\green0\blue0;}
\viewkind4\uc1\pard\f0\fs16 RichEdit1
\par \pard\cbpat1\shading50 das ist der zweite Absatz
\par dies ist der der dritte
\par \pard und das ist nummero4
\par
\par }
Wobei sich je nach eingegebenem wert die colortbl ändert.
Aber wenn
Delphi-Quellcode:
wShadingStyle:=$x8xx;
gesetzt wird, dann hat man einen schwarz hinterlegten Absatz in der Word-Anzeige. Ist dieses Bit nicht gesetzt, dann gibt es keine Farben und auch sonst nichts zu sehen.
(Word2003)

Gruß
K-H

DeddyH 7. Jul 2011 16:46

AW: RTF - Absatzhintergrund setzen
 
Danke für Deine Mühen. Aber das widerspricht doch auch der Beschreibung im MSDN, oder täusche ich mich? Wieso enthält die Colortable nur eine Farbe, und die ist schwarz? Hätten es nicht Schwarz(Vordergrund) und Dunkelblau(Hintergrund) sein müssen?

p80286 7. Jul 2011 17:12

AW: RTF - Absatzhintergrund setzen
 
Das ist eine gute Frage!
das
Code:
{\colortbl ;\red0\green0\blue0;}
ist das Ergebnis von $0800.
wenn ich mich nicht irre ergibt $0F00
Code:
{\colortbl ;\red192\green0\blue192;}
Aber es wird nichts angezeigt!
Die RTF-Doku schreibt
Zitat:

Each definition must be delimited by a semicolon, even if the definition is omitted. If a color definition is omitted, the RTF reader uses its default color. The following example defines the default color table used by Word. The first color is omitted, as shown by the semicolon following the \colortbl control word. The missing definition indicates that color 0 is the ‘’auto’’ color.
{\colortbl;\red0\green0\blue0;\red0\green0\blue255 ;
jetzt weiß ich beim besten Willen nicht wo er anfängt zu Zählen, Ich gehe davon aus, daß in PARAMETER2 die Bits verschoben sind. Noch mehr stört mich allerdings, daß die Anzeige so stur ist. Die ganze Sucherei als letztlich vergebliche Liebesmüh.

Gruß
K-H

DeddyH 7. Jul 2011 18:06

AW: RTF - Absatzhintergrund setzen
 
Und genau das ist, was mich an der ganzen Sache so stört. Die Werte, die durch wildes Herumprobieren entstehen, bewirken eine Farbänderung (zwar nicht die gewünschte, aber immerhin irgendeine). Versucht man es aber laut Doku, dann passiert entweder gar nichts oder nicht das, was eigentlich passieren sollte. Irgendwie ist da fürchterlich der Wurm drin. Machen wir irgendwas falsch?

delnu 8. Jul 2011 00:29

AW: RTF - Absatzhintergrund setzen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo, Leute !

Anhand des Beispiels von p80286 habe ich zunächst auch etwas herumgedoktert und es kam auch nur Müll raus wie bei Euch, weiß auf schwarz. Ich habe kein Word, sondern die Ergebnisse mit OpenOffice getestet. Dort habe ich dann auch mal die Werte so eingestellt, wie sie sein sollen, gespeichert und mir die relevante Stelle angesehen.

Die Farbtabelle besteht dann aus 3 Werten : 0,0,0,192,192,192,128,128,128

Nun habe ich also die beiden falschen Werte durch die 3 korrekten ersetzt, das Ergebnis geladen und mir anzeigen lassen, was denn nun da stehen muß. Das Ergebnis überrascht, denn es liegt ganz woanders als bei der Rumdokterei : format.wShadingStyle:=$8040;

Ich habe es mit Delphi 7 getestet. Das Beispiel anbei. Viel Vergnügen damit.

Irgendwie bekommen wir irgendwann sicher RichEdit auch noch dazu, das darzustellen. :coder:

DeddyH 8. Jul 2011 07:06

AW: RTF - Absatzhintergrund setzen
 
Genau so wollte ich es haben, Danke :cheers:. Aber es bleibt die Frage: wie kommt dieser Wert zustande? Und gilt der auch künftig weiterhin? Gibt es ein Leben vor dem Tod? Fragen über Fragen :gruebel:

p80286 8. Jul 2011 09:32

AW: RTF - Absatzhintergrund setzen
 
Also ohne es genau zu prüfen, das riecht doch sehr nach least significant und Konsorten, vielleicht hat da jemand die Abspeicherung und die Registerinhalte vertauscht?

Gruß
K-H

DeddyH 8. Jul 2011 09:33

AW: RTF - Absatzhintergrund setzen
 
Der Gedanke war mir auch zuerst gekommen, aber $0FF0 ist ja vorwärts und rückwärts dasselbe, oder nicht? Ich komme schon ganz durcheinander hier.

p80286 8. Jul 2011 09:40

AW: RTF - Absatzhintergrund setzen
 
Nee $0FF0 oder $F00F ?
Bei delnu's Lösung wäre das verkehrt $4080 ?
wenn man jetzt noch die Nibbels tauscht??

Ich liebe diese verquere Logik!

Gruß
K-H

P.S.
warum hatte ich eigentlich keine bunte Anzeige?
Gib'ts da einen wert der auch für mich ein Erfolgserlebnis verspricht?


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:02 Uhr.
Seite 2 von 8     12 34     Letzte »    

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