Delphi-PRAXiS
Seite 1 von 8  1 23     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 5. Jul 2011 08:27

RTF - Absatzhintergrund setzen
 
Ich habe ein kleines Tool geschrieben, das aus einem bestimmten Forum (nein, nicht die DP *g*) neue Einträge ermittelt und diese dann in einem RichEdit darstellt. Dabei wird der ggf. vorhandene phpBB-Code geparsed und in RTF umgewandelt. Das klappt auch alles prima, nur beiße ich mir an einem Problem die Zähne aus: da ich auch die Möglichkeit biete, das RTF als Datei abzuspeichern, würde ich Zitate dort gern mit einem hellgrauen Absatzhintergrund versehen, falls jemand diese Datei später mit Word öffnet. Die bisherige Absatzformatierung gestalte ich mittels EM_SETPARAFORMAT und einem PARAFORMAT2-Record. Dieser enthält ja auch die Felder wShadingWeight und wShadingStyle. Zu wShadingStyle sagt das MSDN:
Zitat:

Style and colors used for background shading. Bits 0 to 3 contain the shading style, bits 4 to 7 contain the foreground color index, and bits 8 to 11 contain the background color index.
Wenn ich das richtig deute, bestimmt somit das niederwertigste Nibble den Stil, das folgende Nibble die Vordergrundfarbe und das wiederum darauf folgende die Hintergrundfarbe laut Tabelle. Versuchen wir also mal Folgendes: Verhältnis Vordergrund/Hintergrund 50%, beide Farben auf Hellgrau, kein Füllstil. Wenn ich das richtig verstehe (und gerade das scheint ja nicht so zu sein), hieße das:
Delphi-Quellcode:
ParaFormat.wShadingWeight := 50;
ParaFormat.wShadingStyle := $0F shl 4 or $0F shl 8; //oder auch gleich $FF shl 4
Damit wird der Absatz aber nicht hellgrau, sondern schwarz. Shiftet man etwas weiter, kommen andere Farben heraus (einen weiter nach links z.B. wird es Magenta). Ich habe noch kein Muster erkennen können, weiß somit auch nicht, wo mein Denkfehler liegt. Kann mich mal jemand erhellen?

[edit] @Mods: wegen TRichEdit (das ja irgendwie damit zu tun hat) habe ich das Thema in dieser Sparte erstellt, falls das aber unter Win32-API besser aufgehoben ist, bitte verschieben. Danke [/edit]

p80286 5. Jul 2011 10:08

AW: RTF - Absatzhintergrund setzen
 
Warum machst Du es nicht so:
Delphi-Quellcode:
ParaFormat.wShadingStyle := $0FF0;
Und gefühlt ist $0770 eher Grau oder vllt. $00F0 ?
Ich hab es nicht so mit den Farben.

Gruß
K-H

DeddyH 5. Jul 2011 10:15

AW: RTF - Absatzhintergrund setzen
 
Nunja, das kommt ja auf dasselbe heraus. Das Problem sind weniger die Zahlwerte an sich, sondern, dass das Setzen nicht das Ergebnis bringt, das ich aus der MSDN-Hilfe herauslese. Laut Tabelle ist der ColorIndex für Hellgrau 15, ich müsste also Nibble 1 und 2 (wenn man konsequenterweise bei 0 zu zählen beginnt) auf 15 setzen, das tun ja alle von Dir und mir beschriebenen Wege. Nur das Ergebnis ist eben nicht das erwartete.

Trotzdem Danke

p80286 5. Jul 2011 11:56

AW: RTF - Absatzhintergrund setzen
 
Mach es doch so wie Word über
Zitat:

\cbpatN N is the background color of the background pattern, specified as an index into the document's color table.
Z.B.
Hellgrau(5%) --> \cbpat17 bei dieser Colortable:
Code:
{\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;
\red243\green243\blue243;}
Gruß
K-H

DeddyH 5. Jul 2011 12:04

AW: RTF - Absatzhintergrund setzen
 
Und wie bekomme ich das hin, ohne auf die Rohdaten zurückzugreifen?

p80286 5. Jul 2011 12:44

AW: RTF - Absatzhintergrund setzen
 
Zitat:

Zitat von DeddyH (Beitrag 1110043)
Und wie bekomme ich das hin, ohne auf die Rohdaten zurückzugreifen?

Das ist eine gute Frage.
Ich hatte es so verstanden, daß Du den RTF-File generierst.

