dimensions des caractères

Le
Barsalou
Bonjour

Y a-t-il un moyen de trouver (par VB) la largeur et la hauteur en pixels
d'un caractère d'une police donnée.
C'est en effet nécessaire, en conjonction avec screen.twipsperpixelX (ou Y)
pour définir la taille exacte d'un contrôle qui contient un certain texte,
et ce quel que soit l'écran.

Merci de vos infos.
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Jacques93
Le #15355921
Bonjour Barsalou,
Barsalou a écrit :
Bonjour

Y a-t-il un moyen de trouver (par VB) la largeur et la hauteur en pixels
d'un caractère d'une police donnée.
C'est en effet nécessaire, en conjonction avec screen.twipsperpixelX (ou
Y) pour définir la taille exacte d'un contrôle qui contient un certain
texte, et ce quel que soit l'écran.




Voir du côté de l'API GetTextExtentPoint32 ?


Option Explicit

Private Declare Function GetTextExtentPoint32 Lib "gdi32" Alias _
"GetTextExtentPoint32A" _
(ByVal hdc As Long, ByVal lpsz As String, _
ByVal cbString As Long, lpSize As SIZE) As Long
Private Type SIZE
cx As Long
cy As Long
End Type

Private Sub Form_Load()
Dim lResult As Long
Dim sz As SIZE

Picture1.Visible = False
Picture1.AutoRedraw = True
Picture1.Print "F"

lResult = GetTextExtentPoint32(Me.Picture1.hdc, "F", 1&, sz)
Debug.Print "Hauteur : " & sz.cy
Debug.Print "Largeur : " & sz.cx
End Sub

--
Cordialement,

Jacques.
Eric Barsalou
Le #15355881
Merci

Je venais de trouver cet API mais c'est encore mieux que tout le boulot soit
fait !

"Jacques93" a écrit dans le message de
news:
Bonjour Barsalou,
Barsalou a écrit :
Bonjour

Y a-t-il un moyen de trouver (par VB) la largeur et la hauteur en pixels
d'un caractère d'une police donnée.
C'est en effet nécessaire, en conjonction avec screen.twipsperpixelX (ou
Y) pour définir la taille exacte d'un contrôle qui contient un certain
texte, et ce quel que soit l'écran.




Voir du côté de l'API GetTextExtentPoint32 ?


Option Explicit

Private Declare Function GetTextExtentPoint32 Lib "gdi32" Alias _
"GetTextExtentPoint32A" _
(ByVal hdc As Long, ByVal lpsz As String, _
ByVal cbString As Long, lpSize As SIZE) As Long
Private Type SIZE
cx As Long
cy As Long
End Type

Private Sub Form_Load()
Dim lResult As Long
Dim sz As SIZE

Picture1.Visible = False
Picture1.AutoRedraw = True
Picture1.Print "F"

lResult = GetTextExtentPoint32(Me.Picture1.hdc, "F", 1&, sz)
Debug.Print "Hauteur : " & sz.cy
Debug.Print "Largeur : " & sz.cx
End Sub

--
Cordialement,

Jacques.


Driss HANIB
Le #15355841
salut Jacques93
est-ce que cette api est l'équivalent de la propriété TextWidth ?

Driss

"Jacques93" a écrit dans le message de
news:
Bonjour Barsalou,
Barsalou a écrit :
> Bonjour
>
> Y a-t-il un moyen de trouver (par VB) la largeur et la hauteur en pixels
> d'un caractère d'une police donnée.
> C'est en effet nécessaire, en conjonction avec screen.twipsperpixelX (ou
> Y) pour définir la taille exacte d'un contrôle qui contient un certain
> texte, et ce quel que soit l'écran.
>

Voir du côté de l'API GetTextExtentPoint32 ?


Option Explicit

Private Declare Function GetTextExtentPoint32 Lib "gdi32" Alias _
"GetTextExtentPoint32A" _
(ByVal hdc As Long, ByVal lpsz As String, _
ByVal cbString As Long, lpSize As SIZE) As Long
Private Type SIZE
cx As Long
cy As Long
End Type

Private Sub Form_Load()
Dim lResult As Long
Dim sz As SIZE

Picture1.Visible = False
Picture1.AutoRedraw = True
Picture1.Print "F"

lResult = GetTextExtentPoint32(Me.Picture1.hdc, "F", 1&, sz)
Debug.Print "Hauteur : " & sz.cy
Debug.Print "Largeur : " & sz.cx
End Sub

--
Cordialement,

Jacques.


Driss HANIB
Le #15355831
Euh..

je voulais dire est -ce que cette api est l'équivalent de la propriété
TextHeight ?

Driss

"Eric Barsalou" message de news:
Merci

Je venais de trouver cet API mais c'est encore mieux que tout le boulot


soit
fait !

