Krzysztof Naworyta: Opis programu MouseOver2k.zip.
Aplikacja opracowana na podstawie oryginalnego projektu pobranego z
http://www.it-berater.org/
strona:
http://www.it-berater.org/ThueDownloads/index.shtml
Dr. Thümmler-DLL Pack
Pakiet zawiera 17 interesujących bibliotek dll, między innymi dsflash.dll
- kluczową dla interesującego nas płynnego efektu MouseOver.
Bibliotekę dsflash.dll po rozpakowaniu należy umieścić
- albo w systemowym katalogu Windows
(windows\system albo winnt\system32)
- albo w katalogu gdzie umieszczono msaccess.exe
(domyślnie C:\Program Files\Microsoft Office\Office)
Każdemu szczerze polecam, aby ze stron autora ściągnął oryginalny zip
i przestudiował wszystkie tam zawarte uwagi.
W moim opracowaniu starałem się tamte idee przenieść do bazy mdb,
wraz z efektem MouseOver, także dla formularza nieaktywnego.
Wymagało to paru specyficznych dla accessa przeróbek,
choć mam wrażenie, że nie wszystko zostało już uwzględnione.
Dlatego przedstawioną aplikację należy traktować jako pierwszą przymiarkę do
tematu - liczę na pomoc każdego, który rozwinie owo dostosowanie.
Główny problem to niemożność ponownego aktywowania biblioteki,
po zamknięciu formularza startowego StartHidden.
Dlatego w jego procedurze Unload umieściłem linię CloseCurrentDatabase.
Plusy:
Aplikacja wymaga jednego uniwersalnego modułu modFlash.
Zaś w module każdego formularza, dla którego pragniemy zastosować przedstawiony
mechanizm, wystarczy w procedurze otwarcia odpowiednio podpiąć kontrolki
pod kontrolę (czy to poprzez ich typ, czy też sprawdzanie zawartości ich metek)
Zgodnie z opisem w oryginalnym projekcie - dodatkowo moduł formularza powinien
zawierać:
FlashEvent() - główna procedura, do której bez przerwy będzie się odwoływać dll
ProcessControls()
ProcessZones() - w naszym, Accessowców, przypadku pewnie zawsze pusta, ale musi
pozostać!
Kusi aby te procedury - poza ProcessControls(), specyficzną dla każdego formularza
z osobna, przenieść w miejsce bardziej uniwersalne - ale tego nie sprawdziłem,
więc tym bardziej nie wiem czy jest to możliwe ...
Dodatkowy komentarz:
Biblioteka dll rozwiązując jedne problemy generuje inne
Te ostatnie być może z mojej niewiedzy ...
A co rozwiązuje ?
Rozwiązanie przy pomocy Timer, podane przez Krzyśka Pozorka wydaje się, że można
ująć w odpowiednią - uniwersalną - klasę i w ten sposób zrobić wszystko bez uciekania
się do dodatkowych bibliotek, których źródła nie udostępniono.
Tyle, że mnie osobiście ten Timer mało się podoba:
- raz, bo w uniwersalnej sytuacji chciałbym go być może użyć w innych celach niż
podświetlanie czy gaszenie czegoś tam
- dwa, bo Timer też ma swoje pułapki (jak choćby nieadekwatność Screen.ActiveForm
czy bug objawiający się podczas naciskania klawisza myszy)
((może ja ma jakiegoś nieszkodliwego (?) bzika, ale implementując rozwiązanie
w zamyśle uniwersalne, pragnę aby nie wchodziło ono w konflikt z rozwiązaniami
lokalnymi - czyli w konkretnym przypadku nie chcę aby Timer uniwersalnej klasy
gryzł się z Timerem lokalnyjm formularza ....))
- trzy, bo ciężko reagować na zdarzenia myszy kontrolek formularza nieaktywnego
(potrzebne to komu ? nie wiem, ale miłe ;-))) W końcu na takiej zasadzie
działają toolbary ...
Jako że aplikacja zawiera jeszcze wiele pytajników - z dalszymi opisami na razie koniec.
Oddaję pałeczkę innym, bardziej dociekliwym Kolegom
Krzysztof Naworyta