Clipcursor sous vb 2008

Résolu
aldrac Messages postés 44 Date d'inscription jeudi 5 janvier 2006 Statut Membre Dernière intervention 22 janvier 2011 - 22 juil. 2008 à 22:35
aldrac Messages postés 44 Date d'inscription jeudi 5 janvier 2006 Statut Membre Dernière intervention 22 janvier 2011 - 23 juil. 2008 à 19:59
Bonjour, je débute pardonné moi!
j'ai un petit prog qui tourne très bien en vb6,mais je voudrais le rajouter a mon projet actuel qui lui est sous vb 2008.Mais voila ça ne marche pas comme ça!!
J'obtient trop d'erreurs lors de la mise a niveau,est comme je suis un peu beaucoup débutant, j'essay tant bien que mal des corrections mais ça marche pas! quelqu'un peut-il m'aider a traduire ça en code pour vb 2008?
Ce code a pour fonction de limiter les déplacements de la souris a mon form.

 Option Explicit

      Private Type RECT
         left As Integer
         top As Integer
         right As Integer
         bottom As Integer
      End Type

      Private Type POINT
         x As Long
         y As Long
      End Type

      Private Declare Sub ClipCursor Lib "user32" (lpRect As Any)
      Private Declare Sub GetClientRect Lib "user32" _
                                            (ByVal hWnd As Long, _
                                             lpRect As RECT)
      Private Declare Sub ClientToScreen Lib "user32" _
                                            (ByVal hWnd As Long, _
                                             lpPoint As POINT)
      Private Declare Sub OffsetRect Lib "user32" (lpRect As RECT, _
                                          ByVal x As Long, _
                                          ByVal y As Long)

      Private Sub Form_Load()
         Command1.Caption = "Limit Cursor Movement"
         Command2.Caption = "Release Limit"
      End Sub

      Private Sub Command1_Click()
      'Limits the Cursor movement to within the form.
         Dim client As RECT
         Dim upperleft As POINT

         GetClientRect Me.hWnd, client
         upperleft.x = client.left
         upperleft.y = client.top
         ClientToScreen Me.hWnd, upperleft
         OffsetRect client, upperleft.x, upperleft.y
         ClipCursor client
      End Sub

      Private Sub Command2_Click()
      'Releases the cursor limits
         ClipCursor ByVal 0&
      End Sub

      Private Sub Form_Unload(Cancel As Integer)
      'Releases the cursor limits
         ClipCursor ByVal 0&
      End Sub

11 réponses

aldrac Messages postés 44 Date d'inscription jeudi 5 janvier 2006 Statut Membre Dernière intervention 22 janvier 2011 1
22 juil. 2008 à 22:44
PS:  gillardg, peut être que cette fois tu pourras faire quelque chose pour moi!  :-)
3
Utilisateur anonyme
22 juil. 2008 à 23:24
Salut,

Je te donne les api, de préférence utilise les fonctions du framework que j'ai mis en commentaire.






<System.Runtime.InteropServices.DllImport("user32")>
 _
Private Shared Function ClipCursor(ByRef lpRect As Rectangle) As Boolean
End Function

<System.Runtime.InteropServices.DllImport("user32")> _
Private Shared Function GetClientRect(ByVal hWnd As IntPtr, ByRef lpRect As Rectangle) As Boolean
End Function



' Utilise plutôt System.Windows.Forms.Control.ClientRectangle







<System.Runtime.InteropServices.DllImport("user32")>
 _
Private Shared Function ClientToScreen(ByVal hWnd As IntPtr, ByVal lpPoint As Point) As Boolean
End Function



' Utilise plutôt System.Windows.Forms.Control.RectangleToScreen


http://msdn.microsoft.com/en-us/library/system.windows.forms.control.rectangletoscreen.aspx







<System.Runtime.InteropServices.DllImport("user32")>
 _
Private Shared Function OffsetRect(ByVal lpRect As Rectangle, ByVal dx As Int16, ByVal dy As Integer) As Boolean
End Function



' Utilise plutôt System.Drawing.Rectangle.Inflate


http://msdn.microsoft.com/en-us/library/xs6dsacz.aspx


<!-- Coloration syntaxique vb/vba/vb.net : http://charles.racaud.free.fr/code-syntaxing/ -->
Coloration syntaxique vb/vba/vb.net





__________
  Kenji
3
gillardg Messages postés 3275 Date d'inscription jeudi 3 avril 2008 Statut Membre Dernière intervention 14 septembre 2014 2
23 juil. 2008 à 00:04
Public








Class

Form1



'''


<summary>








''' c'est Command1 click








''' c'est un bouton qui s'appele bouton1








'''


</summary>








'''












'''












'''


<remarks></remarks>








Private





Sub

Button1_Click(


ByVal

sender


As

System.Object,


ByVal

e


As

System.EventArgs)


Handles

Button1.Click

Windows.Forms.Cursor.Clip =



New

Rectangle(


Me

.Location,


Me

.Size) 



End





Sub





 








'''


<summary>








''' ça c'est formunload








'''


</summary>








'''












'''












'''


<remarks></remarks>








Private





Sub

Form1_FormClosing(


ByVal

sender


As





Object

,


ByVal

e


As

System.Windows.Forms.FormClosingEventArgs)


Handles





Me

.FormClosing



'ben on s'en fout le cursor il sera libre si la fenètre n'existe plus








End





Sub








'''


<summary>








''' c'est formload()








'''


</summary>








'''












'''












'''


<remarks></remarks>








Private





Sub

Form1_Load(


ByVal

sender


As

System.Object,


ByVal

e


As

System.EventArgs)


Handles





MyBase

.LoadButton1.Text =



"Limit Cursor Movement"


Button2.Text =





"Release Limit"








End





Sub








'''


