Kontrolki działały prawidłowo w Lazarusie 1.6.4, a po aktualizacji do wersji 1.8, wszystkie zgłupiały. Otrzymują komunikat CM_MOUSELEAVE
po obróceniu rolką myszy w dowolnym kierunku.
Mowa o sytuacji, kiedy różne własne kontrolki znajdują się na własnym panelu. Jeśli umieszczę np. przycisk bezpośrednio na formularzu to ta kontrolka zachowuje się poprawnie. Niestety ale do czasu, kiedy również bezpośrednio na formie położę np. standardowy TButton
– wtedy też zaczyna wariować z tym komunikatem.
Podejrzewam, że powodem takiego problemu jest klasa tego mojego panelu, jednak przyczyny nie jestem w stanie namierzyć. Próbowałem już wszystkiego.
W celu reprodukcji błędu stworzyłem malutki pakiet z dwoma typami kontrolek – z panelem i przyciskiem. To co najistotniejsze przeniosłem ze swojego dużego projektu do tego pakietu. Do tego dorobiłem prostą apkę okienkową, aby móc testować te kontrolki. Kontrolki te też zawierają owy błąd, więc kod tych kontrolek nie pasuje do nowego LCL.
Pakiet zawiera moduły:
-
StupidRegister.pp
– moduł z procedurą rejestracji kontrolek, -
StupidCommon.pp
– zawiera pseudobazowe klasy dla komponentów, -
StupidPanel.pp
– zawiera kontrolkęTStupidPanel
, -
StupidButton.pp
– zawiera kontrolkęTStupidButton
.
Każdy z tych modułów ma kilkadziesiąt linii kodu – tylko to co trzeba. W podkatalogu controls
znajduje się plik StupidControls.lpk
. Zakładka dla tych komponentów to Stupid Controls
.
Problem obrazuje to nagranie – stupid controls.webm
Kursor znajduje się nad przyciskiem, obracam rolkę myszy i przycisk zostaje dezaktywowany, tak jakbym zabrał kursor w cholerę. Jeśli ktoś wie co jest przyczyną to proszę o wskazówki. W międzyczasie powalczę z tym i jeśli uda się rozwiązać problem to dam znać.