Ajouter une flèche à une textbox [Résolu]

Signaler
Messages postés
642
Date d'inscription
mercredi 4 août 2010
Statut
Membre
Dernière intervention
21 mars 2020
-
Herve_be
Messages postés
642
Date d'inscription
mercredi 4 août 2010
Statut
Membre
Dernière intervention
21 mars 2020
-
Bonjour,
Lorsqu'on passe la souris sur un graphique, une légende (une text box en fait) contenant les caractéristiques du point survolé s'affiche, ceci fonctionne très bien, voir cette animation



Suivant la position du point la légende peut s'afficher au-dessus ou en dessous, à gauche ou à droite du point.
Je voudrais ajouter "quelque chose" qui indique quel angle de la text box pointe sur le point.
Une idée ?
Merci

6 réponses

Messages postés
170
Date d'inscription
mardi 4 juillet 2017
Statut
Membre
Dernière intervention
6 mars 2020
5
Salut Hervé,
En deux mots, tu veux mettre en surbrillance la position du point sélectionné par la textbox.
Rapidement, je te recommanderai d'utiliser une image, envoyer ton text dans celle-ci, est allumer ou placer un marqueur sur le point concerné.
Tu peux aussi utiliser un objet SHARP (cercle) que tu déplacera dans ton image graphique en l'allumant ou en la cachant.
Mais, comme toujours, il y aura des problèmes de recouvrement en couches de recouvrement, qui masque les sharps non prioritaires face au images/textbox qui s'affichent toujours au premier plan.
Tu aura donc ton sharp partiellement masqué par ton textbox.
Sinon, il te faudra gérer l'ensemble en mode graphique.

Tu peux utiliser un cercle, mais aussi des "Line"s en forme de croix… rectangle...sharp carré.
Messages postés
642
Date d'inscription
mercredi 4 août 2010
Statut
Membre
Dernière intervention
21 mars 2020
2
Bonjour et merci pour ta réponse,
La solution est en effet d'utiliser une Picturebox au lieu d'une textbox.
Je peux ainsi facilement dessiner une flèche dans la Picturebox dirigée vers le point concerné.

Mais j'ai alors un autre problème que je ne comprends pas, j'ai pourtant déjà pas mal travaillé avec des picturebox !
voici le code, Legend est la picturebox avec ScaleMode = 3 - Pixel
Htext = le texte à imprimer sur la légende
Legend.CurrentX = 0: Legend.CurrentY = 0
Legend.Print Htext

Legend.Width = Legend.TextWidth(Htext)
Legend.Height = Legend.Textheight(Htext)
mais la picturebox est moins large et moins haute que le texte !
Messages postés
170
Date d'inscription
mardi 4 juillet 2017
Statut
Membre
Dernière intervention
6 mars 2020
5
Salut Hervé,

Tu dois être avec une image en apparence "3D", ce qui te mange l'épaisseur des bords.
Legend.Width = Legend.TextWidth(Htext) + 110
Legend.Height = Legend.TextHeight(Htext) + 110

… ajoute la largueur des bords en 3D.

Amuse-toi bien.
Messages postés
642
Date d'inscription
mercredi 4 août 2010
Statut
Membre
Dernière intervention
21 mars 2020
2
Merci mais la différence est beaucoup plus importante que l'épaisseur des bords.
Par exemple si Htext = "Salinité [ppt] : 34,7 (34,2)"
je ne vois que "Salinité [ppt] : 34,7 ("
Messages postés
170
Date d'inscription
mardi 4 juillet 2017
Statut
Membre
Dernière intervention
6 mars 2020
5
Salut Hervé,
Donc, tu es en Scalemode=3 (pixels)

Legend.Width = Legend.TextWidth(Htext) * Screen.TwipsPerPixelX + 110
Legend.Height = Legend.TextHeight(Htext) * Screen.TwipsPerPixelY + 110

;)
Messages postés
642
Date d'inscription
mercredi 4 août 2010
Statut
Membre
Dernière intervention
21 mars 2020
2
Merci mais ce n'est pas ça
parce qu'avec Legend.TextWidth(Htext) * Screen.TwipsPerPixelX j'obtiens une picturebox beaucoup trop grande.

Par contre j'ai trouvé : Legend.TextWidth(Htext) se réfère à ScaleWidth
alors que Width est en twips
donc j'ai défini le même ScaleWidth que le graph sur lequel j'affiche ma légende ce qui met ScaleMode à zéro.