Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Mouse Wheel Down / Up : 2 Impulse ? (https://www.delphipraxis.net/144120-mouse-wheel-down-up-2-impulse.html)

markus5766h 30. Nov 2009 17:34


Mouse Wheel Down / Up : 2 Impulse ?
 
Hallo,
ich möchte eine Anwendung (genauer ein Menü) wahlweise auch per Mouse WheelDown/WheelUp steuern.
Soweit so gut ...
Ich bekomme je Radbewegung von einer Raststellung bis zur nächsten 2 Impulse (scheinbar wird
je die ansteigende und abfallende Flanke verarbeitet).
Hierzu meine Frage : ist dies bei jeder Mouse so ?
... oder hab' ich einen Exoten ? :gruebel:

Es ist zwar kein Problem die Impuls zu zählen und bei jedem zweiten das entsprechende Ereignis
auszulösen ... allerdings nur solange, wie die Antwort der Mouse immer 2 Impulse beträgt.

In Ermagelung einer Ersatzmouse hab' ich wenig Lust meine zu schlachten um mir die Elektronik anzuschauen
und hoffe daher auf entspr. Hilfe.

Danke schon mal im vorraus.

sx2008 1. Dez 2009 00:21

Re: Mouse Wheel Down / Up : 2 Impulse ?
 
Normalerweise empfängt man doch die WM_MOUSEWHEEL Message.
Du bekommst die Richtung und die Anzahl der Schritte im Parameter wParam.
Allerdings hat ein Schritt 120 Einheiten (WHEEL_DELTA).
Offensichtlich wollte MS sich für die Zukunft offenhalten, dass es auch Mäuse mit höherer Auflösung geben könnte.
Für dich als Programmierer spielen die Internas der Maus keine Rolle.

helgew 1. Dez 2009 00:48

Re: Mouse Wheel Down / Up : 2 Impulse ?
 
Hi Markus,

es kommt darauf an, wo und wie du messages verarbeitest. Manchmal tritt ein solches Verhalten dadurch auf, dass eine Nachricht nicht als verarbeitet gekennzeichnet wurde und dann dem default message handler in die Hände fällt, der damit noch einmal Schindluder treibt.

Wie sx2008 schon sagte, sollte man lieber die WM_MOUSEWHEEL message verarbeiten und danach als handled kennzeichnen, wenn dies noch nicht schon durch die prozedurale Handlerzuweisung im implementation-Teil getan sein sollte.

Wenn du mal was anderes mit dem Mausrad machst, das rechenintensiver ist, solltest du die messages akkumulieren ( du registrierst dir einen Timer, den du nach einmaligem Auftreten oder, wenn er noch gesetzt sein sollte, schon beim nächsten Auftreten der Mausradmessage gelöscht wird ) - das wird in der VCL wohl auch schon so gemacht, zumindest zeigt sie dieses Verhalten, nur nicht durchgehendm was mir nahelegt, dass die Akkumulation in der wndproc des Hauptformulars erfolgt. Ich könnte mich da auch irren und es ist anders gelöst, aber ich habe mit der Vorgehensweise gute Erfahrungen gemacht.

Zu deinem Problem nochmal: du kannst auch mal bei mousewheel, wheeldown und wheelup Töne ausgeben oder in eine Memo ausgeben, dann siehst du, welche events wie oft auftauchen.

markus5766h 1. Dez 2009 07:07

Re: Mouse Wheel Down / Up : 2 Impulse ?
 
Hallo, vielen Dank erst mal für die Antworten.

Hab' irgendwo noch 'nen Mouse-Hook rumliegen - werd' mir
damit mal die WM-Mouse-Botschaften ausgeben lassen (und zählen).

Cylence 1. Dez 2009 07:27

Re: Mouse Wheel Down / Up : 2 Impulse ?
 
Hi,

http://www.bome.com/delphi/watch/

hier gibts ne dll mit Delphi source projekt, mit dem wird Maus und Tastatur und noch mehr gehookt, ziemlich cool funktioniert wunderbar, damit kann man auch die Codecs von MultimediaTasten auf Tastaturen etc rauskriegen, nur so als Tip.

Gruß

Tom


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:58 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz