Clipcursor sous vb 2008 [Résolu]

Messages postés
44
Date d'inscription
jeudi 5 janvier 2006
Dernière intervention
22 janvier 2011
- 22 juil. 2008 à 22:35 - Dernière réponse :
Messages postés
44
Date d'inscription
jeudi 5 janvier 2006
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
Afficher la suite 

Votre réponse

11 réponses

Meilleure réponse
Messages postés
44
Date d'inscription
jeudi 5 janvier 2006
Dernière intervention
22 janvier 2011
- 22 juil. 2008 à 22:44
3
Merci
PS:  gillardg, peut être que cette fois tu pourras faire quelque chose pour moi!  :-)

Merci aldrac 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 87 internautes ce mois-ci

Commenter la réponse de aldrac
Meilleure réponse
Messages postés
3181
Date d'inscription
dimanche 15 février 2004
Dernière intervention
9 avril 2017
- 22 juil. 2008 à 23:24
3
Merci
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

Merci Charles Racaud 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 87 internautes ce mois-ci

Commenter la réponse de Charles Racaud
Meilleure réponse
Messages postés
3288
Date d'inscription
jeudi 3 avril 2008
Dernière intervention
14 septembre 2014
- 23 juil. 2008 à 00:04
3
Merci
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>

Merci gillardg 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 87 internautes ce mois-ci

Commenter la réponse de gillardg
Meilleure réponse
Messages postés
14299
Date d'inscription
vendredi 14 mars 2003
Dernière intervention
16 novembre 2018
- 23 juil. 2008 à 09:38
3
Merci
Bonjour,

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

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

Merci NHenry 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 87 internautes ce mois-ci

Commenter la réponse de NHenry
Meilleure réponse
Messages postés
3288
Date d'inscription
jeudi 3 avril 2008
Dernière intervention
14 septembre 2014
- 23 juil. 2008 à 10:34
3
Merci
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>

Merci gillardg 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 87 internautes ce mois-ci

Commenter la réponse de gillardg
Meilleure réponse
Messages postés
14299
Date d'inscription
vendredi 14 mars 2003
Dernière intervention
16 novembre 2018
- 23 juil. 2008 à 10:51
3
Merci
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 ? ;)

Merci NHenry 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 87 internautes ce mois-ci

Commenter la réponse de NHenry
Meilleure réponse
Messages postés
3288
Date d'inscription
jeudi 3 avril 2008
Dernière intervention
14 septembre 2014
- 23 juil. 2008 à 10:57
3
Merci
exact NHenry ,j'avais pas testé

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

/B>

Merci gillardg 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 87 internautes ce mois-ci

Commenter la réponse de gillardg
Meilleure réponse
Messages postés
3288
Date d'inscription
jeudi 3 avril 2008
Dernière intervention
14 septembre 2014
- 23 juil. 2008 à 11:08
3
Merci
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>

Merci gillardg 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 87 internautes ce mois-ci

Commenter la réponse de gillardg
Meilleure réponse
Messages postés
3288
Date d'inscription
jeudi 3 avril 2008
Dernière intervention
14 septembre 2014
- 23 juil. 2008 à 11:12
3
Merci
' 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>

Merci gillardg 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 87 internautes ce mois-ci

Commenter la réponse de gillardg
Meilleure réponse
Messages postés
44
Date d'inscription
jeudi 5 janvier 2006
Dernière intervention
22 janvier 2011
- 23 juil. 2008 à 17:20
3
Merci
OK!!
Je vous remercie tous beaucoup je vais tester tout ça!

Merci aldrac 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 87 internautes ce mois-ci

Commenter la réponse de aldrac
Meilleure réponse
Messages postés
44
Date d'inscription
jeudi 5 janvier 2006
Dernière intervention
22 janvier 2011
- 23 juil. 2008 à 19:59
3
Merci
Alors la!! impeccable ça fonctionne très bien , je vous remercie tous,et spécialement gillardg.
Merci beaucoup.

Merci aldrac 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 87 internautes ce mois-ci

Commenter la réponse de aldrac

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.