AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

RTF - Absatzhintergrund setzen

Ein Thema von DeddyH · begonnen am 5. Jul 2011 · letzter Beitrag vom 18. Jul 2011
Antwort Antwort
Seite 3 von 8     123 45     Letzte » 
Benutzerbild von DeddyH
DeddyH

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

AW: RTF - Absatzhintergrund setzen

  Alt 8. Jul 2011, 10:41
Bunt? Versuch mal $F00F.
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
 
#22

AW: RTF - Absatzhintergrund setzen

  Alt 8. Jul 2011, 12:43
Noch ein kurzer Nachtrag:
Hintergrundfärbung erreicht man über $8000-$F800 wobei $8000 wohl grau ist.
Da sind wohl 5Bit im Spiel.
Die bits für das Muster hatten bei mur übrigens keine Auswirkung.

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
delnu
(Gast)

n/a Beiträge
 
#23

AW: RTF - Absatzhintergrund setzen

  Alt 8. Jul 2011, 13:23
Wird die "uses"-Anweisung so verändert, daß "variants" entfällt, kann z.B. schon mit
Delphi 5 compiliert werden :

uses
Windows, Messages, SysUtils, {Variants,} Classes, Graphics, Controls, Forms,
Dialogs, Buttons, ExtCtrls, StdCtrls, ComCtrls, RichEdit;

Außerdem habe ich ein helleres grau gefunden :
//format.wShadingStyle:=$8040; // schwarzer Text auf grauem Grund
format.wShadingStyle:=$004C; // schwarzer Text auf hellgrauem Grund

Hintergrund-Farben :

format.wShadingStyle:=$004C; // schwarzer Text auf hellgrauem Grund
format.wShadingStyle:=$014C; // schwarzer Text auf hellviolett
format.wShadingStyle:=$024C; // schwarzer Text auf hellem blaugrau
format.wShadingStyle:=$034C; // schwarzer Text auf hellem rosagrau

format.wShadingStyle:=$004C; // schwarzer Text auf hellgrauem Grund ( siehe oben )
format.wShadingStyle:=$104C; // schwarzer Text auf dunkelblauem Grund
format.wShadingStyle:=$204C; // schwarzer Text auf dunkelgrünem Grund
format.wShadingStyle:=$304C; // schwarzer Text auf dunkelrotem Grund
format.wShadingStyle:=$404C; // schwarzer Text auf grauem Grund
format.wShadingStyle:=$504C; // schwarzer Text auf dunklem türkis
format.wShadingStyle:=$604C; // schwarzer Text auf dunklem violett
format.wShadingStyle:=$704C; // schwarzer Text auf dunklem oliv
format.wShadingStyle:=$804C; // schwarzer Text auf dunklem grau

format.wShadingStyle:=$124C; // weißer Text auf dunkelblau
format.wShadingStyle:=$134C; // weißer Text auf dunkelblau

format.wShadingStyle:=$224C; // schwarzer Text auf hellerem grün
format.wShadingStyle:=$234C; // schwarzer Text auf hellerem grün

abweichende Ergebnisse bei anschließender Abfrage :

format.wShadingStyle:=$044C; // wird zu $000C ... schwarzer Text auf hellem gelbgrau ?
format.wShadingStyle:=$054C; // wird zu $000C

format.wShadingStyle:=$904C; // wird zu $004C;
format.wShadingStyle:=$A04C; // wird zu $004C;

format.wShadingStyle:=$144C; // wird zu $100C schwarzer Text auf dunkelblau
format.wShadingStyle:=$154C; // wird zu $100C

format.wShadingStyle:=$244C; // wird zu $200C

Eine gewisse Systematik ist durchaus erkennbar. Das Problem dabei ist, daß wir nicht gewohnt
sind, mit Nibbles ( halben Bytes ) zu rechnen.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

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

AW: RTF - Absatzhintergrund setzen

  Alt 8. Jul 2011, 13:28
Na, das nenne ich mal Engagement Ich werde mich heute Abend aber auch noch einmal eingehender mit der Materie befassen, und sei es nur aus Prinzip.
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
 
#25

AW: RTF - Absatzhintergrund setzen

  Alt 8. Jul 2011, 22:28
Bei mir ist das doch auch "nur" Prinzip. Wenn irgendwas nicht funktioniert, gilt es einerseits zu beweisen, daß es an den Verursachern liegt, aber man zweitens dennoch nicht so doof ist, wie die es gerne hätten. Borland war ja eigentlich nie wirklich kundenfreundlich, was dauernde Inkompatibilitäten und massige Quelltextfehler ihrer Standardunits bewiesen haben. Inwieweit das bei der neuen Firma anders ist, weiß ich nicht. Neue Versionen sind mir zu teuer, ich habe genug ausgegeben. Von Microsoft und typischen Windowsfehlern wollen wir besser gar nicht erst anfangen. Was Farben betrifft, denke ich immer zuerst an die Windows-Vertauschung von rot und blau im Vergleich zu den Standardfarben unter Dos.

