IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

Probleme de police assez étrange


Sujet :

VB.NET

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    115
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 115
    Points : 110
    Points
    110
    Par défaut Probleme de police assez étrange
    Bonjour à tous ^^

    J'ai un petit probleme, pas bien grave, mais j'aimerais bien comprendre pourquoi, c'est assez impressionant, les caracteres d'une chaine d'un label sont de plus en plus rapprochés.
    Voici les parametres du label :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    S_WAIT.AutoSize = True
    S_WAIT.Location = New System.Drawing.Point(94, 190)
    S_WAIT.Name = "S_WAIT"
    S_WAIT.Text = "Veuillez patienter pendant la vérification de vos informations... Veuillez"
    S_WAIT.Font = New Font("Microsoft Sans Sherif", 8.25!, FontStyle.Bold, GraphicsUnit.Point, CType(0, Byte))
    Voici un petit screen de ce que ça donne, j'ai ajouté le mot Veuillez à la fin, on voit bien que c'est plus sérré...



    Bizarre non ?

  2. #2
    Membre éprouvé Avatar de neptune
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    835
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2003
    Messages : 835
    Points : 958
    Points
    958
    Par défaut
    Très bizzare! Jamais vu çà... Version du framework? Tu utilises un Label du framework?

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    115
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 115
    Points : 110
    Points
    110
    Par défaut
    Framework 3.5 mais bon, le label (du framework oui) est du 2.0.

  4. #4
    Expert confirmé
    Avatar de Aspic
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    3 905
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2005
    Messages : 3 905
    Points : 4 388
    Points
    4 388
    Par défaut
    Citation Envoyé par neptune Voir le message
    Très bizzare! Jamais vu çà... Version du framework? Tu utilises un Label du framework?
    +1 c'est ouf... c'est le FW 3.0 qui plante !

  5. #5
    Membre chevronné Avatar de Danyel
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2005
    Messages
    1 685
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 685
    Points : 1 959
    Points
    1 959
    Par défaut
    J'ai aussi ce meme genre de truc assez bizarre de rapprochement de caracteres. (frw2)
    Moi je m'en suis apercu sur une ligne de points (pour faciliter la vue dans un tableau)

    Voici un exemple simple que vous pouvez aussi essayer :
    (vous avez juste besoin d'un simple label assez long)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim ChainePoints As String = "..................................................................................................."
    label.text = ChainePoints
    Tout est ok pour le debut, mais toutes les fins de points sont etranges voire plus.
    C'est pareil en changeant de polices, ou meme en utilisant des polices fixes.

    Je suis aussi preneur pour une solution car c'est vraiment pas beau.

  6. #6
    Membre chevronné
    Avatar de olsimare
    Inscrit en
    Décembre 2006
    Messages
    1 179
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 179
    Points : 1 776
    Points
    1 776
    Par défaut
    Bonjour.

    C'est rassurant, au départ je croyais que c'était mes yeux !

    J'ai fait le test avec un Arial 8.25 bold et le probléme ne se pose pas.

    Je penche quand même pour un probléme de prise en charge de police par le framework.

    A noter, que j'ai une class label personnalisée et que dedans je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
            e.Graphics.DrawString(Me.Text, Me.Font, New SolidBrush(Me.ForeColor), Me.ClientRectangle, foFormat)
    Eh ben en sans serif 8.25 bold, c'est pareil !

    Donc le drawstring doit pas être au top pour cette police !

    Incompréhensible !

    Remarque : j'avais pas remarqué de problémes d'affichage avant Vista (donc framework 3.0).


    Cdt.

  7. #7
    Membre chevronné Avatar de Danyel
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2005
    Messages
    1 685
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 685
    Points : 1 959
    Points
    1 959
    Par défaut
    Moi j'ai essaye tous formats, styles ou fontes et meme resultat (catastrophique)
    Voici un petit screen shot en pj.
    Pour information, la taille des labels est identique pour tous !!!
    Images attachées Images attachées  

  8. #8
    Membre chevronné
    Avatar de olsimare
    Inscrit en
    Décembre 2006
    Messages
    1 179
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 179
    Points : 1 776
    Points
    1 776
    Par défaut
    Bonjour.

    C'est clairement un bug du drawstring.

    J'ai fait le test sur un 2 labels perso, l'un avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
            e.Graphics.DrawString(Me.Text, Me.Font, New SolidBrush(Me.ForeColor), Me.ClientRectangle, foFormat)
    Et l'autre avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
            TextRenderer.DrawText(e.Graphics, Me.Text, _
            Me.Font, New Point(1, 1), Me.ForeColor)
    Résultat :
    Pièce jointe 19384
    Nota : renderer en haut.

    Le textrenderer marche impeccable (même avec le sans serif 8.25 !).

    Je suppute donc que le dessin du text du label se fait via un drawstring et je vous conseille vivement de vous en faire un perso qui utilise le textrenderer !

    Cdt.

  9. #9
    Membre chevronné Avatar de Danyel
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2005
    Messages
    1 685
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 685
    Points : 1 959
    Points
    1 959
    Par défaut
    L'info que tu viens de donner est importante.
    Ca vient de me rappeler un bug tout aussi etrange sur le comportement de certains labels ou avec un bouton qui faisait un refresh de la form, certains labels (avec le meme text et sans aucun changement) changeaient de longueur ou de format ... et ceci aleatoirement.
    Je suis sur que c'est la meme origine.

    Alors il me vient une question, comment faire pour que tous les labels soient définis par TextRenderer automatiquement pour tout le/les projets ?

  10. #10
    Membre chevronné
    Avatar de olsimare
    Inscrit en
    Décembre 2006
    Messages
    1 179
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 179
    Points : 1 776
    Points
    1 776
    Par défaut
    Bonjour.

    Réponse --> ne pas utiliser le Label !

    Sérieusement, je n'utilise jamais de class "standard", toujours des class perso héritées des class standard (au cas où j'aurais besoin d'overloader/ridder un truc ! ).

    Donc, il suffit de gérer le paint à la main dans une class label perso et de n'utiliser que cette class.

    PS : Au besoin, je posterai mon label perso dés que j'aurai géré le dessin du texte avec le renderer !!! (J'avais le bug aussi et le renderer oblige à revoir le positionnement du texte)

    Cdt.

  11. #11
    Membre chevronné Avatar de Danyel
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2005
    Messages
    1 685
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 685
    Points : 1 959
    Points
    1 959
    Par défaut
    Mouaip, j'etais sur que tu allais dire ca
    Le probleme, c'est que je me vois mal reprendre tous les labels ...
    PS : Pour ton label perso, yep tu peux y aller sans probleme

  12. #12
    Membre chevronné
    Avatar de olsimare
    Inscrit en
    Décembre 2006
    Messages
    1 179
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 179
    Points : 1 776
    Points
    1 776
    Par défaut
    Re.

    Voilà je l'ai mis au renderer !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
     
    Public Class MonLabelBebete
        Inherits Label
     
        Private Sub PaintParentBackground(ByVal e As PaintEventArgs)
            If Not Me.Parent Is Nothing Then
                Dim rect As Rectangle = New Rectangle(Left, Top, Width, Height)
                e.Graphics.TranslateTransform(-rect.X, -rect.Y)
                Dim pea As PaintEventArgs = New PaintEventArgs(e.Graphics, rect)
                pea.Graphics.SetClip(rect)
                InvokePaintBackground(Parent, pea)
                InvokePaint(Parent, pea)
                e.Graphics.TranslateTransform(rect.X, rect.Y)
            Else
                e.Graphics.FillRectangle(SystemBrushes.Control, ClientRectangle)
            End If
        End Sub
     
        Protected Overrides Sub OnPaintBackground( _
            ByVal pevent As PaintEventArgs)
            PaintParentBackground(pevent)
        End Sub
     
        Protected Overrides Sub OnTextChanged( _
        ByVal e As EventArgs)
     
            MyBase.OnTextChanged(e)
     
            invalidateParent()
     
        End Sub
     
        Private Sub invalidateParent()
            If Not Me.Parent Is Nothing Then
                ' Force le parent a repeindre le rectangle client du label sans en informer
                ' les controls enfants
                Me.Parent.Invalidate(Me.Bounds, True)
            End If
        End Sub
        Protected Overrides Sub OnPaint(ByVal e As PaintEventArgs)
     
            TextRenderer.DrawText(e.Graphics, Me.Text, _
            Me.Font, textPosition, Me.ForeColor)
     
        End Sub
     
        Private Function textPosition() As Point
     
            Dim sTextSize As Size = TextRenderer.MeasureText(Me.Text, Me.Font)
            If sTextSize.Width > Me.Bounds.Width Then
                sTextSize.Width = Me.Bounds.Width
            End If
            If sTextSize.Height > Me.Bounds.Height Then
                sTextSize.Height = Me.Bounds.Height
            End If
            Dim intLeft As Integer = 0
            Dim intTop As Integer = 0
            Dim intRigth As Integer = Me.Bounds.Width - sTextSize.Width
            Dim intBottom As Integer = Me.Bounds.Height - sTextSize.Height
            Dim intXCenter As Integer = CInt((Me.Bounds.Width - sTextSize.Width) / 2)
            Dim intYCenter As Integer = CInt((Me.Bounds.Height - sTextSize.Height) / 2)
     
            Select Case Me.TextAlign
                Case ContentAlignment.BottomCenter
                    Return New Point(intXCenter, intBottom)
                Case ContentAlignment.BottomLeft
                    Return New Point(intLeft, intBottom)
                Case ContentAlignment.BottomRight
                    Return New Point(intRigth, intBottom)
                Case ContentAlignment.MiddleCenter
                    Return New Point(intXCenter, intYCenter)
                Case ContentAlignment.MiddleLeft
                    Return New Point(intLeft, intYCenter)
                Case ContentAlignment.MiddleRight
                    Return New Point(intRigth, intYCenter)
                Case ContentAlignment.TopCenter
                    Return New Point(intXCenter, intTop)
                Case ContentAlignment.TopLeft
                    Return New Point(intLeft, intTop)
                Case ContentAlignment.TopRight
                    Return New Point(intRigth, intTop)
            End Select
     
        End Function
     
    End Class
    En prime, c'est un label vraiment transparent (surcharge du paintbackground qui force le redessin du parent --> pratique pour les parents qui on un background avec gradient de couleur).

    Aprés, tu fais un "remplace" de System.Windows.Forms.Label par MonLabelBebete (MonLabelBebete n'est pas une marque déposée d'olsimare donc t'as le droit de changer de nom !) et c'est tout bon.

    Faut pas utiliser l'autosize, sinon il faut rajouter un recalcul du width et height dans le textchanged (perso, l'autosize je trouve ça moyen donc je l'utilise pas).

    Cdt.

Discussions similaires

  1. Probleme assez étrange avec php et selected
    Par lysandre dans le forum Langage
    Réponses: 3
    Dernier message: 01/02/2008, 16h35
  2. Probleme changement police de caractere
    Par winnyzeboss1 dans le forum Interfaces Graphiques en Java
    Réponses: 11
    Dernier message: 07/03/2006, 10h55
  3. probleme lissage police ecran ... help!
    Par clicman dans le forum Windows XP
    Réponses: 2
    Dernier message: 22/02/2006, 00h08
  4. Réponses: 1
    Dernier message: 08/11/2005, 09h03
  5. [html] probleme de police
    Par aldorado_one dans le forum Balisage (X)HTML et validation W3C
    Réponses: 6
    Dernier message: 15/05/2005, 13h34

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo