2016-12-07 3 views
0

J'ai créé un RichTextBox étendu avec un meilleur support d'affichage d'image. En résumé: j'analyse les espaces réservés aux images à partir de l'entrée RTF, les remplace par un paragraphe vide avec un espacement approprié (hauteur de l'image) et dessine les images dans l'événement paint au-dessus du texte (à l'intérieur des espaces).RichTextBox espace numéro

Le problème est maintenant que l'espacement semble être faux. J'ai calculé les twips avec la formule suivante:

size.Width = (int)((1440 * size.Width)/graphics.DpiX); 
size.Height = (int)((1440 * size.Height)/graphics.DpiY); 

graphics est de mon RichTextBox et size est la taille de l'image. Comme la valeur DPI est 96, il est fondamentalement twips = 15 * pixels.

J'ai essayé les mots de contrôle RTF \sbN et \saN avec ma twips-valeur calculée (je l'ai contrôlé avec le débogueur, la valeur est comme prévu). J'ai également utilisé interop avec PFM_SPACEBEFORE et PFM_SPACEAFTER.

Les deux méthodes donnent le même résultat. Le problème est que l'espace réel à l'intérieur de la RichTextBox est trop grand. Si je multiplie la valeur de twips calculée par 0,75, ça va. Mais je ne comprends vraiment pas pourquoi cela arrive.

Ma première pensée était le facteur 72/96 (PPI/DPI) qui est de 0,75. Mais cela n'a aucun sens pour moi.

L'espace supplémentaire augmente proportionnellement à la hauteur de l'image. Ainsi, l'espace est à peine notable pour de petites icônes (par exemple une hauteur de 24 pixels). Mais pour des images plus grandes (par exemple 320 pixels de hauteur), l'espace supplémentaire est énorme.

Quelques idées? Est-ce un bug dans le contrôle RichTextBox?

Pour clarifier: J'ai utilisé System.Windows.Forms.RichTextBox comme classe de base.

Répondre

0

Ok, j'ai trouvé l'erreur moi-même. J'ai dû utiliser les valeurs DPI de l'image au lieu des valeurs DPI du contrôle. Les valeurs DPI de l'image étaient de 120, le facteur était donc de 0,8 (pas de 0,75). Maintenant ça va. Je laisse la question ici au cas où quelqu'un aurait le même problème.