Taille Picturebox

Herve_be Messages postés 987 Date d'inscription mercredi 4 août 2010 Statut Membre Dernière intervention 13 novembre 2023 - Modifié le 24 déc. 2022 à 11:41
Herve_be Messages postés 987 Date d'inscription mercredi 4 août 2010 Statut Membre Dernière intervention 13 novembre 2023 - 25 déc. 2022 à 11:32

Bonjour,

J'utilise une Picturebox pour afficher la légende d'un graphique.
Je détermine les dimensions de cette Picturebox comme ceci
BarsNum est le nombre d'entrées de la légende = 6 dans l'exemple

LegendHisto.Width = Screen.TwipsPerPixelX * LegendHisto.TextWidth(Htext) * 1.25
LegendHisto.Height = Screen.TwipsPerPixelY * LegendHisto.TextHeight(Htext) * BarsNum

Ensuite j'écris dans la PictureBox et je dessine les couleurs du graphique en calculant x et y comme ceci
K étant le n° de l'entrée de 0 à 5 dans l'exemple

LegendHisto.CurrentX = 0
LegendHisto.CurrentY = K * LegendHisto.TextHeight(Htext)
LegendHisto.Print Htext

 Puisqu'il y a 6 entrées et que la hauteur de la PictureBox = 6 fois la hauteur d'une entrée
pourquoi y a-t-il un espace après la dernière entrée ?

En regardant à l'aide d'un logiciel graphique chaque entrée mesure 13 pixels donc total 6 * 13 = 78 pixels
mais la PictureBox mesure 85 pixels de haut soit 7 pixels de plus !

Merci d'avance pour vos réponses et joyeux Noël :-)

2 réponses

JeuDuTaquin Messages postés 251 Date d'inscription mardi 4 juillet 2017 Statut Membre Dernière intervention 31 mai 2023 7
Modifié le 25 déc. 2022 à 00:36

Salut Hervé,

C'est un peu un classique sur les PictureBoxs, avec un cadre 3D...

Tu calcules la taille utile de ta PictureBox et non la taille affichée.

Donc, VB va te rejouter les 6 pixels du cadre, en hauteur et en largeur.

Il faut donc que tu retires la largeur du cadre pour éviter ce décalage haut et droite.

'Ici tu as un coéficient de correction globale, donc tu prends en compte le bord du cadre
LegendHisto.Width = Screen.TwipsPerPixelX * LegendHisto.TextWidth(Htext) * 1.25
' Moins le cadre
LegendHisto.Height = (Screen.TwipsPerPixelY * LegendHisto.TextHeight(Htext) * BarsNum)-Screen.TwipsPerPixelY *6


Oubien, passer en PictureBox sans cadre 3D, qui n'affiche que la plage affichable de ton contrôle.

Amuse-toi bien.

0
Herve_be Messages postés 987 Date d'inscription mercredi 4 août 2010 Statut Membre Dernière intervention 13 novembre 2023 2
25 déc. 2022 à 11:32

Merci pour ta réponse mais ça ne fonctionne pas

LegendHisto.Height = (Screen.TwipsPerPixelY * LegendHisto.TextHeight(Htext) * BarsNum)-Screen.TwipsPerPixelY *6
Screen.TwipsPerPixelY = 15
LegendHisto.TextHeight(Htext) = 0,9727443
BarsNum = 6
Screen.TwipsPerPixelY * LegendHisto.TextHeight(Htext) * BarsNum = 87,547
Screen.TwipsPerPixelY * 6 = 90
LegendHisto.Height = 87,547 - 90 < 0 ⇒ Run time error 380 (invalid property value)

et si je ne multiplie pas 6 par Screen.TwipsPerPixelY la dernière ligne de texte de la légende est rognée

En retirant 3 au lieu de 6 c'est bon mais ça me semble être un peu au hasard.
0
Rejoignez-nous