Akurat rodzaj komponentu nie ma dla mnie znaczenia.
No dobrze, jednak komponenty graficzne różnią się implementacją od tych okienkowych, więc to ma znaczenie;
Panel nie obsługuje OnMouseEnter i OnMouseLeave, więc nieco chałupniczo wrzuciłem na niego Label z ustawioną przezroczystością i brakiem tekstu.
A to nie mogłeś sobie dodać obsługi komunikatów CM_MOUSEENTER
i CM_MOUSELEAVE
? Przecież to banalne...
Swoją drogą, zależy też w którym miejscu wciśnięto LPM, czy nad powierzchnią formularza, czy nad jakimś komponentem;
Swoje komponenty pisałem od podstaw i mam w nich dodaną obsługę tych komunikatów (bez zdarzeń, tylko dla internalsów); Działa to bez problemu - można wcisnąć LPM gdziekolwiek poza docelowym komponentem (na formularzu lub innym komponencie), a następnie najechać na ten docelowy i komunikaty zostają prawidłowo obsłużone (wykorzystuję je do malowania innej grafiki); Trzymając wciśnięty LPM każdy komponent prawidłowo obsługuje oba komunikaty i na nie prawidłowo reaguje; Natomiast kliknięcie realizowane jest po zwolnieniu LPM; Działa to praktycznie tak samo jak Drag&Drop, ale nie umożliwia przeciągania elementów;
Całość zawdzięczam usunięciu enuma csCaptureMouse
z ControlStyle
- bez tego klasa okna zupełnie inaczej obsługuje te komunikaty; M.in. nie wysyła komunikatu CM_MOUSEENTER
do komponentu, jeśli w momencie najechania kursorem, wciśnięty jest LPM;
Spróbuj u siebie wykluczyć ten enum, bo ja piszę pod Lazarusem i LCL może nieco inaczej się zachowywać; Napisz swój komponent dziedziczący po TPanel
, w konstruktorze usuń tego enuma, a także dodaj sobie obsługę tych komunikatów i ew. także zdarzenia, jeśli potrzebujesz móc je zdefiniować na zewnątrz.