2010-09-13 28 views
1

Delphi 7 sur Windows 7événement MouseWheelDown déclenche plusieurs fois successivement

Je veux faire défiler une liste (TElTree) en utilisant la molette de la souris ... donc je commence à écrire un code dans l'événement OnMouseWheelDown du ElTree. Ensuite, je remarque qu'il défile 2 lignes à la fois. Les paramètres de la roulette de la souris dans le Panneau de configuration sont définis pour ne faire défiler qu'une ligne à la fois. Si je place un point d'arrêt dans le gestionnaire d'événements, je découvre que le gestionnaire d'événements est lui-même exécuté deux fois de suite rapidement ... Pourquoi? Comment s'assurer qu'il ne s'exécute qu'une fois (code s'il vous plaît)?

Répondre

2

Lorsque la roue défile, le système d'exploitation envoie WM_MOUSEWHEEL messages. Le mot de poids fort du paramètre wParam indique jusqu'à quelle distance la roue a tourné. S'il a tourné un "clic", alors sa valeur sera 120, ou WHEEL_DELTA. Mais il se peut que ce soit moins que si votre molette de défilement reconnaît le défilement à moins d'un clic.

Correct WM_MOUSEWHEEL Les gestionnaires de messages doivent prendre en compte ce paramètre et conserver un «accumulateur de défilement» pour suivre la distance de défilement de la roue ou avoir la capacité de faire défiler moins d'une ligne complète. Les gestionnaires de messages qui supposent que chaque message signifie qu'un clic complet de la roue sera désolé.

+0

Merci pour cet aperçu. Je vais approfondir. – Sam