none
Afficher un texte variable verticalement de haut vert le ou du bas vert le haut RRS feed

  • Question

  • Bonjour à toutes et à tous.

    Je souhaite afficher du texte dans un un form. Je souhaite l'afficher verticalement du bas vers le haut et de haut vers le bas

    Une image vaut mieux qu'un grand discours: voilà ce que je veux faire j'arrive à tout faire sauf l'écriture des deux textes encadrés en rouge.

    Est ce que quelqu'un aurait une idée comment écrire comme cela dans un contrôle que je pourrait mettre sur un form.

    Je n'a rien trouvé jusqu'à présent....

    Merci d'avance


    elbege21


    • Modifié elbege21 vendredi 20 septembre 2019 16:30
    vendredi 20 septembre 2019 16:28

Réponses

  • Par exemple avec Graphics.RotateTransform

    Dans une PictureBox :

        Private Sub PictureBox1_Paint(sender As Object, e As PaintEventArgs) Handles PictureBox1.Paint
            Dim sText As String = "This is a test"
            Dim nSize As SizeF = e.Graphics.MeasureString(sText, Font)
            e.Graphics.TranslateTransform((PictureBox1.Size.Width + nSize.Height) / 2, (PictureBox1.Size.Height - nSize.Width) / 2)
            e.Graphics.RotateTransform(90)
            e.Graphics.DrawString(sText, Font, Brushes.Red, New Point(0, 0))
        End Sub

    Ou aussi avec StringFormat 

    • Marqué comme réponse elbege21 lundi 23 septembre 2019 09:31
    samedi 21 septembre 2019 08:36

Toutes les réponses

  • Par exemple avec Graphics.RotateTransform

    Dans une PictureBox :

        Private Sub PictureBox1_Paint(sender As Object, e As PaintEventArgs) Handles PictureBox1.Paint
            Dim sText As String = "This is a test"
            Dim nSize As SizeF = e.Graphics.MeasureString(sText, Font)
            e.Graphics.TranslateTransform((PictureBox1.Size.Width + nSize.Height) / 2, (PictureBox1.Size.Height - nSize.Width) / 2)
            e.Graphics.RotateTransform(90)
            e.Graphics.DrawString(sText, Font, Brushes.Red, New Point(0, 0))
        End Sub

    Ou aussi avec StringFormat 

    • Marqué comme réponse elbege21 lundi 23 septembre 2019 09:31
    samedi 21 septembre 2019 08:36
  • Merci ca fonctionne comme je le souhaitais... je n'avais pas pensé de passer par un PictureBox.

    Merci


    elbege21

    lundi 23 septembre 2019 09:31
  • Bonjour,

    vous pouvez faire aussi avec un label .

    le code :

    Public Class Form1
    
        Private WithEvents Label1 As New rotation(90, New Point(20, 50), "Rotate Label 1", Color.Red, Color.White, New Font("Arial", 18, FontStyle.Bold))
        Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
            Label1.BorderStyle = BorderStyle.FixedSingle
        End Sub
    
        Private Sub Form1_Paint(sender As System.Object, e As System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint
            Label1.Draw(e.Graphics)
        End Sub
    End Class

    if faudra créer une classe :

    Imports System.Drawing.Drawing2D
    
    Class rotation
    
        Inherits Label
    
        Public rect As Rectangle
        Public rotation As Single
    
        Public Sub New()
            SetSize()
        End Sub
    
        Public Sub New(_rotation As Single, _Location As Point, _Text As String, _BackColor As Color, _ForeColor As Color, _Font As Font)
            rotation = _rotation
            Location = _Location
            Text = _Text
            BackColor = _BackColor
            ForeColor = _ForeColor
            Font = _Font
    
            SetSize()
        End Sub
        Private Sub SetSize()
            AutoSize = False
            Dim w As Size = TextRenderer.MeasureText(Text, Font, New Size(Integer.MaxValue, Integer.MaxValue))
    
            rect = New Rectangle(0, 0, w.Width, w.Height)
            Size = New Size(CInt((w.Height * Math.Sin(rotation / 57.4)) + w.Width - (w.Width * (1 - Math.Cos(rotation / 57.3)))), CInt((w.Height * Math.Cos(rotation / 57.3)) + (w.Width * Math.Sin(rotation / 57.3))))
        End Sub
        Public Sub Draw(g As Graphics)
            Dim gContainer As Drawing2D.GraphicsContainer
            gContainer = g.BeginContainer()
    
            g.SmoothingMode = SmoothingMode.AntiAlias
            g.TranslateTransform(Location.X, Location.Y)
    
            If BorderStyle = BorderStyle.FixedSingle Then
                g.DrawRectangle(New Pen(Color.Black, 1), Me.ClientRectangle)
            End If
    
            Using mx As New Matrix
                mx.Translate(Location.X, Location.Y)
                mx.RotateAt(rotation, New PointF(CSng(rect.Height * Math.Sin(rotation / 57.3)), 0))
                g.Transform = mx
            End Using
    
            g.TranslateTransform(CSng(rect.Height * Math.Sin(rotation / 57.3)), 0)
            g.FillRectangle(New SolidBrush(Me.BackColor), rect)
            g.DrawString(Me.Text, Me.Font, New SolidBrush(Me.ForeColor), 0, 0)
    
            g.EndContainer(gContainer)
        End Sub
    
    End Class

    j'ai recuperer tous c'est information dans ce lien : https://social.msdn.microsoft.com/Forums/vstudio/en-US/f2ec0dd0-5764-43e3-bddc-0b69ad2a5f44/how-to-make-the-label-rotated-in-vbnet?forum=vbgeneral

    cordialement,

    mercredi 25 septembre 2019 07:45