Mouse speed and weight : retour de force virtuel !

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

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.