Wenn Du bzgl. des hier anliegenden Problems die Logik der Bits und Nibbles in Bezug zur jeweiligen Farbgebung gefunden hast, laß es uns bitte wissen.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

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

AW: RTF - Absatzhintergrund setzen

  Alt 9. Jul 2011, 13:36
So, meine bisherigen Erkenntnisse: man kann wShadingWeight setzen oder es auch bleiben lassen, Auswirkungen hat es zumindest bei mir gar keine. Dasselbe gilt für den Style (Nibble 0 lt. Microsoft). Ich habe meine eigene Geduld einmal strapaziert: Schleife von 0 bis MAXWORD - 1, wShadingStyle auf diesen Wert gesetzt und Absatz formatiert. Die "magische Zahl" ist anscheinend 2048. Herausgekommen ist nun folgender Test-Code:
Delphi-Quellcode:
uses RichEdit;

procedure TFrmRTFTest.Button1Click(Sender: TObject);
type
  // Indizes gem. http://msdn.microsoft.com/en-us/library/bb787942%28VS.85%29.aspx
  TIndexColor = (Black, Blue, Cyan, Green, Magenta, Red, Yellow, White,
    DarkBlue, DarkCyan, DarkGreen, DarkMagenta, DarkRed, DarkYellow, DarkGray,
    LightGray);

  function IdxColorToString(AColor: TIndexColor): string;
  begin
    case AColor of
      Black:
        Result := 'Black';
      Blue:
        Result := 'Blue';
      Cyan:
        Result := 'Cyan';
      Green:
        Result := 'Green';
      Magenta:
        Result := 'Magenta';
      Red:
        Result := 'Red';
      Yellow:
        Result := 'Yellow';
      White:
        Result := 'White';
      DarkBlue:
        Result := 'DarkBlue';
      DarkCyan:
        Result := 'DarkCyan';
      DarkGreen:
        Result := 'DarkGreen';
      DarkMagenta:
        Result := 'DarkMagenta';
      DarkRed:
        Result := 'DarkRed';
      DarkYellow:
        Result := 'DarkYellow';
      DarkGray:
        Result := 'DarkGray';
      LightGray:
        Result := 'LightGray';
    end;
  end;

const
  InitialOffset = $0801; // darunter passiert nichts
  TestFile = 'C:\test\Test.rtf';
var
  i: TIndexColor;
  fmt: TParaFormat2;
  OldStart: integer;
begin
  RichEdit1.Lines.BeginUpdate;
  try
    RichEdit1.Clear;
    ZeroMemory(@fmt, SizeOf(fmt));
    fmt.cbSize := SizeOf(fmt);
    fmt.dwMask := PFM_SHADING;
    // anscheinend völlig egal, aber wir setzen den Wert einfach mal
    fmt.wShadingWeight := 100;
    for i := Low(TIndexColor) to High(TIndexColor) do
      begin
        OldStart := RichEdit1.SelStart;
        RichEdit1.Lines.Add(IdxColorToString(i));
        RichEdit1.SelStart := OldStart;
        RichEdit1.SelLength := RichEdit1.GetTextLen;
        // die "Blockgröße" scheint bei 2048 zu liegen
        fmt.wShadingStyle := InitialOffset + Ord(i) shl 11;
        SendMessage(RichEdit1.Handle, EM_SETPARAFORMAT, 0, lParam(@fmt));
        RichEdit1.SelLength := 0;
        RichEdit1.SelStart := RichEdit1.GetTextLen;
      end;
    RichEdit1.Lines.SaveToFile(TestFile);
    ShowMessage('Fertig');
  finally
    RichEdit1.Lines.EndUpdate;
  end;
end;
Das ergibt dann folgende 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;}
Das sieht für mich schlüssig aus, so dass ich erst einmal dabei bleiben werde. Unklar bleibt für mich allerdings weiterhin, wieso das im MSDN so völlig anders beschrieben ist.
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
 
#27

AW: RTF - Absatzhintergrund setzen

  Alt 9. Jul 2011, 14:29
Oh, das sieht ja wirklich sehr gut aus ! Außer der erkennbaren Systematik begeistert mich dabei besonders die fast immer korrekte Zuweisung der jeweiligen Textfarbe, außer bei DarkMagenta.

