Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

COMMENT ÉCRIRE DU TEXTE VERTICAL ?


Information sur la source

Catégorie :Graphique Source .NET ( DotNet ) Classé sous : graphique, ecrire, gdi, vertical, text Niveau : Débutant Date de création : 17/10/2005 Vu : 17 734

Note :
8 / 10 - par 2 personnes
8,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (4)
Ajouter un commentaire et/ou une note

Description

Il est souvent demandé, lorsque des histogrammes doivent être affichés, d’écrire du texte verticalement. Or, rien n’est prévu dan le framework pour faire cela ! La seule solution est de créer une image du texte à afficher, puis de la faire pivoter…
Pour écrire du texte verticalement, la seule solution est de transformer ce texte en image et de faire pivoter cette image de 90°, comme ceci :
 

Source

  • string message = "Mon texte à afficher";
  • // Création de l'image
  • Bitmap b = new Bitmap(1, 1);
  • Font f = new Font("Arial", 8);
  • Graphics graphics = Graphics.FromImage(b);
  • int width = (int) graphics.MeasureString(message,f).Width;
  • int height = (int) graphics.MeasureString(message,f).Height;
  • b = new Bitmap(b, new Size(height, width));
  • graphics = Graphics.FromImage(b);
  • graphics.Clear(Color.White);
  • graphics.SmoothingMode = SmoothingMode.HighQuality;
  • graphics.SmoothingMode = SmoothingMode.AntiAlias;
  • // Création du texte de l'image
  • StringFormat sf = StringFormat.GenericTypographic;
  • sf.FormatFlags = StringFormatFlags.DirectionVertical; // Position verticale
  • graphics.DrawString(message, f, new SolidBrush(Color.FromArgb(62, 62, 62)), 0, 0, sf);
  • graphics.Flush();
  • // Enregistrement de l'image
  • string directory = System.Configuration.ConfigurationSettings.AppSettings["installPath"];
  • message = message.Replace(" ", "");
  • directory += @"\Images\Generated\" + message + ".gif";
  • b.Save(directory, System.Drawing.Imaging.ImageFormat.Gif);
string message = "Mon texte à afficher";

// Création de l'image
Bitmap b = new Bitmap(1, 1);
Font f = new Font("Arial", 8);
Graphics graphics = Graphics.FromImage(b);			
int width = (int) graphics.MeasureString(message,f).Width;
int height = (int) graphics.MeasureString(message,f).Height;
b = new Bitmap(b, new Size(height, width));
graphics = Graphics.FromImage(b);
graphics.Clear(Color.White);
graphics.SmoothingMode = SmoothingMode.HighQuality;
graphics.SmoothingMode = SmoothingMode.AntiAlias;
			
// Création du texte de l'image
StringFormat sf = StringFormat.GenericTypographic;
sf.FormatFlags = StringFormatFlags.DirectionVertical;	// Position verticale
graphics.DrawString(message, f, new SolidBrush(Color.FromArgb(62, 62, 62)), 0, 0, sf);
graphics.Flush();

// Enregistrement de l'image
string directory = System.Configuration.ConfigurationSettings.AppSettings["installPath"];
message = message.Replace(" ", "");
directory += @"\Images\Generated\" + message + ".gif";
b.Save(directory, System.Drawing.Imaging.ImageFormat.Gif);

Conclusion

L’image est créée en fonction du texte à écrire. Cette image doit ensuite être enregistrée sur le disque dur du serveur, ce qui nécessite de donner les bons droits d’accès à ce répertoire.
 

Commentaires et avis

signaler à un administrateur
Commentaire de badrbadr le 18/10/2005 17:41:21

interresante ta méthode, mais je pense bien que le framework .net a prevu qqch pour ces situations-la, je m'explique:

voici une fonction que j'avais trouver sur msdn qui ecrit du texte vertical:

private void DrawVerticalText()
{
   System.Drawing.Graphics formGraphics = this.CreateGraphics();
   string drawString = "Sample Text";
   System.Drawing.Font drawFont = new System.Drawing.Font("Arial", 16);
   System.Drawing.SolidBrush drawBrush = new System.Drawing.SolidBrush(System.Drawing.Color.Black);
   float x = 150.0f;
   float y = 50.0f;
   System.Drawing.StringFormat drawFormat = new System.Drawing.StringFormat(StringFormatFlags.DirectionVertical);
   formGraphics.DrawString(drawString, drawFont, drawBrush, x, y, drawFormat);
   drawFont.Dispose();
   drawBrush.Dispose();
   formGraphics.Dispose();
}

