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
Seite 1 von 8  1 23     Letzte »    
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.537 Beiträge
 
Delphi 11 Alexandria
 
#1

RTF - Absatzhintergrund setzen

  Alt 5. Jul 2011, 08:27
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]
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

Geändert von DeddyH ( 5. Jul 2011 um 08:33 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

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

AW: RTF - Absatzhintergrund setzen

  Alt 5. Jul 2011, 10:08
Warum machst Du es nicht so:
ParaFormat.wShadingStyle := $0FF0; Und gefühlt ist $0770 eher Grau oder vllt. $00F0 ?
Ich hab es nicht so mit den Farben.

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.537 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: RTF - Absatzhintergrund setzen

  Alt 5. Jul 2011, 10:15
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
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
Benutzerbild von p80286
p80286

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

AW: RTF - Absatzhintergrund setzen

  Alt 5. Jul 2011, 11:56
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
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.537 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: RTF - Absatzhintergrund setzen

  Alt 5. Jul 2011, 12:04
Und wie bekomme ich das hin, ohne auf die Rohdaten zurückzugreifen?
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
Benutzerbild von p80286
p80286

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

AW: RTF - Absatzhintergrund setzen

  Alt 5. Jul 2011, 12:44
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
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.537 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: RTF - Absatzhintergrund setzen

  Alt 5. Jul 2011, 12:49
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).
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
 
#8

AW: RTF - Absatzhintergrund setzen

  Alt 6. Jul 2011, 19:54
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.
Angehängte Dateien
Dateityp: zip wb-rtf04.zip (6,1 KB, 22x aufgerufen)
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.537 Beiträge
 
Delphi 11 Alexandria
 
#9

AW: RTF - Absatzhintergrund setzen

  Alt 7. Jul 2011, 07:46
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
Miniaturansicht angehängter Grafiken
rtf_hintergrund.png  
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
 
#10

AW: RTF - Absatzhintergrund setzen

  Alt 7. Jul 2011, 14:17
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.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 8  1 23     Letzte »    


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:02 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