Gruß
K-H

DeddyH 5. Jul 2011 12:49

AW: RTF - Absatzhintergrund setzen
 
Nein, ich benutze ein TRichEdit zur Anzeige und möchte lediglich für das Speichern als Datei den Absatzhintergrund setzen (RichEdit unterstützt ja eine derartige Anzeige leider nicht, Word schon).

delnu 6. Jul 2011 19:54

AW: RTF - Absatzhintergrund setzen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo, ich sah den Hilferuf bei lima-city - wo ich leider gesperrt bin - und habe mich darum hier angemeldet, um antworten zu können.

Also, das mit den Hintergrundfarben geht durchaus mit TRichEdit, vorausgesetzt man weiß wie. Ich habe das auch schon mit Delphi 5 unter Windows XP eingesetzt.

Aus PDF-Datei extrahiert ( Toolbox 5/2005, Seite 91 ) :

Erweiterte Formate im Richeditfeld

Mit der Struktur TCharFormat lassen sich beim RichEdit-
Feld in Delphi weitere Text-Formatierungen einstellen:

PROCEDURE TForm1.SetCharFormat(CharacterFormat: INTEGER); Icon.Free;
// Subscript / Superscript // ...
VAR
Format: TCharFormat;
BEGIN
FillChar(Format, SizeOf(Format), 0);
WITH Format DO BEGIN
cbSize := SizeOf(Format);
dwMask := CFM_OFFSET;
CASE CharacterFormat OF
CFE_Superscript: yOffset := 40;
CFE_Subscript : yOffset := -40;
0 : yOffset := 0;
END;
END;

Unter Windows XP ist die von der Komponente genutzte
RICHED32.DLL (Version 1) nur noch ein Wrapper für
RICHED20.DLL (Version 3). Dadurch werden Formatie-
rungen mit der Struktur CHARFORMAT2 ermöglicht:

Hintergrundfarbe
PROCEDURE TForm1.SetBColor(AColor: TColor);
VAR
Format: CHARFORMAT2;
BEGIN
FillChar(Format, SizeOf(Format), 0);
WITH Format DO BEGIN
cbSize := SizeOf(Format);
dwMask := CFM_BACKCOLOR;
crBackColor := AColor;
RE.Perform(EM_SETCHARFORMAT, SCF_SELECTION,
LongInt(@Format));
END;
END;

Die einzelnen Funktionen zeigt das Beispielprogramm auf
der CD-ROM im Zusammenhang.
(Wolfgang Beintvogl)


Wie ich gerade sehe, sind Anhänge möglich. Also packe ich doch gleich mal das Beispielprogramm dazu.
Viel Glück.

DeddyH 7. Jul 2011 07:46

AW: RTF - Absatzhintergrund setzen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Herzlichen Dank, vor allem, dass Du Dich extra für diese Antwort angemeldet hast. Ich habe das Projekt nicht ausprobiert, aber anhand des Quelltextes scheint es dort um den Zeichenhintergrund zu gehen. Das ist leider nicht das, was ich möchte, mir geht es um den Absatz. Zur Verdeutlichung ein Screenshot anbei.

Trotzdem Danke für Deine Mühe

delnu 7. Jul 2011 14:17

AW: RTF - Absatzhintergrund setzen
 
Schade ! Anhand der Grafik sah ich jetzt den erheblichen Unterschied. Mich würde es auch stören, wenn man dann extra die Zeilen mit Leerzeichen auffüllen müßte.

Nunja, extra anmelden ...

Das kann doch für die Zukunft nur nützlich sein.

Ich werde mal meine alten Quellen ( ich habe eine Weile nichts mit Delphi gemacht ) noch weiter durchsehen und auch bei Gelegenheit gezielt im Internet recherchieren. Das RTF-Format hatte mich auch schon immer gereizt. Anhand der Angaben von Beintvogl lassen sich mit Sicherheit noch andere Erweiterungen nutzen, sobald man deren Bezeichnungen kennt. Wenn ich was gefunden ( und vorher erprobt ) habe, melde ich mich wieder.

Ansonsten liest man sich wohl irgendwann mal wieder hier im Forum. Mal gucken, wo und wie ich da aktiv werde.

Viele Grüße und viel Erfolg beim Suchen nach des Rätsels Lösung. Wenn Du was gefunden hast, denke ich mal, daß Du es andere wissen läßt.


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:20 Uhr.
Seite 1 von 8  1 23     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