Mouse speed and weight : retour de force virtuel !

Soyez le premier à donner votre avis sur cette source.

Vue 4 765 fois - Téléchargée 418 fois

Description

Ce code vous permet de ressentir le poids des objets via la souris (ou un trackpad), une sorte de "retour de force" naturel si vous préférez ;)

En réalité, il s'agit d'une classe permettant de régler et manipuler la "vitesse" (ratio vitesse/accélération) de la souris de Windows (1 à 20).
Pour se faire, on utilise l'API win32 "SystemParametersInfo" avec "SPI_GetMouseSpeed" comme paramètre.

En s'initialisant, la classe récupère le paramètre actuel de vitesse de la souris de l'utilisateur et remet tout en place en se terminant via la méthode "Restaure" (que vous pouvez également appeler indépendamment !).

La seule propriété est "Speed" (0 à 20) vous permettant de définir ou de récupérer ce réglage Windows.

Pour initialiser cette classe dans vos programme : Private objMouseSpeed As New clsMouseSpeed

Le programme en soit n'est qu'un exemple presque pas commenté qui permet de déplacer des balles qui ont chacune un poids.
Le principe est simple : cliquer sur une balle donne à votre souris une vitesse (qui est en relation avec le poids de la balle en question).
Relâcher le bouton remet les paramètres de la souris comme avant.

Il est livré avec l'exécutable et sa sources, mais également avec mon contrôle ActivX "PaintedBalls.ocx" sans son code (que vous pouvez retrouver sur ce site).

Source / Exemple :


Option Explicit

Private Declare Function SystemParametersInfo Lib "user32" _
Alias "SystemParametersInfoA" (ByVal uAction As Long, _
                               ByVal uParam As Long, _
                               ByRef lpvParam As Any, _
                               ByVal fuWinIni As Long) As Long
Private Const SPI_GETMOUSESPEED = 112
Private Const SPI_SETMOUSESPEED = 113
Private Const SPIF_UPDATEINIFILE = &H1
Private Const SPIF_SENDCHANGE = &H2

Private lngMouseSpeed_BAK As Long
Private lngMouseSpeed_NOW As Long

Private Sub Class_Initialize()
    SystemParametersInfo SPI_GETMOUSESPEED, 0, lngMouseSpeed_BAK, 0
    lngMouseSpeed_NOW = lngMouseSpeed_BAK
End Sub

Private Sub Class_Terminate()
    Call Restore
End Sub

Public Sub Restore()
    SystemParametersInfo SPI_SETMOUSESPEED, 0, ByVal lngMouseSpeed_BAK, SPIF_UPDATEINIFILE Or SPIF_SENDCHANGE
End Sub

Property Get Speed() As Byte
    Speed = CByte(lngMouseSpeed_NOW)
End Property

Property Let Speed(ByVal MouseSpeed As Byte)
    If MouseSpeed < 1 Then MouseSpeed = 1
    If MouseSpeed > 20 Then MouseSpeed = 20
    lngMouseSpeed_NOW = MouseSpeed
    SystemParametersInfo SPI_SETMOUSESPEED, 0, ByVal lngMouseSpeed_NOW, SPIF_UPDATEINIFILE Or SPIF_SENDCHANGE
End Property

Codes Sources

A voir également

Ajouter un commentaire Commentaires
Messages postés
1488
Date d'inscription
mercredi 5 février 2003
Statut
Membre
Dernière intervention
3 décembre 2007
22
Keski dit le vieux Renfield !?!!! Bien sûr que si que le speed "d'origine" est restauré ! Mais comme on fait mumuse avec un accès direct, il faut bien comprendre que la vitesse d'origine est celle en vigueur au moment de la création de l'instance. C'est donc cette valeur qui sera restaurée à la destruction de cette instance (ou à l'appel de la méthode). En réalité, cette classe n'est qu'une implémentation simplifiant l'utilisation de l'API et rien d'autre !

Ou alors, j'ai pas saisi toute la porté de ta remarque !???

OOMMEEDDAA3D : C'est parce qu'il faut compiler ton programme ;) Mais ce qui fait ralentir, c'est mon vieux contrôle ActiveX et surtout, la double fonction PaintPicture, l'essentiel n'étant pas là !
Messages postés
97
Date d'inscription
dimanche 24 avril 2005
Statut
Membre
Dernière intervention
3 septembre 2010

Sympa ... efficace avec les grosses boules, mais grosses "saccades" de déplacement sur les petites boules (du moins chez moi)
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
67
Si on lance l'application deux fois et qu'on ferme ces deux instances dans l'ordre ou on les a lancé, on ne restaure pas le speed d'origine (penser Singleton: http://www.vbfrance.com/codes/PARTAGE-VARIABLES_39615.aspx)

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.