Ich erstellte eine erweiterte RichTextBox mit besserer Bildanzeigeunterstützung. Kurz: Ich parse textbasierte Bildplatzhalter aus der RTF-Eingabe, ersetze sie durch einen leeren Absatz mit einem passenden Abstand (Bildhöhe) und zeichne die Bilder im Paint-Event über dem Text (innerhalb der Leerzeichen).RichTextBox Platzproblem
Das Problem ist jetzt, dass der Abstand scheint falsch zu sein. Ich die twips mit der folgenden Formel berechnet:
size.Width = (int)((1440 * size.Width)/graphics.DpiX);
size.Height = (int)((1440 * size.Height)/graphics.DpiY);
Wo graphics
von meinem RichTextBox
und size
ist die Bildgröße. Da der DPI-Wert 96 ist, ist es im Grunde twips = 15 * pixels
.
ich die RTF-Steuerwörter \sbN
und \saN
mit meinem berechneten twips-Wert versucht (ich es mit dem Debugger kontrolliert, wird der Wert als erwartet). Ich benutzte auch Interop mit PFM_SPACEBEFORE
und PFM_SPACEAFTER
.
Beide Wege geben das gleiche Ergebnis. Das Problem ist, dass der reale Raum innerhalb der RichTextBox zu groß ist. Wenn ich den berechneten Twips-Wert mit 0,75 multipliziere, passt es. Aber ich verstehe wirklich nicht, warum das passiert.
Mein erster Gedanke war der Faktor 72/96 (PPI/DPI), der 0,75 ist. Aber das macht keinen Sinn für mich.
Der zusätzliche Platz nimmt proportional zur Bildhöhe zu. Daher ist der Platz für kleine Symbole (z. B. 24 Pixel Höhe) kaum bemerkenswert. Aber für größere Bilder (z. B. 320 Pixel Höhe) ist der zusätzliche Platz riesig.
Einige Ideen? Ist das ein Fehler im RichTextBox-Steuerelement?
Zur Verdeutlichung: Ich habe System.Windows.Forms.RichTextBox
als Basisklasse verwendet.