web-dev-qa-db-fra.com

remède pour un trackball sans molette de défilement?

Je pense acheter un trackball et mon option est le marbre Logitech trackman. Mais ensuite j'ai trouvé qu'il n'y avait pas de molette de défilement. Comment abordez-vous cela? Dois-je vraiment acheter une boule de commande avec molette de défilement? Je défile beaucoup en utilisant Facebook.

Je ne veux pas cliquer avec mon index et mon majeur, donc certaines souris à boule de commande ne fonctionneront pas pour moi, comme la Trackman Wheel.

28
lamwaiman1988

Si vous utilisez Windows, je vous conseillerais d'essayer AutoHotKey, d'autres utilisateurs ont déjà abordé le défilement avec la souris Marble (j'ai utilisé le script ci-dessous):

http://www.autohotkey.com/board/topic/4677-wheel-button-emulation-script/

La solution de Logitech fournie avec leurs pilotes est étrange: vous cliquez une fois pour activer le défilement multidirectionnel et cliquez à nouveau pour le désactiver. Vous ne pouvez pas tenir et faire défiler qui est ce que j'étais après. J'ai fini par désinstaller leur logiciel.

13
user1146719

J'ai le même trackball et la solution est très élégante: lorsque vous cliquez sur un bouton de votre choix, la balle elle-même devient une molette de défilement. J'ai choisi le gros bouton droit sur lequel j'appuie avec le petit doigt.

C'est très pratique et il ne faut que quelques jours pour s'habituer.

Vous constaterez rapidement que toute molette de défilement (sur une souris ou une boule de commande) est inutilisable. Croyez-moi, ça vaut le coup ;-)

