Récupérer objet pointé

Résolu
swan94 Messages postés 254 Date d'inscription jeudi 29 juillet 2004 Statut Membre Dernière intervention 2 avril 2010 - 2 juil. 2006 à 23:14
swan94 Messages postés 254 Date d'inscription jeudi 29 juillet 2004 Statut Membre Dernière intervention 2 avril 2010 - 5 juil. 2006 à 23:20
salut à tous,

j'aurai besoin de récupérer le nom de l'objet sur lequel ppointe le curseur de l'utilisateur dans mon appli (VB.Net). Ces objets sont sous forme de petites icones.

Merci d'avance pour votre aide.

Swan94

15 réponses

Utilisateur anonyme
4 juil. 2006 à 22:58
Donc, on créé un tableau qui comprends les groupbox pour y avoir plous facilement accés.
Et quand on crée la groupbox, on lui ajoute le déplacement.




  
Private
GroupBoxs
As

New
System.Collections.Generic.List(
Of
System.Windows.Forms.GroupBox)()

  
Private

Sub
AddGroupBox()

    
Dim
nvxbtn
As

New
GroupBox

    
'on definie les proprietés du nouveaux GroupBox :

    
'----------------------------------------------------

    nvxbtn.Name =
"NewButton"
+ (GroupBoxs.Count + 1).ToString()
'defini le nom du GroupBox

    nvxbtn.Text =
"NewButton"
+ (GroupBoxs.Count + 1).ToString()
'defini le text du GroupBox

    nvxbtn.Width = 100
'on definit la taille horizontale du GroupBox

    nvxbtn.Height = 20
'on definit la taille verticale du GroupBox

    nvxbtn.Top = GroupBoxs.Count * nvxbtn.Height
'on multiplie le compteur par la proprieté Height du boutton pour definir la position verticale et que les GroupBox ne soit pas superposés

    nvxbtn.Left = 0
'je met et garde tjrs la valeur à 0 pour aligner horizontalement les GroupBox

    nvxbtn.BringToFront()

    
'-----------------------------------------------------

    Controls.Add(nvxbtn)
' Ajoute le controle à la collection

  
 Me.picFond.SendToBack()

    
AddHandler
nvxbtn.Click,
AddressOf
nvbtnHandler_Click
' ajoute l'evenement myButtonHandler_Click au controle

    
Call
AddUserMoveControl(nvxbtn)

    GroupBoxs.Add(nvxbtn)

    
'nbrbtn += 1 'on incremente le compteur de 1

    
'// Plus la peine d'incrémenter, on récupére avec GroupBoxs.Count

  
End

Sub

  
Private

Sub
nvbtnHandler_Click(
ByVal
Sender
As

Object
,
ByVal
Args
As
System.EventArgs)

  
End

Sub

#
Region

"<< Gestion déplacement des GroupBox >>"

  
Private

Declare

Function
ReleaseCapture
Lib

"user32"
()
As

Integer

  
Private

Declare

Function
SendMessage
Lib

"user32"

Alias

"SendMessageA"
(
ByVal
hwnd
As

Integer
,
ByVal
wMsg
As

Integer
,
ByVal
wParam
As

Integer
,
ByRef
lParam
As

Integer
)
As

Integer

  
Private

Const
HTCAPTION
As

Integer
= 2

  
Private

Const
WM_NCLBUTTONDOWN
As

Integer
= &HA1S

  
Private

Sub
UserMoveControl(
ByVal
Sender
As

Object
,
ByVal
Args
As
System.Windows.Forms.MouseEventArgs)

    
If
Args.Button = Windows.Forms.MouseButtons.Left
Then

      
Dim
Ctrl
As
System.Windows.Forms.Control =
CType
(Sender, System.Windows.Forms.Control)

      ReleaseCapture()

      SendMessage(Ctrl.Handle.ToInt32(), WM_NCLBUTTONDOWN, HTCAPTION, 0)

    
End

If

  
End

Sub

  
Private

Sub
AddUserMoveControl(
ByVal
Control
As
System.Windows.Forms.Control)

    
AddHandler
Control.MouseDown,
AddressOf
UserMoveControl

  
End

Sub

  
Private

