Largeur caractère en pixel???

Résolu
cs_Sator Messages postés 351 Date d'inscription samedi 7 février 2004 Statut Membre Dernière intervention 6 octobre 2010 - 13 janv. 2007 à 06:34
cs_Sator Messages postés 351 Date d'inscription samedi 7 février 2004 Statut Membre Dernière intervention 6 octobre 2010 - 14 janv. 2007 à 23:39
Bonjour à vous.
Ma question est la suivante :
En fait mon application va être la suivante :

Imaginons une série de colonne (5 pour être précis) à sortir sur l'imprimante....
dont j'aimerais que les titres soient centrés par rapport au colonne en dessous  et en gras.
donc supposons qu'il y ai une fonction qui permette de connaître le nombre de pixel dans la longueur de la chaîne la plus longue (les données étant récupéré dans un fichier access) donc pas compliqué de connaître la chaîne la plus longue, donc la fonction que je cherche serai d'avoir le nombre de pixel de la chaîne....

Je vous remercie de l'attention que vous porter à ma question et vous remercie déjà pour vos réponse...
:)Sator :)

8 réponses

jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
13 janv. 2007 à 08:11
Ce n'est pas une fonction, ùmais une méthode et elle a pour nom TextWidth.

Existe également la méthode Textheight, pour calculer la hauteur graphique d'une chaîne de caractères.

Ces deux méthodes sont à appliquer après avoir défini les caractéristiques de la police de caractères utilisée.

Tu les trouveras suffisamment bien exposées dans ton aide en ligne.


 


 
3
vicosta Messages postés 178 Date d'inscription lundi 5 juin 2006 Statut Membre Dernière intervention 30 novembre 2011
13 janv. 2007 à 08:14
La commande textwidth peut te donner cette largeur

Private Sub Command1_Click()
With

Me ' Printer ou PictureBox
    .ScaleMode = 3
    .FontName = "Arial"
    .FontSize = "10"
    MsgBox .TextWidth("bla bla bla")
    MsgBox .TextHeight("bla bla bla")
End With
End Sub

Bon travail
0
vicosta Messages postés 178 Date d'inscription lundi 5 juin 2006 Statut Membre Dernière intervention 30 novembre 2011
13 janv. 2007 à 08:16
dsl
posté en même temps
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
13 janv. 2007 à 08:43
Si celà te dit, maintenant, d'utiliser la fonction Drawtext de la librairie User32 de l'Api de Windows, pour "dessiner" ton texte dans une picturebox avant, tout simplement, d'imprimer cette dernière, tu n'as qu'à dire et je t'enverrai un exemple complet de ce qui peut être fait (à droite, à gauche, au centre - horizontalement ou verticalement -, en haut, en bas de ta feuille, ou encore - avec les mêmes possibilités, dans une zone restreinte de ta feuille - ce qui te permettrait, par exemple, une mise en page du type "journal" - etc...)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
13 janv. 2007 à 08:52
Tiens, le voilà, cet exemple, que tu dois à mon ami Jean-Luc -Delbeke de son pseudo- (Salut Jean-Luc ) :

Sur ta Form :
Une picturebox Picture1, un timer et un bouton de commande Command1

Tu lances, regardes ce qui se passe... et attends que le programme s'arrête seul ...

code :

Option Explicit
Private Const DT_BOTTOM = &H8
Private Const DT_CALCRECT = &H400
Private Const DT_CENTER = &H1
Private Const DT_EXPANDTABS = &H40
Private Const DT_EXTERNALLEADING = &H200
Private Const DT_LEFT = &H0
Private Const DT_NOCLIP = &H100
Private Const DT_NOPREFIX = &H800
Private Const DT_RIGHT = &H2
Private Const DT_SINGLELINE = &H20
Private Const DT_TABSTOP = &H80
Private Const DT_TOP = &H0
Private Const DT_VCENTER = &H4
Private Const DT_WORDBREAK = &H10
Private Const PS_NULL = 5
Private Const PS_INSIDEFRAME = 6
Private Const PS_SOLID = 0
 
Private Type RECT
    Left As Long
    Top As Long
    Right As Long
    Bottom As Long
End Type
 