<summary>








''' c'est Command2 click








''' c'est un bouton qui s'appele bouton1








'''


</summary>








'''












'''












'''


<remarks></remarks>








Private





Sub

Button2_Click(


ByVal

sender


As

System.Object,


ByVal

e


As

System.EventArgs)


Handles

Button2.Click



'Releases the cursor limits


Windows.Forms.Cursor.Clip = Screen.PrimaryScreen.WorkingArea








End





SubEnd







Class









Il n'y a que les gens qui ne font rien, qui ne font pas d'erreur



/B>
3
NHenry Messages postés 15112 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 13 avril 2024 159
23 juil. 2008 à 09:38
Bonjour,

[auteur/GILLARDG/1360034.aspx gillardg]>
Windows.Forms.Cursor.Clip = Screen.PrimaryScreen.WorkingArea

Et pour ceux qui ont plusieurs écrans (j'en ai 2) ?

3

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

Posez votre question
gillardg Messages postés 3275 Date d'inscription jeudi 3 avril 2008 Statut Membre Dernière intervention 14 septembre 2014 2
23 juil. 2008 à 10:34
grrrr ils ne sont jamais content
puisque tu as plusieurs écrans (quelle idée swiss déjà perdu avec un seul)
donne nous le code pour les compter ( adaptation de ce code)

quand tu sors du programme ou que tu le minimize ça release le clip


donc suffit de faire :




Me

.Hide()





Me

.WindowState = FormWindowState.Minimized





' Me.Refresh()










Me

.WindowState = FormWindowState.Normal



Me

.Show()

et voila ton curseur de nouveau libre de se promener sur tes 26 écrans
Il n'y a que les gens qui ne font rien, qui ne font pas d'erreur

/B>
3
NHenry Messages postés 15112 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 13 avril 2024 159
23 juil. 2008 à 10:51
Bonjour,

De tête :
Screen.AllScreens.Count

Ensuite, je pense qu'il faut juste concaténer les Rectangles des Areas des écrans.
Au passage, si tu utilises Workingarea, il n'y a pas un risque de ne pouvoir accéder à la barre des tâches ? ;)

3
gillardg Messages postés 3275 Date d'inscription jeudi 3 avril 2008 Statut Membre Dernière intervention 14 septembre 2014 2
23 juil. 2008 à 10:57
exact NHenry ,j'avais pas testé

Il n'y a que les gens qui ne font rien, qui ne font pas d'erreur

/B>
3
gillardg Messages postés 3275 Date d'inscription jeudi 3 avril 2008 Statut Membre Dernière intervention 14 septembre 2014 2
23 juil. 2008 à 11:08
Windows.Forms.Cursor.Clip = Screen.PrimaryScreen.Bounds













Il n'y a que les gens qui ne font rien, qui ne font pas d'erreur



/B>
3
gillardg Messages postés 3275 Date d'inscription jeudi 3 avril 2008 Statut Membre Dernière intervention 14 septembre 2014 2
23 juil. 2008 à 11:12
' la totale
















Private





Sub

Button1_Click(


ByVal

sender


As

System.Object,


ByVal

e


As

System.EventArgs)


Handles

Button1.Click



'empecher le curseur de la souris de sortir de la fenetre


Windows.Forms.Cursor.Clip =





New

Rectangle(


Me

.Location,


Me

.Size)



End





Sub








Private





Sub

Form1_FormClosing(


ByVal

sender


As





Object

,


ByVal

e


As

System.Windows.Forms.FormClosingEventArgs)


Handles





Me

.FormClosing



'ben on s'en fout le cursor il sera libre si la fenètre n'existe plus








End





Sub











Private





Sub

Form1_Load(


ByVal

sender


As

System.Object,


ByVal

e


As

System.EventArgs)


Handles





MyBase

.LoadButton1.Text =



"Limit Cursor Movement"


Button2.Text =





"Release Limit to primary screen"


Button3.Text =





"release to working area"


Button4.Text =





"release to all screenS"








End





Sub











Private





Sub

Button2_Click(


ByVal

sender


As

System.Object,


ByVal

e


As

System.EventArgs)


Handles

Button2.Click



'Releases the cursor limits


Windows.Forms.Cursor.Clip = Screen.PrimaryScreen.Bounds








'on couvre la taskbar








End





Sub








Private





Sub

Button3_Click(


ByVal

sender


As

System.Object,


ByVal

e


As

System.EventArgs)


Handles

Button3.ClickWindows.Forms.Cursor.Clip = Screen.PrimaryScreen.WorkingArea



'sans la taskbar








End





Sub








Private





Sub

Button4_Click(


ByVal

sender


As

System.Object,


ByVal

e


As

System.EventArgs)


Handles

Button4.Click



'on relache tout








Me

.Hide()



Me

.WindowState = FormWindowState.Minimized



Me

.WindowState = FormWindowState.Normal



Me

.Show()



End





Sub









Il n'y a que les gens qui ne font rien, qui ne font pas d'erreur



/B>
3
aldrac Messages postés 44 Date d'inscription jeudi 5 janvier 2006 Statut Membre Dernière intervention 22 janvier 2011 1
23 juil. 2008 à 17:20
OK!!
Je vous remercie tous beaucoup je vais tester tout ça!
3
aldrac Messages postés 44 Date d'inscription jeudi 5 janvier 2006 Statut Membre Dernière intervention 22 janvier 2011 1
23 juil. 2008 à 19:59
Alors la!! impeccable ça fonctionne très bien , je vous remercie tous,et spécialement gillardg.
Merci beaucoup.
3
Rejoignez-nous