Sub
RemoveUserMoveControl(
ByVal
Control
As
System.Windows.Forms.Control)

    
RemoveHandler
Control.MouseDown,
AddressOf
UserMoveControl

  
End

Sub

#
End

Region






Kenji

Merci de lire le règlement (vivement conseillé voir obligatoire).

/FONT>
3
Utilisateur anonyme
3 juil. 2006 à 00:22
Salut,

On utilise la méthode GetChildAtPoint de la form:



Dim
ClientFormLocation
As
Point =
Me
.PointToScreen(
New
System.Drawing.Point(0, 0))

Dim
FormMouseLocation
As
Point =
New
System.Drawing.Point(System.Windows.Forms.Control.MousePosition.X - ClientFormLocation.X, System.Windows.Forms.Control.MousePosition.Y - ClientFormLocation.Y)

Dim
ControlUnderMouse
As
System.Windows.Forms.Control =
MyBase
.GetChildAtPoint(FormMouseLocation, GetChildAtPointSkip.None)

If

Not
ControlUnderMouse
Is

Nothing

Then

  [...]

End

If






Kenji

Merci de lire le règlement (vivement conseillé voir obligatoire).

/FONT>
0
swan94 Messages postés 254 Date d'inscription jeudi 29 juillet 2004 Statut Membre Dernière intervention 2 avril 2010
3 juil. 2006 à 12:09
je te remercie pour ta réponse rapide.

En fait j'ai besoin que la personne puisse déplacer ces ojet à l'emplacement souhaité sur l'écran. Donc j'avais pensé utiliser le code que tu m'as donné puis faire une fonction qui gère le déplacement mais je ne sais pas trop comment m'y prendre.

merci

Swan94
0
Utilisateur anonyme
3 juil. 2006 à 12:21
Salut,

Tu va avoir du mal a y arriver comme ca.
Utilise plutot les APIs:



Private

Declare

Function
ReleaseCapture
Lib

"user32"
()
As

Integer

Private

Declare

Function
SendMessage
Lib

"user32"

Alias

"SendMessageA"
(
ByVal
hwnd
As

Integer
,
ByVal
wMsg
As

Integer
,
ByVal
wParam
As

Integer
,
ByRef
lParam
As

Integer
)
As

Integer

Private

Const
HTCAPTION
As

Integer
= 2

Private

Const
WM_NCLBUTTONDOWN
As

Integer
= &HA1S

Private

Sub
UserMoveControl(
ByVal
Sender
As

Object
,
ByVal
Args
As
System.Windows.Forms.MouseEventArgs)

  
If
Args.Button = Windows.Forms.MouseButtons.Left
Then

    
Dim
Ctrl
As
System.Windows.Forms.Control =
CType
(Sender, System.Windows.Forms.Control)

    ReleaseCapture()

    SendMessage(Ctrl.Handle.ToInt32(), WM_NCLBUTTONDOWN, HTCAPTION, 0)

  
End

If

End

Sub

Private

Sub
AddUserMoveControl(
ByVal
Control
As
System.Windows.Forms.Control)

  
AddHandler
Control.MouseDown,
AddressOf
UserMoveControl

End

Sub

Private

Sub
RemoveUserMoveControl(
ByVal
Control
As
System.Windows.Forms.Control)

  
RemoveHandler
Control.MouseDown,
AddressOf
UserMoveControl

End

Sub

Private

Sub
Form1_Load(
ByVal
sender
As
System.Object,
ByVal
e
As
System.EventArgs)
Handles

MyBase
.Load

  
Call
AddUserMoveControl(UnDeTesControl)

  
Call
AddUserMoveControl(UnAutreDeTesControl)

End

Sub






Kenji

Merci de lire le règlement (vivement conseillé voir obligatoire).

/FONT>
0

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

Posez votre question
swan94 Messages postés 254 Date d'inscription jeudi 29 juillet 2004 Statut Membre Dernière intervention 2 avril 2010
3 juil. 2006 à 12:35
Sérieux, t'es vraiment bon mais le problème (le dernier j'espère) c'est que les objets je ne les connais pas à la base (l'utilisateur pourra lui-même en créer) donc les noms je ne les ai pas

merci pour ta rapidité.