Zitat:
Unklar bleibt für mich allerdings weiterhin, wieso das im MSDN so völlig anders beschrieben ist.
Das ist doch typisch für manche Leute, vor allem bei Firmen : Möglichst viel geheim halten und Fehler nur dann zugeben, wenn es gar nicht mehr anders geht. Eventuelle Lösungen konsequent zurückhalten.

Wie ich sah, hat der gute Karpfen bei lima-city dort durch einen kurzen Zwischentext die Doppelpostsperre aufgehoben und Du hast auf die neuen Erkenntnisse hingewiesen. Leider gibt es immer wieder mal Threadersteller, die schreiben nur "Problem gelöst" und alle anderen, die es auch interessiert hätte, dürfen weiter rätseln ...

Übrigens : Eigene Beiträge konnte man bei lima-city früher ca. innerhalb einer Woche nochmal editieren. Ob es jetzt - seit man mich rausgeschmissen hat - anders ist, weiß ich nicht.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

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

AW: RTF - Absatzhintergrund setzen

  Alt 9. Jul 2011, 14:36
Die Schriftfarbe setzt man ja damit nicht, anscheinend wird die automatisch ermittelt (was ja nicht immer funktionieren muss *g*). Sonst müsste man ja explizit die SelAttributes setzen, was sicherlich auch möglich ist, aber das hab ich jetzt noch nicht ausprobiert. Ich setz mich jetzt noch schnell hin und baue den Testcode in allgemeingültige Form um, man will es ja schließlich wiederverwertbar haben, gell?

[edit] Ich habe jetzt eine Unit draus gemacht, werde die aber erst nächste Woche veröffentlichen, da sie noch etwas blutleer wirkt. Da bringe ich lieber noch Code mit, den ich momentan in der Firma habe, damit sich das auch lohnt. [/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 ( 9. Jul 2011 um 15:26 Uhr)
  Mit Zitat antworten Zitat
delnu
(Gast)

n/a Beiträge
 
#29

AW: RTF - Absatzhintergrund setzen

  Alt 9. Jul 2011, 16:07
Na, das nenne ich doch mal eine wirklich soziale Einstellung !

Was die Textfarbe betrifft : Anhand des Links habe ich mir erstmals die Microsoft-Angaben angesehen. Dort heißt es
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. To use this member, set the PFM_SHADING flag in the dwMask member. This member is included only for compatibility with Word; the rich edit control stores the value but does not use it to display the text.
und etwas später
Zitat:
The foreground and background color indexes can be one of the following values.
usw.

Aufgrund dessen war ich eigentlich der Ansicht, daß mit den Bits 4 bis 7 ( Vordergrundfarbe ) die Textfarbe gemeint wäre. Bei den Shift-Methoden ( shl ) steige ich immer nicht so ganz durch. Ich arbeite lieber mit Tabellen für die Bitwerte, bei denen ich ganz normal die jeweiligen Bits addiere und die Ergebnisse besser kontrollieren kann. Auf der Basis werde ich mich mal die nächsten Tage an die Microsoft-Angaben wagen. Auch diese geheimnisvollen Möglichkeiten des eigentlichen "shading style" interessieren mich : Dark horizontal, Dark vertical, Dark down diagonal, Dark up diagonal, Dark grid, Dark trellis und das alles noch mal in hell ...

Das Wort "trellis" ( Rankgitter, Gitterwerk ) kannte ich vorher gar nicht. Was dabei der Unterschied zu einem Grid sein soll ? Naja, wahrscheinlich funktioniert das ohnehin nicht, weil man die Hintergrundinformationen nicht hat. Dabei ist RTF so interessant und dennoch all die Jahre ein Buch mit sieben Siegeln geblieben.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

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

AW: RTF - Absatzhintergrund setzen

  Alt 9. Jul 2011, 16:26
Was mich gerade etwas stutzig macht: der PARAFORMAT2-Record enthält in Delphi folgendes Feld
Zitat:
rgxTabs: array [0..MAX_TAB_STOPS - 1] of Longint;
Laut Winzigweich müsste es aber wohl
Code:
LONG rgxTabs;
->
Delphi-Quellcode:
rgxTabs: LongInt; //das sind immerhin 31 LongInts weniger
//Dummy-Zeile für den Highlighter
heißen. Bedeutet das nun, dass die Struktur falsch übersetzt wurde und man daher einfach an die falsche Stelle schreibt? Nur, dann sollten doch theoretisch die Numbering-Optionen auch nicht funktionieren, was sie aber tun. Das wird immer komischer

[edit] Nimmt man meinen Testcode von vorhin und setzt wShadingWeight auf 0 (der einzige Wert, den ich vorher nicht versucht hatte), dann wird der Absatz schraffiert. Da scheint also wirklich mit der Struktur etwas nicht zu stimmen. [/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 ( 9. Jul 2011 um 16:31 Uhr)
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 18:38 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