2010-05-03 7 views
3

Y at-il un moyen de dessiner un texte au format mixte dans .Net 2.0? Je cherche quelque chose de similaire àComment dessiner un texte au format mixte avec .Net 2.0

System.Drawing.Graphics.DrawString() 

Mon problème avec cette méthode est qu'elle permet à un seul style de format pour le texte. Mais j'ai besoin de dessiner un texte qui a différents styles de format (par exemple, une partie du texte doit être soulignée, une autre partie en gras et ainsi de suite).

Merci beaucoup!
Oliver

+0

Ce que vous cherchez est une fonctionnalité qui a été ajoutée à .NET 3.5 (peut-être .NET 3.0?) - Je ne connais aucun moyen natif de faire cela dans .NET 2.0 - Il pourrait y avoir un add-on tiers qui résout ce problème, cependant. – Pretzel

Répondre

1

Je tire une bonne réponse du livre WPF in Action - Vous semblez avoir 2 options:

  • Créer un contrôle personnalisé et définir vos propres balises pour spécifier les polices . En dehors de cela, il faut aussi compter sur les méthodes notoirement inexactes pour mesurer la largeur du texte (de sorte que vous puissiez déterminer où mettre le mot suivant).

  • Utilisez le contrôle RTF. C'est extrêmement lourd, et vous finirez par passer beaucoup de temps à le faire ressembler à du texte au lieu d'un contrôle d'édition, et vous devrez travailler avec RTF pour obtenir le texte comme vous le souhaitez.

donc je suppose que la réponse est le contrôle RTF (alias RichTextBox.) Si vous êtes coincé avec .NET 2.0 - WinForms. Eh bien, à moins que vous vouliez écrire votre propre contrôle ... :-)

Le livre mentionne également la prise de diverses commandes d'étiquette et/ou de zone de texte et leur alignement manuel (ou programmé) et leur réglage pour avoir différentes valeurs de police, etc. Mais je suppose que vous voulez éviter cela, non?

EDIT

Je quitte ma réponse ci-dessus en place. Voici ma nouvelle réponse à vous:

Regardez dans GDI + - Voici un lien vers un tutoriel en C# angle qui devrait vous présenter GDI +: http://www.c-sharpcorner.com/uploadfile/mahesh/gdi_plus12092005070041am/gdi_plus.aspx

Et voici un lien qui devrait vous montrer comment utiliser GDI + avec un bitmap/Image: http://ondotnet.com/pub/a/dotnet/2003/05/05/gdiplus.html

Bonne chance!

Aussi, vous voudrez peut-être prendre un livre sur ce sujet car GDI + est un sujet assez lourd. J'ai fait la plupart de mon apprentissage sur GDI + via le livre Pro .NET 2.0 Windows Forms and Custom Controls in C# (C'est un bon livre dans mon expérience.) Bien que vous ne soyez pas vraiment intéressé par la conception de contrôles personnalisés pour WinForms, vous pouvez chercher un livre orienté plus directement vers GDI + .

+0

Bonjour, mon problème avec RichTextBox: Je ne veux pas afficher le texte dans une application, mais je veux le dessiner sur un objet System.Drawing.Bitmap, puis l'enregistrer en tant que fichier PNG. J'ai pensé à utiliser RichTextBox comme élément d'entrée mais je ne sais pas comment dessiner le texte sur l'objet Bitmap. – Baldewin

+0

@Baldewin: voir ma réponse mise à jour ci-dessus. – Pretzel

0

Si vous voulez utiliser le HTML pour baliser votre texte, essayez ceci:

Private Sub DrawHTMLString(sHTML As String, rct As RectangleF, dpiX As Single, dpiY As Single, g As Graphics) 
    DrawHTMLString(sHTML, rct.X, rct.Y, rct.Width, rct.Height, dpiX, dpiY, g) 
End Sub 

Private Sub DrawHTMLString(sHTML As String, x As Single, y As Single, width As Single, height As Single, dpiX As Single, dpiY As Single, g As Graphics) 
    g.InterpolationMode = InterpolationMode.NearestNeighbor 
    g.SmoothingMode = SmoothingMode.AntiAlias 
    g.CompositingQuality = CompositingQuality.AssumeLinear 
    g.TextRenderingHint = TextRenderingHint.AntiAlias 

    g.DrawImage(DrawHTMLString(sHTML, width, height, dpiX, dpiY), x, y) 
End Sub 

Private Function DrawHTMLString(sHTML As String, width As Single, height As Single, dpiX As Single, dpiY As Single) As Bitmap 
    Dim bmp As Bitmap = Nothing 
    Dim doc As HtmlDocument = Nothing 

    Using wb As New WebBrowser() 
     wb.ScrollBarsEnabled = False 
     wb.ScriptErrorsSuppressed = True 
     wb.Navigate("about:blank") 

     wb.Width = width : wb.Height = height 

     doc = wb.Document.OpenNew(True) 
     doc.Write(sHTML) 

     bmp = New Bitmap(wb.Width, wb.Height, PixelFormat.Format32bppArgb) 
     bmp.SetResolution(dpiX, dpiY) 

     wb.DrawToBitmap(bmp, New Rectangle(0, 0, wb.Width, wb.Height)) 
    End Using 

    Return bmp 
End Function 

(Désolé, il est en VB.NET) Jouez avec comme vous voulez.