TextOutW dans PictureBox

Résolu
Herve_be Messages postés 966 Date d'inscription mercredi 4 août 2010 Statut Membre Dernière intervention 30 janvier 2023 - Modifié le 14 janv. 2023 à 12:48
JeuDuTaquin Messages postés 244 Date d'inscription mardi 4 juillet 2017 Statut Membre Dernière intervention 24 janvier 2023 - 24 janv. 2023 à 22:17

Bonjour,

J'ai imprimé 3 lignes avec .print dans une PictureBox,
je voudrais imprimer un caractère spécial juste en-dessous

Pic.CurrentY = 0
Pic.print ligne 1
Pic.CurrentY = Pic.TextHeight("X")
Pic.print ligne 2
Pic.CurrentY = 2 * Pic.TextHeight("X")
Pic.print ligne 3

y = 3 * Pic.TextHeight("X") * Pic.Height / Pic.ScaleHeight
iStr = ChrW(Htext)
TextOutW Pic.hDC, x, y, StrPtr(iStr), Len(iStr)

le caractère s'imprime trop bas, en dehors de la PictureBox (il s'imprime correctement avec y = 2.2 * ...) :
où est mon erreur ?

4 réponses

JeuDuTaquin Messages postés 244 Date d'inscription mardi 4 juillet 2017 Statut Membre Dernière intervention 24 janvier 2023 7
23 janv. 2023 à 03:13

Salut Hervé,

Tout dépend de la configuration de ta picturebox, mais généralement si un coefficient multiplicateur fixe est la solution du problème... c'est qu'il manque un Screen.TwipsPerPixelX et un Screen.TwipsPerPixelY dans ta recette.

Sur Pic.CurrentY ou Pic.TextHeight("X") ?

0
JeuDuTaquin Messages postés 244 Date d'inscription mardi 4 juillet 2017 Statut Membre Dernière intervention 24 janvier 2023 7
Modifié le 24 janv. 2023 à 11:27

Salut Hervé,

Private Sub Form_Load()
'PictureBox en Pixel
Pic.ScaleMode = 3
Pic.CurrentY = 0
Pic.Print "ligne"; 1
Pic.CurrentY = Pic.TextHeight("X")
Pic.Print "ligne"; 2
Pic.CurrentY = 2 * Pic.TextHeight("X")
Pic.Print "ligne"; 3

y = 3 * Pic.TextHeight("X") * Pic.Height / Pic.ScaleHeight
Htext = 256
iStr = ChrW(Htext)
Pic.CurrentY = y
Pic.Print iStr
End Sub

ça fonctionne bien chez moi, pourvu que tu paramètres la picturebox en Pixel ou en Twip, sinon tu auras un coefficient de décalage.

0
Herve_be Messages postés 966 Date d'inscription mercredi 4 août 2010 Statut Membre Dernière intervention 30 janvier 2023 2
24 janv. 2023 à 12:17

Merci mais chez moi ça ne fonctionne pas :
la flèche n'est pas sur la 4ème ligne mais entre le 3ème et la 4ème

Etiquette.ScaleMode = 3
RowHeight = Etiquette.TextHeight("X")
Etiquette.CurrentX = 0
Etiquette.CurrentY = 3 * RowHeight * Etiquette.Height / Etiquette.ScaleHeight

De toute façon ça fonctionne en dessinant la flèche donc j'ai ma solution.

0
JeuDuTaquin Messages postés 244 Date d'inscription mardi 4 juillet 2017 Statut Membre Dernière intervention 24 janvier 2023 7
Modifié le 24 janv. 2023 à 22:28

Salut Hervé,

Peu importe, mais garde à l'esprit que TextOutW est une fonction GDI, et toutes coordonnées envoyées sont exprimés dans la configuration de la DLL (ici en  pixels) et cette valeur doit être addaptée à la configuration de l'image affichée.

En config. TWIP :

TextOutw Pic.hdc, x \ Screen.TwipsPerPixelX, y \ Screen.TwipsPerPixelY, istr, Len(istr)
0