Warsztat 2: Detekcja wyjścia myszki poza obszar elementu (2 rozwiązania).

MouseOut.zip
Autor: Krzysztof Pozorek
Baza w formacie MsAccess 97
21kB, 19-06-2002

Opis problemu:

Zdarza się, że chcielibyśmy, aby jakiś tekst pojawiał się tylko przy najechaniu myszką na dany element. Standardowy żółty TipText pojawia się z opóźnieniem i nie zawsze nam odpowiada. Dobrym rozwiązaniem jest wyświetlanie własnych tekstów w określonym miejscu na formatce, np. w jakiejś etykiecie. Pojawia się jednak problem. O ile moment najechania kursora myszki na element jest łatwy do wykrycia korzystając ze zdarzenia MouseMove, to przesunięcie myszki poza dany element nie generuje żadnego zdarzenia.

Jak zatem wykryć moment wyjścia kursora myszki poza obszar elementu?

Rozwiązanie:

Najprostsze rozwiązanie nasuwa się samo. Trzeba oprogramować zdarzenie MouseMove dla tej sekcji formularza, w której znajduje się nasz element i gasić nasz tekst, gdy tylko myszka przesunie na ten obszar. Rozwiązanie jest proste, jednak na tym jego zalety się kończą. Szybkie przesunięcie myszki poza obszar formularza nie spowoduje ukrycia komunikatu, a obciążenie interfejsu - z powodu obarczenia każdego ruchu myszki procedurą MouseMove - jest znaczne. Ten sposób pomijamy.

Przykład MouseOut.zip zawiera dwie inne metody, które pozwalają wykryć moment opuszczenia elementu przez wskaźnik myszki.

  1. Pierwszy sposób opiera się na sztuczce z podwójnym odczytem położenia myszki podczas jednego zdarzenia MouseMove dla elementu.
  2. Druga metoda korzysta ze zdarzenia Timer, jednak w sposób nie obciążający interfejsu. Timer jest dezaktywowany gdy tylko kursor myszki wyjdzie poza obszar elementu.

W obu przypadkach wykorzystuje się funkcję API do odczytu współrzędnych wskaźnika myszki na ekranie.

Krzysztof Pozorek