Avantages:

  • Défilement 2D au lieu de 1D
  • défilement plus rapide et plus précis qu'une molette
  • plus confortable pour les longs scrolls (grâce à l'inertie de la balle). Parfait pour votre exemple facebook.

Je ne peux plus vivre sans.

Configurer cela sous n'importe quel système d'exploitation Linux n'est pas difficile. Il vous suffit de créer un fichier /etc/X11/xorg.conf (voir ma configuration ici: Configurer un trackball sous Linux sans éditer Xorg.conf )

Plus de détails peuvent être trouvés ici: https://help.ubuntu.com/community/Logitech_Marblemouse_USB

Sous Windows, je n'ai aucune expérience mais je pense qu'un outil de configuration est fourni avec le trackball.

9
ploum

Vous pouvez essayer la molette de défilement de la souris Marble, développée spécialement pour cette souris:

La molette de défilement Marble Mouse, ou tout simplement Marble Scroll, est un petit programme conçu pour simuler une molette de défilement sur toute boule de commande ou souris sans souris. Il a été spécialement conçu pour la souris Logitech Marble Mouse mais peut fonctionner avec n'importe quelle souris ou trackball standard. Il est conçu pour Windows 2000 et supérieur.

Marble Scroll remplace les fonctions Autoscroll et Universal Scroll de Logitech; ni bien imiter une vraie molette de défilement et les deux ont des limites et des défauts.

Marble Scroll fonctionne avec n'importe quelle souris ou boule de commande et ne nécessite pas l'installation des pilotes SetPoint ou MouseWare de Logitech.

Caractéristiques

  • Ajouter une molette de défilement à n'importe quelle souris avec plus de deux boutons
  • Compatibilité avec la plupart des applications prenant en charge une molette de défilement (pour tout type d'entrée)
  • Accélération réglable
  • Distance de défilement réglable (par "pas" - voir ci-dessous)
  • Défilement par paliers pour simuler une vraie molette de la souris
  • Sélecteur rapide en mode gaucher/droitier
  • Activer/désactiver rapidement en cliquant sur l'icône de la barre des tâches
  • Petite et légère sur les ressources système

Le site Web du produit semble en panne, mais voici une copie du texte du site sur Archive.org .

Un lien de téléchargement est ici .

8
harrymc

Il existe une alternative C++ simple à 100 lignes qui est assez similaire aux solutions AutoHotKey, c’est-à-dire

  • envoi d’événements de molette de défilement vertical/horizontal en déplaçant la boule de commande tout en maintenant l’un des boutons X et X enfoncé.
  • clic du milieu lorsque vous appuyez et relâchez un bouton X sans déplacer la boule de commande.

https://github.com/Seelge/TrackballScroll

Edit: Les versions plus récentes fournissent une icône systray, fonctionnent sous Windows 10 et sont basées sur C #.

6
Silpion

Voici le script AutoHotKey que j'utilise. Vous faites défiler en maintenant le petit bouton de gauche enfoncé et en faisant rouler la balle de haut en bas. Cependant, le fait de cliquer sur le petit bouton de gauche entraîne toujours le retour Il peut également faire défiler l'écran vers la gauche ou la droite, mais c'était trop sensible pour moi, donc c'est commenté ici (le bloc qui commence par ;timesX := Abs(movedx) / 4).

J'ai trouvé la version originale à http://www.autohotkey.com/board/topic/30816-simulate-scroll-wheel-using-right-mouse-button/ . J'ai posté ma version ici en tant qu'autreperson8923.

$*XButton1::
Hotkey, $*XButton1 Up, XButton1up, off
;KeyWait, XButton1, T0.4
;If ErrorLevel = 1
;{
   Hotkey, $*XButton1 Up, XButton1up, on
   MouseGetPos, ox, oy
   SetTimer, WatchTheMouse, 5
   movedx := 0
   movedy := 0
   pixelsMoved := 0
;   TrayTip, Scrolling started, Emulating scroll wheel
;}
;Else
;   Send {XButton1}
return

XButton1up:
Hotkey, $*XButton1 Up, XButton1up, off
SetTimer, WatchTheMouse, off
;TrayTip
If (pixelsMoved = 0)
{
    ;The mouse was not moved, send the click event
    ; (May want to make it PGUP or something)
    Send {XButton1}
    Send {XButton1Up}
}
return

WatchTheMouse:
MouseGetPos, nx, ny
movedx := movedx+nx-ox
movedy := movedy+ny-oy

pixelsMoved := pixelsMoved + Abs(nx-ox) + Abs(ny-oy)

;timesX := Abs(movedx) / 4
;ControlGetFocus, control, A
;Loop, %timesX%
;{
;    If (movedx > 0)
;    {
;        SendMessage, 0x114, 1, 0, %control%, A ; 0x114 is WM_HSCROLL
;        movedx := movedx - 4
;    }
;    Else
;    {
;        SendMessage, 0x114, 0, 0, %control%, A ; 0x114 is WM_HSCROLL
;        movedx := movedx + 4
;    }
;}

timesY := Abs(movedy) / 4
Loop, %timesY%
{
    If (movedy > 0)
    {
        Click WheelDown
        movedy := movedy - 4
    }
    Else
    {
        Click WheelUp
        movedy := movedy + 4
    }
}   

MouseMove ox, oy
return
4
user318097

C'est vraiment dommage que Logitech n'ait pas implémenté de simulation de molette de défilement. Leur pilote promet une fonctionnalité pour le faire, mais cela ne fonctionne pas pour toutes les applications, ce qui le rend tout à fait inutile. Ils étaient si près de créer la souris parfaite! : s

La seule solution que j'ai trouvée consiste à utiliser un script AutoHotkey . Avec lui, vous pouvez faire défiler les minuscules boutons gauche/droite. Cela fonctionne parfaitement, mais il est très compliqué de le configurer: vous devez d’abord apprendre les bases de AutoHotkey. Si vous décidez de le faire, voici mon script AutoHotkey. C'est une adaptation du script original de de Jerbo . Un simple clic commencera à défiler à un rythme normal, mais un double ou triple clic commencera à défiler plus rapidement.

; This script remaps the two small buttons on a Logitech Trackman® Marble® Mouse
; to act as scroll up and scroll down

global lastXButton1ClickTime := 0
global nrSubsequentXButton1Clicks := 0

ScrollTheWheel(direction, scrollKey)
{
    now := A_TickCount
    timeSinceLastClick := now - lastXButton1ClickTime 
    lastXButton1ClickTime := now
    if (timeSinceLastClick < 300)
    {
        nrSubsequentXButton1Clicks := nrSubsequentXButton1Clicks + 1
    }
    else
    {
        nrSubsequentXButton1Clicks := 1
    }        

    sleepingFraction := 5

    if (nrSubsequentXButton1Clicks <= 1)
        scrollSpeed := 30
    if (nrSubsequentXButton1Clicks == 2)
        scrollSpeed := 15
    if (nrSubsequentXButton1Clicks >= 3)
        scrollSpeed := 5

    timeSlept := scrollSpeed

    loop 
    {
        if (direction == 1) ; Scroll down
        {
            static downKeyState
            if (scrollKey == 0) 
                GetKeyState, downKeyState, XButton1, P
            else
                GetKeyState, downKeyState, PgDn, P

            if downKeyState = U ; The key has been released, so break out of the loop
               break

            if (timeSlept >= scrollSpeed)
            {
                Send {WheelDown}
                timeSlept = 0                
            }
        }
        else ; Scroll up
        {
            static upKeyState
            if (scrollKey == 0)
                GetKeyState, upKeyState, XButton2, P
            else
                GetKeyState, upKeyState, PgUp, P

            if upKeyState = U ; The key has been released, so break out of the loop
               break            

            if (timeSlept >= scrollSpeed)
            {
                Send {WheelUp}
                timeSlept = 0                
            }
        }   

        Sleep, sleepingFraction
        timeSlept := timeSlept + sleepingFraction
    }    
}

XButton2::
    ScrollTheWheel(0, 0)
    return
XButton1::
    ScrollTheWheel(1, 0)
    return
!PgUp::
    ScrollTheWheel(0, 1)
    return
!PgDn::
    ScrollTheWheel(1, 1)
    return
3
Dimitri C.

Je viens de recevoir une souris Logitech Marble et j'ai également eu le problème du défilement. J'ai donc fait ce script sur AutoHotKey. Le bouton X de gauche active le défilement, ce qui signifie que, tout en bas, vous pouvez faire défiler verticalement et horizontalement la balle et vous déplacer en avant et en arrière dans le navigateur à l'aide des boutons gauche et droit. Le bouton X de droite a la même action que le bouton du milieu.

Je suis sur Windows 7.

#SINGLEINSTANCE FORCE  
GLOBAL status := "basic"
GLOBAL cnt_x
GLOBAL cnt_y

XButton2::MButton

$*XButton1::
    status := "scroll"
    cnt_x := 0
    cnt_y := 0
    MOUSEGETPOS, st_x, st_y
    SETTIMER, _scroll, 30
RETURN

$*XButton1 UP::
    status := "basic"
    SETTIMER, _scroll, OFF
RETURN

_scroll:
    MOUSEGETPOS, cur_x, cur_y
    MOUSEMOVE, st_x, st_y

IF(abs(cur_x-st_x) > abs(cur_y-st_y)) {
    cnt_x := cnt_x + (cur_x-st_x)
    ControlGetFocus, control, A 
    IF (cnt_x > 7) {
        cnt := floor(cnt_x / 8)
        LOOP, %cnt% {
            SendMessage, 0x114, 0, 0, %control%, A
        }
        cnt_x := cnt_x - 8*floor(cnt_x / 8)
    } ELSE IF (cnt_x < -7) {
        cnt := -ceil(cnt_x / 8)
        LOOP, %cnt% {
            SendMessage, 0x114, 1, 0, %control%, A
        }
        cnt_x := cnt_x - 8*ceil(cnt_x / 8)
    }
} ELSE {
    IF (cur_y >= st_y) {
        cnt_y := cnt_y + (cur_y-st_y)**1.2
    } ELSE {
        cnt_y := cnt_y -(st_y-cur_y)**1.2
    }   
    IF (cnt_y > 7) {
        cnt := floor(cnt_y / 8)
        LOOP, %cnt% {
            CLICK WheelUp
        }
        cnt_y := cnt_y - 8*floor(cnt_y / 8)
    } ELSE IF (cnt_y < -7) {
        cnt := -ceil(cnt_y / 8)
        LOOP, %cnt% {
            CLICK WheelDown
        }
        cnt_y := cnt_y - 8*ceil(cnt_y / 8)
    }
}   
RETURN

$*LButton::
    IF (status = "basic") {
        CLICK DOWN Left
    } ELSE IF (status = "scroll") {
        SEND {Browser_Back}
    }
RETURN

$*LButton UP::
    IF (status = "basic") {
        CLICK UP Left
    }
RETURN

$*RButton::
    IF (status = "basic") {
        CLICK DOWN Right
    } ELSE IF (status = "scroll") {
        SEND {Browser_Forward}
    }
RETURN

$*RButton UP::
    IF (status = "basic") {
        CLICK UP Right
    }
RETURN
2
Amiral_JCDG

Je suis sous Windows7 et j'utilise le trackball optique Kensington Orbit sans scrollring . Il s'agit d'un trackball à deux boutons, sans les boutons X requis par la plupart des scripts et applications AHK indiqués. par d'autres.

Cependant, MouseImp fonctionne pour moi sous Windows7. L'informatique est configurable, mais je l'ai configuré pour right-click + roll afin de me procurer un écran de défilement. Cela ressemble plus à un glissement, donc le pointeur se déplace, et vous n'avez qu'un seul écran à la fois [update: le taux de défilement est configurable, il peut donc être supérieur à "une page"].

Dans le même temps, TrackballWorks de Kensington a été configuré pour me permettre de faire défiler la page vers le bas sur left-click + right-click. Malheureusement, il ne peut pas ensuite faire défiler une page à la fois (l'une ou l'autre).

Ce n'est pas un produit plug - c'est juste ce que j'ai trouvé pour fonctionner avec ce modèle/type de trackball .

Mise en garde: vous êtes constamment en train de cliquer à gauche et à droite, ce qui peut être source de confusion et de liens suivis/activés lorsque vous souhaitez simplement arrêter le défilement . :::soupir:::

1
Michael Paulukonis

Je viens de recevoir un trackball orbit sans fil de Kensington, c’est vraiment incroyable. Vous avez le ballon, vous avez les deux boutons de chaque côté et vous avez une sorte de cercle à l'extérieur du trackball qui permet de faire défiler la page vers le haut ou le bas. Cela fonctionne vraiment, et je l’utilise sous Windows et Mac OSX.

1
andremartins

Selon votre système d'exploitation, vous pourrez peut-être configurer l'un des boutons pour activer le défilement en déplaçant le pointeur lorsqu'il est maintenu enfoncé. Par exemple. le script suivant active ceci sur le bouton 10 de ma souris (bouton "en haut au centre" de Logitech MX310):

#!/bin/sh
xinput set-prop "Logitech USB-PS/2 Optical Mouse" 290 10
xinput set-prop "Logitech USB-PS/2 Optical Mouse" 286 1
xinput set-prop "Logitech USB-PS/2 Optical Mouse" 287 6 7 4 5
1

Il existe de telles souris en marbre (souris) qui ont une molette de défilement incluse. Sinon, il semble qu'une application ou un script serait requis pour une souris sans molette avec l'utilisation de l'un des boutons pour activer une fonction de défilement (ce que vous avez noté dans un commentaire pour une autre réponse, comme une solution inacceptable).

Alors "Pourquoi réinventer la roue?" est un bon adage dans ce cas.

Dans ces exemples, l'élément est installé physiquement et vous pouvez choisir parmi de nombreux types. Vous trouverez ci-dessous deux exemples et styles.

wh1

Ou quelque chose comme ceci: Adesso

wh2

1
Carl B

Une solution simple (et osée, si j'ose dire) est de mettre la fonction de défilement sur votre gauche.

Ceci peut être réalisé en utilisant une souris avec votre main gauche/en utilisant un clavier avec une molette de défilement intégrée sur son bord gauche/en affectant des fonctions de défilement aux touches d’un clavier programmable avec un programme comme Mkey ( http://www.seriosoft.org/en/index.php ).

Pourquoi est-ce que je pense que cela est plus ergonomique - parce que cette approche distribue la tension de manière plus uniforme sur les deux mains. (Plus à ce sujet: http://capsoff.org/checklist ).

1
drabsv

Une autre solution pour Windows 7 qui permet le défilement dans toutes les applications, y compris Internet Explorer:

  1. Installez AutoHotKey .
  2. Enregistrez ce script sous le nom scroll.ahk sur le bureau.
  3. Cliquez avec le bouton droit sur scroll.ahk.
  4. Sélectionnez Exécuter le script .
  5. Confirmez si vous y êtes invité.

Cela fera défiler verticalement le petit bouton droit lorsque vous déplacerez la boule de commande. Le petit bouton de gauche est le bouton de retour.


Au cas où le lien vers le code d'Erik Elmore disparaîtrait, le voici:

;;
;; Emulate_Scrolling_Middle_Button.ahk
;; Author: Erik Elmore <[email protected]>
;; Version: 1.1 (Aug 16, 2005)
;;
;; Enables you to use any key with cursor movement
;; to emulate a scrolling middle button.  While
;; the TriggerKey is held down, you may move the
;; mouse cursor up and down to send scroll wheel
;; events.  If the cursor does not move by the
;; time the TriggerKey is released, then a middle
;; button click is generated.  I wrote this for my
;; 4-button Logitech Marble Mouse (trackball),  
;; which has no middle button or scroll wheel.
;;

;; Configuration

;#NoTrayIcon

;; Higher numbers mean less sensitivity
esmb_Threshold = 7

;; This key/Button activates scrolling
esmb_TriggerKey = XButton2

;; End of configuration

#Persistent
CoordMode, Mouse, Screen
Hotkey, %esmb_TriggerKey%, esmb_TriggerKeyDown
HotKey, %esmb_TriggerKey% Up, esmb_TriggerKeyUp
esmb_KeyDown = n
SetTimer, esmb_CheckForScrollEventAndExecute, 10
return

esmb_TriggerKeyDown:
  esmb_Moved = n
  esmb_FirstIteration = y
  esmb_KeyDown = y
  MouseGetPos, esmb_OrigX, esmb_OrigY
  esmb_AccumulatedDistance = 0
return

esmb_TriggerKeyUp:
  esmb_KeyDown = n
  ;; Send a middle-click if we did not scroll
  if esmb_Moved = n
    MouseClick, Middle
return

esmb_CheckForScrollEventAndExecute:
  if esmb_KeyDown = n
    return

  MouseGetPos,, esmb_NewY
  esmb_Distance := esmb_NewY - esmb_OrigY
  if esmb_Distance
    esmb_Moved = y

  esmb_AccumulatedDistance := (esmb_AccumulatedDistance + esmb_Distance)
  esmb_Ticks := (esmb_AccumulatedDistance // esmb_Threshold) ; floor divide
  esmb_AccumulatedDistance := (esmb_AccumulatedDistance - (esmb_Ticks * esmb_Threshold))
  esmb_WheelDirection := "WheelDown"
  if (esmb_Ticks < 0) {
    esmb_WheelDirection := "WheelUp"
    esmb_Ticks := (-1 * esmb_Ticks)
  }

  ;; Do not send clicks on the first iteration
  if esmb_FirstIteration = y
    esmb_FirstIteration = n
  else {
    Loop % esmb_Ticks {
      MouseClick, %esmb_WheelDirection%
    }
  }

  MouseMove,esmb_OrigX,esmb_OrigY,0
return
1
Dave Jarvis

En fait, j’ai créé quelque chose pour cela en utilisant AutoHotkey il ya quelque temps et j’ai pensé le partager ici aussi: émulateur de la molette de la souris

Ceci émule le défilement de la molette de la souris en déplaçant la souris tout en maintenant les boutons gauche et droit de la souris.

Vous pouvez également émuler un clic du milieu en cliquant simultanément sur les boutons gauche et droit de la souris.

1
blah238

Deux options non conventionnelles

enter image description here

Crédit image http://www5.pcmag.com/media/images/393268-leap-motion-controller.jpg

1
spuder

Un autre utilisateur de Trackman Marble ici.

J'utilise le bouton de contrôle de la souris X pour l'émulation de défilement. Cette implémentation de fonctionnalité n’est pas parfaite (encore?), Mais elle est beaucoup plus utilisable que l’implémentation de Logitech dans leur propre logiciel SetPoint ™.

Je recommande XMBC à tous ceux qui ne veulent pas jouer avec AutoHotKey et qui recherchent quelque chose qui fonctionne.

0
Killy.MXI