Erweiterte Mausverarbeitung in Delphi-Anwendungen

Möglicherweise wissen Sie bereits, wie einige grundlegende Mausereignisse wie MouseUp / MouseDown und MouseMove behandelt werden. Es gibt jedoch Situationen, in denen Sie möchten, dass Ihre Maus das tut, was Sie sagen.

'Basic' API Zeug

Viele von uns schreiben Programme, die nur mit der Maus funktionieren. Wenn wir Programme schreiben, die Mauspräsenz erfordern und / oder von der Maus abhängig sind, müssen wir sicherstellen, dass verschiedene Dinge richtig eingestellt sind.

Ist Maus vorhanden?

Am schnellsten können Sie feststellen, ob die Maus vorhanden ist:

Animierter Mauszeiger

So verwenden Sie animierte Cursor (oder sogar BMP als CUR):

Maus positionieren

Die SetCursorPos-API-Funktion bewegt den Cursor zu den angegebenen Bildschirmkoordinaten. Da diese Funktion kein Windows-Handle als Parameter erhält, müssen x / y Bildschirmkoordinaten sein. Ihre Komponente verwendet relative Koordinaten, z. relativ zu einem TForm. Sie müssen die ClientToScreen-Funktion verwenden, um die richtigen Bildschirmkoordinaten zu berechnen.

Simulationen

In den meisten Fällen soll die Maus eine bestimmte Position auf dem Bildschirm anfahren. Wir wissen, dass einige Komponenten erst dann auf eine Cursoränderung reagieren, wenn der Benutzer die Maus bewegt. Wir müssen daher eine kleine Methode zum Bewegen vom Code bereitstellen. Und was ist mit Mausklicks in der Simulation, ohne den OnClick-Ereignishandler aufzurufen??

Das folgende Beispiel simuliert ein Mausklickereignis auf Button2 nach dem Klicken auf Button1. Wir müssen mouse_event () API-Aufruf verwenden. Die mouse_event-Funktion synthetisiert Mausbewegungen und Tastenklicks. Die angegebenen Mauskoordinaten sind in "Mickeys" angegeben, wobei die Breite eines Bildschirms 65535 "Mickeys" beträgt.

Beschränken Sie die Mausbewegung

Mit der Windows-API-Funktion ClipCursor können Sie die Mausbewegung auf einen bestimmten rechteckigen Bereich auf dem Bildschirm beschränken:

Mouse Enter, Mouse Leave?

Das Erkennen des Ein- und Aussteigens des Mauszeigers über einer Komponente tritt häufig beim Schreiben einer eigenen Komponente auf. Alle Nachkommen von TComponent senden eine CM_MOUSEENTER- und eine CM_MOUSELEAVE-Nachricht, wenn die Maus die Grenzen der Komponente betritt und verlässt. Sie müssen einen Nachrichten-Handler für die jeweiligen Nachrichten schreiben, wenn wir darauf antworten möchten.