tout se joue dans le format du string
System.Drawing.StringFormat drawFormat = new System.Drawing.StringFormat(StringFormatFlags.DirectionVertical);
avec le flag StringFormatFlags.DirectionVertical

en tout cas, ton code nous apprend a faire d autre chose comme par exemple comment dessiner ou ecrire dans une image.

bonne contuniation

signaler à un administrateur
Commentaire de bucherb le 04/11/2005 11:05:21

Tu peux aussi utiliser tourner ton objet Graphics par la propriété "Transform" en lui passant un objet Matrix (qui contient tout ce qu'il faut pour faire des transformations), puis faire ton DrawString normalement et ensuite rétablit ton Graphics en faisant ResetTransform... Ca a l'avantage de pouvoir écrire du texte selon n'importe quel angle.

signaler à un administrateur
Commentaire de ahaccoun le 12/09/2008 20:14:17

j'ai fait comme ceci:

private static void drawVerticalString(string text, Point p, Font font, Form myForm)
        {
            System.Drawing.Drawing2D.GraphicsPath gp = new System.Drawing.Drawing2D.GraphicsPath();
            gp.AddString(text, font.FontFamily, (int)font.Style, font.Size+4, p, StringFormat.GenericTypographic);
            System.Drawing.Drawing2D.Matrix m = new System.Drawing.Drawing2D.Matrix();
            m.RotateAt(270, p, System.Drawing.Drawing2D.MatrixOrder.Append);
            gp.Transform(m);
            myForm.CreateGraphics().FillPath(new SolidBrush(Color.Black), gp);
        }

signaler à un administrateur
Commentaire de gillardg le 14/10/2008 01:39:26

salut,
3 méthode pour le prix d'une seule ,
merci

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

Texte editeur [ par rintchu ] Salut, je voudrais creer un text editeur mélangé avec un treeview, un peu ce que l'on a quand on programme avec Microsoft .Net 2003 ( on peut ecrire e Ecrire dans un panel en GDI [ par iow4 ] Bonjour, J'utilise le framework 2 avec VC#.J'ai inseré sur une winform un panel et j'aimerais tracer un rectangle par dessus Seulement lorsque le rect gdi+ et crystal report [ par matmat86 ] Bonjour,j'ai créé un graphique a l'aide de gdi+ et il m'a été demandé de permettre l'impression de ce graphique.J'ai entendu parler de Crystal Report Ecrire en binaire à un offset précis dans un .exe ou .dll [ par clubberzZ ] Bonjour à tous,J'aimerais transfomer ce code vb.net en c# mais je ne trouve aucune alternative (désolé je suis débutant).Merci d'avance pour vos répon Localisation [ par aquanovax ] Bonjour, est-il possible dans le cadre d'une application multilangue de faire correspondre un champ quelconque (Control.text, MenuItem.text, ...) avec datagridview column headers text "verticaux" [ par cudenetf ] bonjour,j'aimerais savoir s'il est possible de creer des colonnes ds un datagridview dont les titres sont ecrits verticalement (ou bien en travers afi Transformer une appli console en appli graphique. [ par madshell ] Bonjour à tous,Pour commencer, je vous préviens que je suis un débutant, un vrai de vrai.J'ai créer un bot msn sur un modèle qu'un ami avait fait il y [C# + GDI] Panel transparent: + Pb de rafraichissement [ par wolveryn ] Salut, J'ai crée un panel transparent qui marche plutôt bien en ce qui concerne la transparence; mais le problème est quand je fais bouger l'ascenseur Construire un fichier CSV & problème de guillemets [ par rbidocho ] Bonjour,Dans le programme que je refais en C# (avant en VB.Net), je souhaite écrire dans un fichier csv (avec réellement des virgules comme séparateur Aide concernant DataViewSetting.RowFilter [ par avillenave ] Bonjour à tous,Désolé je ne savais pas mettre dans quel thème ma questionJe suis Newbie en C#Voici une aprtie du code en simple filtre (un seul champ


Nos sponsors

Sondage...

CalendriCode

Décembre 2008
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,172 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.