Afficher sur une image dans userform un curseur en croix qui touche aux bords [Résolu]

Eleasias 36 Messages postés mardi 18 mars 2008Date d'inscription 31 mars 2008 Dernière intervention - 18 mars 2008 à 14:41 - Dernière réponse : Eleasias 36 Messages postés mardi 18 mars 2008Date d'inscription 31 mars 2008 Dernière intervention
- 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
Afficher la suite 

Votre réponse

28 réponses

Meilleure réponse
Renfield 17308 Messages postés mercredi 2 janvier 2002Date d'inscription 22 août 2018 Dernière intervention - 25 mars 2008 à 11:28
3
Merci
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

Merci Renfield 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 96 internautes ce mois-ci

Commenter la réponse de Renfield
Meilleure réponse
Renfield 17308 Messages postés mercredi 2 janvier 2002Date d'inscription 22 août 2018 Dernière intervention - 25 mars 2008 à 13:16
3
Merci
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

Merci Renfield 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 96 internautes ce mois-ci

Commenter la réponse de Renfield
cs_Exploreur 4824 Messages postés lundi 11 novembre 2002Date d'inscription 15 novembre 2016 Dernière intervention - 18 mars 2008 à 16:29
0
Merci
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
Commenter la réponse de cs_Exploreur
Eleasias 36 Messages postés mardi 18 mars 2008Date d'inscription 31 mars 2008 Dernière intervention - 19 mars 2008 à 08:15
0
Merci
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
Commenter la réponse de Eleasias
cs_Exploreur 4824 Messages postés lundi 11 novembre 2002Date d'inscription 15 novembre 2016 Dernière intervention - 19 mars 2008 à 08:33
0
Merci
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
Commenter la réponse de cs_Exploreur
Eleasias 36 Messages postés mardi 18 mars 2008Date d'inscription 31 mars 2008 Dernière intervention - 19 mars 2008 à 10:37
0
Merci
(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
Commenter la réponse de Eleasias
Eleasias 36 Messages postés mardi 18 mars 2008Date d'inscription 31 mars 2008 Dernière intervention - 20 mars 2008 à 15:11
0
Merci
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
Commenter la réponse de Eleasias
Renfield 17308 Messages postés mercredi 2 janvier 2002Date d'inscription 22 août 2018 Dernière intervention - 21 mars 2008 à 10:00
0
Merci
MousePointer a mettre en custom
ainsi, VB utilisera l'image MouseIcon comme curseur.
Commenter la réponse de Renfield
Eleasias 36 Messages postés mardi 18 mars 2008Date d'inscription 31 mars 2008 Dernière intervention - 21 mars 2008 à 10:13
0
Merci
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
Commenter la réponse de Eleasias
Renfield 17308 Messages postés mercredi 2 janvier 2002Date d'inscription 22 août 2018 Dernière intervention - 21 mars 2008 à 10:19
0
Merci
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
Commenter la réponse de Renfield
Eleasias 36 Messages postés mardi 18 mars 2008Date d'inscription 31 mars 2008 Dernière intervention - 21 mars 2008 à 10:27
0
Merci
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
Commenter la réponse de Eleasias
Renfield 17308 Messages postés mercredi 2 janvier 2002Date d'inscription 22 août 2018 Dernière intervention - 21 mars 2008 à 10:39
0
Merci
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)
Commenter la réponse de Renfield
Eleasias 36 Messages postés mardi 18 mars 2008Date d'inscription 31 mars 2008 Dernière intervention - 21 mars 2008 à 10:49
0
Merci
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
Commenter la réponse de Eleasias
Renfield 17308 Messages postés mercredi 2 janvier 2002Date d'inscription 22 août 2018 Dernière intervention - 21 mars 2008 à 10:55
0
Merci
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)
Commenter la réponse de Renfield
Eleasias 36 Messages postés mardi 18 mars 2008Date d'inscription 31 mars 2008 Dernière intervention - 21 mars 2008 à 11:10
0
Merci
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
Commenter la réponse de Eleasias
Renfield 17308 Messages postés mercredi 2 janvier 2002Date d'inscription 22 août 2018 Dernière intervention - 21 mars 2008 à 11:19
0
Merci
....
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 ?
Commenter la réponse de Renfield
Eleasias 36 Messages postés mardi 18 mars 2008Date d'inscription 31 mars 2008 Dernière intervention - 21 mars 2008 à 13:42
0
Merci
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
Commenter la réponse de Eleasias
Renfield 17308 Messages postés mercredi 2 janvier 2002Date d'inscription 22 août 2018 Dernière intervention - 21 mars 2008 à 14:34
0
Merci
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
Commenter la réponse de Renfield
Eleasias 36 Messages postés mardi 18 mars 2008Date d'inscription 31 mars 2008 Dernière intervention - 21 mars 2008 à 14:55
0
Merci
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
Commenter la réponse de Eleasias
Renfield 17308 Messages postés mercredi 2 janvier 2002Date d'inscription 22 août 2018 Dernière intervention - 21 mars 2008 à 15:04
0
Merci
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
Commenter la réponse de Renfield

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.