Nun, das mit 31 weniger LongInts verstehe ich so nicht.
Allerdings habe ich mir den Quellcode bei Delphi daraufhin jetzt nicht angesehen. Während auf dem Rechner, mit dem ich im Internet bin, Delphi 7 ( das ich noch nicht lange habe ) vorerst nur in einem virtuellen PC eingerichtet ist, weil auf dem Boot-System noch das mehr oder weniger doch unbrauchbare Lazarus rumgeistert, hatte ich vorhin noch auf einem anderen Rechner mit Delphi 5 etwas weiter getestet.
Obwohl : Es stimmt schon, daß man Winzigweich ( schön, daß diese auch von mir benutzte wörtliche Übersetzung auch bei anderen üblich ist ) nicht sonderlich trauen kann. Das mit der Schraffur habe ich NICHT feststellen können. Es wäre auch
paradox, denn wenn man keinen Wert angibt, wird doch automatisch 0 gesetzt. Ansonsten : Ich bin sicher, daß man statt "fmt.dwMask := PFM_SHADING;" auch mehrere Werte kombinieren kann, also PFM_SHADING nicht unbedingt allein stehen muß.
Deine übrigen Berechnungen und Überlegungen scheinen soweit zu stimmen. Ich hatte gerade auch mal noch ein paar Tests mit Schleifen gemacht und erhielt dabei auch gelegentlich wunderherrliche Hintergrundfarben - nur ohne jede erkennbare Systematik. Immerhin stimmt Deine Angabe von 2048 mit den Microsoftangaben bzgl. Bits 8 bis 11 überein. Ich multipliziere im Test darum auch gleich mit 2048, weil mir das durchschaubarer ist. Aber bei $0800 statt bei $0801 zu beginnen, ist logischer.
// fmt.wShadingStyle := InitialOffset + Ord(i) shl 11;
fmt.wShadingStyle := InitialOffset + (Ord(i) * 2048);
Ansonsten halte ich für sinnvoll, statt der Microsoft-Farbbezeichnungen die von Delphi zu benutzen, weil dadurch das Handling erleichtert wird. Ich habe im beiliegenden Test mal ein wenig rumgebastelt, u.a. auch andere Schriftfarben benutzt und optional kann die Hintergrundfarbe ( nach Wolfgang Beintvogl ) zur Kontrolle ausgegeben werden. Das geht dann zwar nicht über die ganze Zeile, sondern nur den wirklichen Schriftteil, kann aber Orientierungshilfe sein. Ich habe das ggf. auskommentiert, weil es sonst auch in die RTF-Datei geschrieben wird.
Const
farben : Array[0..15] of TColor = (clBlack, clBlue, clAqua, clLime,
clFuchsia, clRed, clYellow, clWhite,
clNavy, clTeal, clGreen, clPurple,
clMaroon, clOlive, clGray, clSilver);
Außerdem hat mich die angehängte, hellgraue Leerzeile gestört. Das hat mit der automatischen Selektion zu tun.
Ich habe das jetzt so geändert, daß es stimmt.
RichEdit1.SelLength := RichEdit1.GetTextLen - OldStart-1; // - OldStart !
Sieh es Dir an und bau ein, was Dir sinnvoll scheint. Es wäre doch schön, wenn man hier mal gemeinsam was zuwege bringt, was bisher fehlte. Falls ich wüßte, wie man Wolfgang Beintvogl irgendwie erreichen kann, glaube ich, daß er sich auch beteiligen würde. Immerhin hatte er ja schon vor Jahren so einiges rausgefunden.
Und die "Toolbox" existiert in der alten Form ja auch nicht mehr.
Falls bei meiner Beschreibung hier irgendwas nicht schlüssig zum Quelltext ist : Ich habe beides nochmal etwas überarbeitet, erst den Quelltext, dann diese Beschreibung. Ich hoffe, die alte zip-Datei wurde korrekt gelöscht und durch die neue ersetzt. Wenn es statt "- OldStart-1" noch "- Oldstart" heißt, ist es die falsche.