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
Benutzerbild von p80286
p80286

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

AW: RTF - Absatzhintergrund setzen

  Alt 8. Jul 2011, 09:40
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?
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.660 Beiträge
 
Delphi 12 Athens
 
#2

AW: RTF - Absatzhintergrund setzen

  Alt 8. Jul 2011, 09: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
 
#3

AW: RTF - Absatzhintergrund setzen

  Alt 8. Jul 2011, 11: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
 
#4

AW: RTF - Absatzhintergrund setzen

  Alt 8. Jul 2011, 12: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.660 Beiträge
 
Delphi 12 Athens
 
#5

AW: RTF - Absatzhintergrund setzen

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

AW: RTF - Absatzhintergrund setzen

  Alt 8. Jul 2011, 21: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.660 Beiträge
 
Delphi 12 Athens
 
#7

AW: RTF - Absatzhintergrund setzen

  Alt 9. Jul 2011, 12: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
Antwort Antwort


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 00:36 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz