Afficher sur une image dans userform un curseur en croix qui touche aux bords

Résolu
Eleasias Messages postés 36 Date d'inscription mardi 18 mars 2008 Statut Membre Dernière intervention 31 mars 2008 - 18 mars 2008 à 14:41
Eleasias Messages postés 36 Date d'inscription mardi 18 mars 2008 Statut Membre Dernière intervention 31 mars 2008 - 25 mars 2008 à 14:21
Bonjour,

J'aimerai avoir un curseur en croix qui touche aux bords de mon image. Il serait constitué de deux barres, une verticale et une horizontale avec pour centre ma souris.
Cela me servirait pour la lecture de graphiques

Merci par avance à ceux qui veulent ien me répondre

Eleasias

28 réponses

Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
25 mars 2008 à 11:28
Pourtant pas compliqué : tu as tous les éléments.

voilà ce que je viens de faire pour tester (pas de tete, donc, ce coup ci)

1- ajouter une nouvelle UserForm
2- y ajouter une image, avec un JPEG affiché dedans
3- ajouter deux autres images ("Line1" et "Line2") dont tu changeras le BorderColor pour modifier la couleur des traits
4- code :

Private Sub UserForm_Activate()
SetupLines
End Sub

Private Sub UserForm_Resize()
SetupLines
End Sub

Private Sub Image1_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
Line1.Top = Y
Line2.Left = X
End Sub

Private Sub SetupLines()
Line1.Left = 0
Line1.Width = Me.Width
Line1.Height = 1

Line2.Top = 0
Line2.Height = Me.Height
Line2.Width = 1
End Sub
3
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
25 mars 2008 à 13:16
Pour le Zoom, suffit d'observer et de faire un produit en croix....


Option Explicit

Private Sub UserForm_Activate()
SetupLines
End Sub

Private Sub UserForm_Resize()
SetupLines
End Sub

Private Sub Line1_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
CursorMoved X, Line1.Top
End Sub

Private Sub Line2_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
CursorMoved Line2.Left, Y
End Sub

Private Sub Image1_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
CursorMoved X, Y
End Sub

Private Sub UserForm_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
CursorMoved X, Y
End Sub

Private Sub CursorMoved(ByVal X As Single, ByVal Y As Single)
Line1.Top = Y
Line2.Left = X
End Sub
Private Sub SetupLines()
Line1.Left = 0
If Me.Zoom <> 100 Then
Line1.Width = 100 * Me.Width / (100 - Me.Zoom)
Else
Line1.Width = Me.Width
End If
Line1.Height = 1
Line1.ZOrder 0
Line1.BorderColor = vbRed

Line2.Top = 0
If Me.Zoom <> 100 Then
Line2.Height = 100 * Me.Height / (100 - Me.Zoom)
Else
Line2.Height = Me.Height
End If
Line2.Width = 1
Line2.ZOrder 0
Line2.BorderColor = vbRed
End Sub
3
cs_Exploreur Messages postés 4821 Date d'inscription lundi 11 novembre 2002 Statut Membre Dernière intervention 15 novembre 2016 15
18 mars 2008 à 16:29
Salut,

Défois que :

Private Sub Form_Load()
Me.MousePointer = 2
End Sub

A toi par la suite à placer ton curseur à l'endroit désiré...
A+
Exploreur

 Linux a un noyau, Windows un pépin

Un jeu en flash sympa...? Voir ici
Si vous voulez vous inscrire
mettez comme parrain : exploreur
0
Eleasias Messages postés 36 Date d'inscription mardi 18 mars 2008 Statut Membre Dernière intervention 31 mars 2008
19 mars 2008 à 08:15
D'abord merci de ta réponse mais ce n'est pas exactement ce que je veux.

Je me suis probablement mal expliqué : ce que tu m'as donné change seulement le curseur de forme.

Je voudrais la forme croix comme tu m'a donné mais dont les extrémités verticales et horizontales ne mesurent pas 10 pixels. Il me faudrait une croix dont les extrémités touchent les bords de mon image (avec une taille à rallonge suivant l'endroit où l'on se place).

J'espère que je me suis bien exprimé, merci d'avance

Eleasias
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Exploreur Messages postés 4821 Date d'inscription lundi 11 novembre 2002 Statut Membre Dernière intervention 15 novembre 2016 15
19 mars 2008 à 08:33
Re,

Ah..oui...un peu comme les logiciels de dessins indus...? Mais là, je ne sais pas.

A+
Exploreur

 Linux a un noyau, Windows un pépin

Un jeu en flash sympa...? Voir ici
Si vous voulez vous inscrire
mettez comme parrain : exploreur
0
Eleasias Messages postés 36 Date d'inscription mardi 18 mars 2008 Statut Membre Dernière intervention 31 mars 2008
19 mars 2008 à 10:37
(Désolé j'ai quelques bugs je crois)

Oui c'est bien cela, c'est pour trouver une abscisse avec une ordonnée ou vice et versa sur un graphe en jpeg

Eleasias
0
Eleasias Messages postés 36 Date d'inscription mardi 18 mars 2008 Statut Membre Dernière intervention 31 mars 2008
20 mars 2008 à 15:11
J'espère que quelqu'un pourra m'aider et surtout que j'ai été assez clair.
Je suis débutant en VBA et j'espère que ce n'est pas d'un niveau trop élevé pour moi.

(Comment je fais pour supprimer mon message raté s'il vous plaît)

Eleasias
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
21 mars 2008 à 10:00
MousePointer a mettre en custom
ainsi, VB utilisera l'image MouseIcon comme curseur.
0
Eleasias Messages postés 36 Date d'inscription mardi 18 mars 2008 Statut Membre Dernière intervention 31 mars 2008
21 mars 2008 à 10:13
Oui mais je voudrais un curseur très grand (qui touche aux 4 côtés d'une image 270*486) et qui ne dépasse pas de l'image .
Le centre de la croix (comme un curseur cross) sera le pointé de la souris.

Eleasias
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
21 mars 2008 à 10:19
ah, ok, j'avais pas vu ca ainsi.

déplace des controles Line en fonction des coordonnées de la souris (MouseMove)

en gros :


Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
Line1.X1 = X
Line1.X2 = X

Line2.Y1 = Y
Line2.Y2 = Y
End Sub
0
Eleasias Messages postés 36 Date d'inscription mardi 18 mars 2008 Statut Membre Dernière intervention 31 mars 2008
21 mars 2008 à 10:27
Euh ca c'est une macro esclave nan?
Il faut l'appeler de ma fenêtre qui fixe mes paramètres d'image mais les valeurs Button, Shift, X et Y je ne vois pas comment les incrémenter.De plus que définis-tu par Button et Shift?
Merci pour ton aide.

Eleasias
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
21 mars 2008 à 10:39
c'est pas a definir ou autre... MouseMove est l'un des evenement standard.

quel est ton cadre exact de travail (est-ce bien du VB6, j'en doute)
0
Eleasias Messages postés 36 Date d'inscription mardi 18 mars 2008 Statut Membre Dernière intervention 31 mars 2008
21 mars 2008 à 10:49
Oui je travail sur Microsoft Visual Basic 6.3, mais je suis débutant et je ne connais pas grand chose.
Tu penses qu'avec le code que tu m'as donné avant, en tant que macro privée, me permet d'avoir ma "croix géante".

Eleasias
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
21 mars 2008 à 10:55
oui...

oublie le mot "macro" dans le cadre de VB6, ca prete a confusion.

"tu penses qu'avec...." fais le test ^^ (fonctionne impec chez moi...)
bien sur, faut avoir ajouté deux controles Line sur ta form et les avoir bien placés (a voir dans le Form_Resize)
0
Eleasias Messages postés 36 Date d'inscription mardi 18 mars 2008 Statut Membre Dernière intervention 31 mars 2008
21 mars 2008 à 11:10
Je suis vraiment désolé mais je ne connais pas tout ca et quand je vais voir ce qu'est "Resize" l'aide me dit que ca s'applique à des cellules. De plus je n'ai jamais utilisé les contrôles Line et je ne vois pas comment ça marche.

Eleasias
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
21 mars 2008 à 11:19
....
c'est du VBA que tu fais, pas du VB6 !

comme quoi, c'est important, dès le départ, où se trouve ton image ?
0
Eleasias Messages postés 36 Date d'inscription mardi 18 mars 2008 Statut Membre Dernière intervention 31 mars 2008
21 mars 2008 à 13:42
Excuse moi je ne connais pas la différence je t'ai juste donné le nom de mon logiciel (j'espère ne pas être trop embètant mais j'ai eu des cours que très sommaires sur VBA).

En fait j'ai une UserForm1 où je fais "ouvrir" un fichier grâce au chemin d'accès et qui m'emmène vers une autre userform2.
La userform2 contient un cadre image, et mon image est  chargée et redimensionnée au format du cadre image. Mon image est un scan d'un graphe, c'est pourquoi j'ai besoin de cet outil.

Eleasias
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
21 mars 2008 à 14:34
pas très joli visuellement, mais a voir:


Private Type POINT
x As Long
y As Long
End Type

Private Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type

Private Declare Function GetClientRect Lib "user32.dll" (ByVal hwnd As Long, ByRef lpRect As RECT) As Long
Private Declare Function GetCursorPos Lib "user32.dll" (ByRef lpPoint As POINT) As Long
Private Declare Function GetDC Lib "user32.dll" (ByVal hwnd As Long) As Long
Private Declare Function GetForegroundWindow Lib "user32.dll" () As Long
Private Declare Function LineTo Lib "gdi32.dll" (ByVal hDc As Long, ByVal x As Long, ByVal y As Long) As Long
Private Declare Function MoveToEx Lib "gdi32.dll" (ByVal hDc As Long, ByVal x As Long, ByVal y As Long, ByRef lpPoint As Any) As Long
Private Declare Function ReleaseDC Lib "user32.dll" (ByVal hwnd As Long, ByVal hDc As Long) As Long
Private Declare Function ScreenToClient Lib "user32.dll" (ByVal hwnd As Long, ByRef lpPoint As POINT) As Long

Private Sub Image1_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal x As Single, ByVal y As Single)
Dim hwnd As Long
Dim hDc As Long
Dim tPt As POINT
Dim tR As RECT
hwnd = GetForegroundWindow
GetClientRect hwnd, tR
GetCursorPos tPt
ScreenToClient hwnd, tPt

Me.Repaint

hDc = GetDC(hwnd)
MoveToEx hDc, 0, tPt.y, ByVal 0&
LineTo hDc, tR.Right, tPt.y
MoveToEx hDc, tPt.x, 0, ByVal 0&
LineTo hDc, tPt.x, tR.Bottom

ReleaseDC hwnd, hDc
End Sub
0
Eleasias Messages postés 36 Date d'inscription mardi 18 mars 2008 Statut Membre Dernière intervention 31 mars 2008
21 mars 2008 à 14:55
Merci beaucoup.
Je vois le travail que ça t'a donné.
Je ne sais pas si tu l'as testé mais le fait que l'image "clignote" quand je bouge mon curseur vient du fait que le PC manque de ressource??

Eleasias
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
21 mars 2008 à 15:04
testé, bien sur, je fais pas tout de tête ^^

le Me.Repaint cause le clignottement
tu noteras mon "pas très joli visuellement, mais a voir"

tu peux sans doute faire de fausses lignes, en ajoutant des controles Image pour jouer ce role. Ainsi, tu pourras utiliser le code de ce matin :

Private Sub UserForm_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
Line1.Left = X
Line2.Top = Y
End Sub
0
Rejoignez-nous