Swan94
0
Utilisateur anonyme
3 juil. 2006 à 12:39
Ben, alors, c'est au moment ou il va les créer, il faut que tu les range dans un tableau, et que tu les initialise au déplacement.
(T'utilise vb2003 ou vb2005 ?)




Kenji

Merci de lire le règlement (vivement conseillé voir obligatoire).
/FONT>
0
swan94 Messages postés 254 Date d'inscription jeudi 29 juillet 2004 Statut Membre Dernière intervention 2 avril 2010
3 juil. 2006 à 12:40
vb2003 pourquoi ?

Swan94
0
Utilisateur anonyme
3 juil. 2006 à 13:11
Simplement pour savoir. Y'a pas mal de fonctions qui existe dans vs2005 et pas dans .net2003.

De quel manière ajoute tu les contrôles ?




Kenji

Merci de lire le règlement (vivement conseillé voir obligatoire).
/FONT>
0
swan94 Messages postés 254 Date d'inscription jeudi 29 juillet 2004 Statut Membre Dernière intervention 2 avril 2010
3 juil. 2006 à 14:09
Pour le moment je sais pas mais ce sera des groupboxs

merci

Swan94
0
swan94 Messages postés 254 Date d'inscription jeudi 29 juillet 2004 Statut Membre Dernière intervention 2 avril 2010
3 juil. 2006 à 19:16
Comment ferais tu toi ?

Swan94
0
Utilisateur anonyme
3 juil. 2006 à 20:04
Je sais pas, ca dépend de à quoi servent ces objets, comment on dois les ajouter, si on dois pouvoir les supprimer, si il faut leur attribuer des événement, pourvoir conaitre leurs porpriétés ...




Kenji

Merci de lire le règlement (vivement conseillé voir obligatoire).
/FONT>
0
swan94 Messages postés 254 Date d'inscription jeudi 29 juillet 2004 Statut Membre Dernière intervention 2 avril 2010
4 juil. 2006 à 22:36
Salut c'est bon je suis passé sur la version 2005.
J'ai trouvé comment les ajouter :
      
         Dim nvxbtn As New GroupBox
        'on definie les proprietés du nouveaux GroupBox :
        '----------------------------------------------------
        nvxbtn.Name = "NewButton" + (nbrbtn + 1).ToString() 'defini le nom du GroupBox
        nvxbtn.Text = "NewButton" + (nbrbtn + 1).ToString() 'defini le text du GroupBox
        nvxbtn.Width = 100 'on definit la taille horizontale du GroupBox
        nvxbtn.Height = 20 'on definit la taille verticale du GroupBox
        nvxbtn.Top = nbrbtn * nvxbtn.Height 'on multiplie le compteur par la proprieté Height du boutton pour definir la position verticale et que les GroupBox ne soit pas superposés
        nvxbtn.Left = 0 'je met et garde tjrs la valeur à 0 pour aligner horizontalement les GroupBox
        nvxbtn.BringToFront()

        '-----------------------------------------------------
        Controls.Add(nvxbtn)  ' Ajoute le controle à la collection
        Me.picFond.SendToBack()
        AddHandler nvxbtn.Click, AddressOf nvbtnHandler_Click  ' ajoute l'evenement myButtonHandler_Click au controle
        nbrbtn += 1 'on incremente le compteur de 1

Maintenant je n'arrive pas  à déplacer les groupbox puisque les controles sont ajoutés dynamiquement et que ta solution marche à condition que l'on connaisse les controles.

Merci beaucoup de m'aider.

Swan94
0
Utilisateur anonyme
4 juil. 2006 à 22:44
C'est quoi un GroupBox ?



Kenji

Merci de lire le règlement (vivement conseillé voir obligatoire).
/FONT>
0
Utilisateur anonyme
4 juil. 2006 à 22:46
Ha oui, désolé, c'est une frame.
J'en utilise jamais, c'est pour ca que je savais pas.
Désolé pour la question stupide.



Kenji

Merci de lire le règlement (vivement conseillé voir obligatoire).
/FONT>
0
swan94 Messages postés 254 Date d'inscription jeudi 29 juillet 2004 Statut Membre Dernière intervention 2 avril 2010
5 juil. 2006 à 23:20
Merci beaucoup pour ton aide précieuse.

Swan94
0
Rejoignez-nous