"Jacques93" a écrit dans le message de
news:
> Bonjour Barsalou,
> Barsalou a écrit :
>> Bonjour
>>
>> Y a-t-il un moyen de trouver (par VB) la largeur et la hauteur en


pixels
>> d'un caractère d'une police donnée.
>> C'est en effet nécessaire, en conjonction avec screen.twipsperpixelX


(ou
>> Y) pour définir la taille exacte d'un contrôle qui contient un certain
>> texte, et ce quel que soit l'écran.
>>
>
> Voir du côté de l'API GetTextExtentPoint32 ?
>
> >
> Option Explicit
>
> Private Declare Function GetTextExtentPoint32 Lib "gdi32" Alias _
> "GetTextExtentPoint32A" _
> (ByVal hdc As Long, ByVal lpsz As String, _
> ByVal cbString As Long, lpSize As SIZE) As Long
> Private Type SIZE
> cx As Long
> cy As Long
> End Type
>
> Private Sub Form_Load()
> Dim lResult As Long
> Dim sz As SIZE
>
> Picture1.Visible = False
> Picture1.AutoRedraw = True
> Picture1.Print "F"
>
> lResult = GetTextExtentPoint32(Me.Picture1.hdc, "F", 1&, sz)
> Debug.Print "Hauteur : " & sz.cy
> Debug.Print "Largeur : " & sz.cx
> End Sub
>
> --
> Cordialement,
>
> Jacques.



Jacques93
Le #15355821
Bonjour Driss HANIB,
Driss HANIB a écrit :
salut Jacques93
est-ce que cette api est l'équivalent de la propriété TextWidth ?




Oui, tu as tout à fait raison, TextHeight et TextWidth renvoient des
valeurs équivalentes à l'API(par défaut en twips, en pixels pour l'API).

Je ne sais plus à quelle occasion j'ai utilisé cette API, (faudrait que
je retrouve le projet pour voir si ce choix avait une raison valable),
Mais résultat : c'est la première réponse qui m'est venue

--
Cordialement,

Jacques.
Jacques93
Le #15355811
Jacques93 a écrit :
Bonjour Driss HANIB,
Driss HANIB a écrit :
salut Jacques93
est-ce que cette api est l'équivalent de la propriété TextWidth ?




Oui, tu as tout à fait raison, TextHeight et TextWidth renvoient des
valeurs équivalentes à l'API(par défaut en twips, en pixels pour l'API).

Je ne sais plus à quelle occasion j'ai utilisé cette API, (faudrait que
je retrouve le projet pour voir si ce choix avait une raison valable),



Bon, j'ai retrouvé le projet en question, et je ne vois pas de raison
d'avoir utilisée l'API. Donc :

Private Sub Form_Load()
Dim lResult As Long
Dim s As String
Dim sz As SIZE

s = "Pourquoi faire simple quand on peut faire compliqué ;-) ?"
lResult = GetTextExtentPoint32(Me.hdc, s, Len(s), sz)
Debug.Print "Hauteur : " & sz.cy & " - " & _
Me.TextHeight(s) / Screen.TwipsPerPixelY
Debug.Print "Largeur : " & sz.cx & " -" & _
Me.TextWidth(s) / Screen.TwipsPerPixelY
End Sub

==> ça donne rigoureusement la même chose.

--
Cordialement,

Jacques.
Driss HANIB
Le #15355791
D'accord,
merci Jacques

Driss

"Jacques93" a écrit dans le message de
news:%
Jacques93 a écrit :
> Bonjour Driss HANIB,
> Driss HANIB a écrit :
>> salut Jacques93
>> est-ce que cette api est l'équivalent de la propriété TextWidth ?
>>
>
> Oui, tu as tout à fait raison, TextHeight et TextWidth renvoient des
> valeurs équivalentes à l'API(par défaut en twips, en pixels pour l'API).
>
> Je ne sais plus à quelle occasion j'ai utilisé cette API, (faudrait que
> je retrouve le projet pour voir si ce choix avait une raison valable),

Bon, j'ai retrouvé le projet en question, et je ne vois pas de raison
d'avoir utilisée l'API. Donc :

Private Sub Form_Load()
Dim lResult As Long
Dim s As String
Dim sz As SIZE

s = "Pourquoi faire simple quand on peut faire compliqué ;-) ?"
lResult = GetTextExtentPoint32(Me.hdc, s, Len(s), sz)
Debug.Print "Hauteur : " & sz.cy & " - " & _
Me.TextHeight(s) / Screen.TwipsPerPixelY
Debug.Print "Largeur : " & sz.cx & " -" & _
Me.TextWidth(s) / Screen.TwipsPerPixelY
End Sub

==> ça donne rigoureusement la même chose.

--
Cordialement,

Jacques.


Barsalou
Le #15355781
C'est effectivement beaucoup plus simple, d'autant que ce sont les twips qui
m'intéressent !
Merci à tous.
Publicité
Poster une réponse
Anonyme