Private Declare Function DrawText Lib "user32" Alias "DrawTextA" (ByVal hdc As Long, ByVal lpStr As String, ByVal nCount As Long, lpRect As RECT, ByVal wFormat As Long) As Long
Private Declare Function GetClientRect Lib "user32" (ByVal hwnd As Long, lpRect As RECT) As Long
Private Declare Function CopyRect Lib "user32" (lpDestRect As RECT, lpSourceRect As RECT) As Long
Private Declare Function Rectangle Lib "gdi32" (ByVal hdc As Long, ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
 
Private Enum HorzAlign
    HORZ_LEFT = 0
    HORZ_CENTER = 1
    HORZ_RIGHT = 2
End Enum


Private Enum VertAlign
    VERT_TOP = 0
    VERT_CENTER = 1
    VERT_BOTTOM = 2
End Enum
 


Private Sub Command1_Click()
    Dim Txt As String
    Dim Rct As RECT
    Dim Horz As HorzAlign
    Dim Vert As VertAlign
    MousePointer = 11: DoEvents
    'on prend comme rectangle la surface client du picturebox
    GetClientRect Picture1.hwnd, Rct
 
    Txt = "Exemple de texte simple"
    DessineTout Txt, Rct
 
    Txt = "Exemple de " & vbCrLf & "texte multilignes"
    DessineTout Txt, Rct
 
    'on definit un rectangle plus petit à l'interieur du picturebox
    Rct.Top = 100
    Rct.Left = 100
    Rct.Bottom = 200
    Rct.Right = 300
 
    Txt = "Exemple de texte simple"
    DessineTout Txt, Rct
 
    Txt = "Exemple de " & vbCrLf & "texte multilignes"
    DessineTout Txt, Rct
 
    MousePointer = 0
    Unload Me
End Sub
 
Private Sub Form_Load()
    Me.Font = 20
    Me.Move 0, 0, 6000, 6000
    Picture1.Move 100, 100, 5000, 4000
    Command1.Move 100, 4500
End Sub


Private Sub DessineTout(Txt As String, Rct As RECT)
    'Execute la commande dessine pour les neuf possibilités d'alignement
    Dim Horz As HorzAlign
    Dim Vert As VertAlign
    Vert = VERT_TOP ' en haut
    Horz = HORZ_LEFT:    Dessine Txt, Rct, Horz, Vert 'a gauche
    Horz = HORZ_CENTER:  Dessine Txt, Rct, Horz, Vert 'au centre
    Horz = HORZ_RIGHT:   Dessine Txt, Rct, Horz, Vert 'a droite
    Vert = VERT_CENTER 'au milieu
    Horz = HORZ_LEFT:    Dessine Txt, Rct, Horz, Vert 'a gauche
    Horz = HORZ_CENTER:  Dessine Txt, Rct, Horz, Vert 'au centre
    Horz = HORZ_RIGHT:   Dessine Txt, Rct, Horz, Vert 'a droite
    Vert = VERT_BOTTOM 'en bas
    Horz = HORZ_LEFT:    Dessine Txt, Rct, Horz, Vert 'a gauche
    Horz = HORZ_CENTER:  Dessine Txt, Rct, Horz, Vert 'au centre
    Horz = HORZ_RIGHT:   Dessine Txt, Rct, Horz, Vert 'a droite
End Sub


Private Sub Dessine(Txt As String, Rct As RECT, Horz As HorzAlign, Vert As VertAlign)
    Dim CalcRect As RECT
    Dim HauteurTexte As Long
    Dim Flag As Long
    'on efface le picturebox
    Picture1.Cls
    'on dessine le rectangle
    Rectangle Picture1.hdc, Rct.Left, Rct.Top, Rct.Right, Rct.Bottom
    'On copie le rectangle dans un autre rectangle qui servira pour les calculs
    CopyRect CalcRect, Rct
    'Calcul de la Hauteur du Texte
    DrawText Picture1.hdc, Txt, Len(Txt), CalcRect, DT_LEFT Or DT_WORDBREAK Or DT_CALCRECT
    HauteurTexte = CalcRect.Bottom - CalcRect.Top
    'On copie le rectangle dans un autre rectangle qui servira pour les calculs
    CopyRect CalcRect, Rct
    'calcul du flag
    Select Case Horz
        Case HORZ_LEFT
            Flag = DT_LEFT Or DT_WORDBREAK
        Case HORZ_CENTER
            Flag = DT_CENTER Or DT_WORDBREAK
        Case Else
            Flag = DT_RIGHT Or DT_WORDBREAK
    End Select
  '
    Select Case Vert
        Case VERT_TOP
            '
        Case VERT_CENTER
            CalcRect.Top = CalcRect.Top + ((Rct.Bottom - Rct.Top) - HauteurTexte) \ 2
        Case Else
            CalcRect.Top = CalcRect.Bottom - HauteurTexte
    End Select
    CalcRect.Bottom = CalcRect.Top + HauteurTexte
    DrawText Picture1.hdc, Txt, Len(Txt), CalcRect, Flag
    'on attend une seconde pour laisser le temps de voir
    Sleep 1000
End Sub
0
cs_Sator Messages postés 351 Date d'inscription samedi 7 février 2004 Statut Membre Dernière intervention 6 octobre 2010
13 janv. 2007 à 13:05
Merci à tous pour vos réponses, je les essayerais tantôt....
et vous donnerai des nouvelles....

:)Sator :)
0
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
13 janv. 2007 à 14:30
Salut,

si tu stockes tes phrases (chaines de caractères) dans des contrôles, tu peux utiliser la source de PCPT, qui mesure en pixel la longueur de la chaine, je l'ai moi même utilisé pour ma dernière source, et elle est très facile d'utilisation :

http://www.vbfrance.com/codes/MESURER-TAILLE-CHAINE-PIXELS-MODULE-CLASSE_40299.aspx

@++

<hr size="2" width="100%" />
  --Mortalino--
Le mystérieux chevalier, "Provençal, le Gaulois"
<!--
0
cs_Sator Messages postés 351 Date d'inscription samedi 7 février 2004 Statut Membre Dernière intervention 6 octobre 2010
14 janv. 2007 à 23:39
Merci à tous pour vos réponses...  j'ai pris la plus simple...

:)Sator :)
0
Rejoignez-nous