Geavanceerde muisverwerking in Delphi-toepassingen

Je weet misschien al hoe je een aantal eenvoudige muisgebeurtenissen moet behandelen, zoals MouseUp / MouseDown en MouseMove. Er zijn echter momenten waarop u wilt dat uw muis doet wat u zegt.

'Basic' API-dingen

Velen van ons schrijven programma's die zijn ontworpen om alleen met de muis te werken. Als we programma's schrijven die aanwezigheid van de muis vereisen en / of afhankelijk zijn van de muis, moeten we er zeker van zijn dat verschillende dingen op de juiste manier zijn ingesteld.

Is muis aanwezig?

De snelste manier om te zien of de muis aanwezig is:

Geanimeerde muiscursor

U kunt als volgt geanimeerde cursors gebruiken (of zelfs een BMP als CUR gebruiken):

De muis plaatsen

De SetCursorPos API-functie verplaatst de cursor naar de opgegeven schermcoördinaten. Aangezien deze functie geen Windows-handle als parameter krijgt, moeten x / y schermcoördinaten zijn. Uw component gebruikt relatieve coördinaten, b.v. ten opzichte van een TForm. U moet de ClientToScreen-functie gebruiken om de juiste schermcoördinaten te berekenen.

simulaties

In de meeste gevallen willen we dat de muis naar een bepaalde positie op het scherm beweegt. We weten dat sommige componenten niet reageren op een cursorwijziging totdat de gebruiker de muis beweegt, we moeten een kleine techniek voor het verplaatsen van code bieden. En hoe zit het met simulatiemuisklikken zonder de OnClick-gebeurtenishandler aan te roepen?

Het volgende voorbeeld simuleert de muisklikgebeurtenis op Button2 na de klik naar Button1. We moeten de API-aanroep mouse_event () gebruiken. De functie mouse_event synthetiseert muisbewegingen en klikken op knoppen. Gegeven muiscoördinaten zijn in "Mickeys", waar er 65535 "Mickeys" zijn tot een schermbreedte.

Beperk de muisbeweging

Met behulp van de Windows API-functie ClipCursor is het mogelijk om de beweging van de muis te beperken tot een specifiek rechthoekig gebied op het scherm:

Muis Enter, Muis Verlaten?

Het detecteren van het binnenkomen en verlaten van de muisaanwijzer boven een component komt vaak naar boven bij het schrijven van uw eigen component. Alle nakomelingen van TComponent verzenden een CM_MOUSEENTER en CM_MOUSELEAVE bericht wanneer de muis binnenkomt en de grenzen van de component verlaat. U moet een berichtenhandler schrijven voor de respectieve berichten als we hierop willen reageren.