2016-12-07 2 views
0

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.

Antwort

0

Ok Ich habe den Fehler selbst gefunden. Ich musste die DPI-Werte des Bildes anstelle der DPI-Werte des Steuerelements verwenden. Die Bild-DPI-Werte betrugen 120, so dass der Faktor 0,8 (nicht 0,75) betrug. Jetzt passt es. Ich lasse die Frage hier für den Fall, dass jemand das gleiche Problem hat.