Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

dimensions des caractères

8 réponses
Avatar
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.

8 réponses

Avatar
Jacques93
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 ?

<http://msdn2.microsoft.com/en-us/library/ms534223(VS.85).aspx>

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.
Avatar
Eric Barsalou
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 ?

<http://msdn2.microsoft.com/en-us/library/ms534223(VS.85).aspx>

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.


Avatar
Driss HANIB
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 ?

<http://msdn2.microsoft.com/en-us/library/ms534223(VS.85).aspx>

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.


Avatar
Driss HANIB
Euh..

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

Driss

"Eric Barsalou" a écrit dans le
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 ?
>
> <http://msdn2.microsoft.com/en-us/library/ms534223(VS.85).aspx>
>
> 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.



Avatar
Jacques93
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.
Avatar
Jacques93
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.
Avatar
Driss HANIB
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.


Avatar
Barsalou
C'est effectivement beaucoup plus simple, d'autant que ce sont les twips qui
m'intéressent !
Merci à tous.