RuchomyKalendarzyk.zip
Autor: Krzysztof Naworyta
Baza w formacie MsAccess 97
128kB, 05-11-2001
Kalend4.zip
Autor: Krzysztof Pozorek
Baza w formacie MsAccess 97
97kB, 12-11-2001
RuchomyKalendarzyk2.zip
Autor: Krzysztof Naworyta
Baza w formacie MsAccess 97
65kB, 13-11-2001
RuchomyKalendarzyk2Kv2.zip
Autor: Krzysztof Naworyta
Baza w formacie MsAccess 2000
90kB, 14-11-2001
Opis problemu:
W Accessie jest kontrolka Kalendarz, ale jak z niej korzystać w wygodny dla użytkownika sposób? Czy standardowa kontrolka MSCal.ocx może wyglądać i działać jak w MS Outlook?
Rozwiązanie:
Dość niecodzienny sposób traktowania kontrolki kalendarza podał Krzysztof Naworyta. Jego przykład RuchomyKalendarzyk.mdb to właściwie pretekst do pokazania kilku frapujących i mało popularnych możliwości Accessa. Krzysztof podjął próbę (udaną) przejęcia komunikatów, które dochodzą do wewnętrznej procedury obsługi okna, jaką posiada każdy formularz. Zadanie dość niezwykłe, które daje potencjalne możliwości szersze niż tylko te, wykorzystane w przykładzie. Krzysztof przejął niewykrywalne przez Accessa zdarzenie utraty focusa przez formularz PopUp, ale na podobnej zasadzie można przechwytywać także inne ukryte zdarzenia lub zastępować oryginalne komunikaty naszymi własnymi. Jednak to jest temat na oddzielne opracowanie.
Innym zagadnieniem podjętym przez Krzysztofa w jego przykładzie jest wykorzystanie klas. Mam wrażenie, że programiści rzadko korzystają z tej możliwości w Accessie. Przykład RuchomyKalendarzyk.mdb pokazuje jak oswoić tego "jeża". Na pewno interesujące będzie też dla wielu zagadnienie pozycjonowania jednego formularza względem drugiego. Access nie ma wbudowanych mechanizmów, które to zapewniają. Wszystko to można znaleźć w prezentowanym przykładzie Krzysztofa Naworyty.
A oto co pisze Krzysztof:
Krzychu, jestem pod wrażeniem. Jednak mam też wątpliwości, zwłaszcza, ze sam pytasz, czy nie można prościej. To zdecydowanie główna wada Twojego rozwiązania, czyli nadmierne skomplikowanie zagadnienia i w rezultacie chyba brak możliwości wykorzystania Twojego kodu przez mniej doświadczonych programistów. Ale efekt, który uzyskałeś dobrze zachęca do wyjścia poza makra i wizardy. Słowem zagadnienia, które poruszasz dobrze nadają się do celów poznawczych, ale w konkretnym przypadku obsługi kalendarza to chyba za duży nakład środków.
Na podstawie przykładu RuchomyKalendarzyk.mdb postanowiłem napisac zmodyfikowaną wersję bazy o nazwie Kalend4.mdb, która w moich zamierzeniach miała uprościć metodę Krzysztofa przy zachowaniu jej funkcjonalności.
Proponowana przeze mnie zmiana polega na tym, ze zamiast formularza PopUp użyłem okna równorzędnego.
Powód jest prosty - w zwykłych, niewyskakujących formularzach nie ma problemu z obsługą zdarzenia Form_Deactivate,
co znacznie upraszcza kod. Ale także w przypadku formularzy PopUp kod nie musi być skomplikowany. Dobre efekty daje
wykorzystanie Timera do wykrycia aktywności formularza. Nie jest to rozwiązanie ambitne, ale w tym przypadku zupełnie wystarczające.
Należy jeszcze powiedzieć o dodatkowych możliwościach zupełnie prostego wykorzystania kalendarza na formularzu pojedynczym.
W tym przypadku nie mamy kłopotu z niedogodnością formularzy ciągłych, polegającą na tym, że przypisanie
Me!Kalendarz.Visible = True
w jednym rekordzie, wywołuje taki sam efekt we wszystkich rekordach.
Wszystkie trzy przypadki obsługi kalendarza z wykorzystaniem
- okna PopUp
- okna równorzędnego
- kalendarza na formularzu pojedynczym
zostały przedstawione w przykładzie Kalend4.mdb.
Przykład RuchomyKalendarzyk2.mdb (lub RuchomyKalendarzyk2Kv2.mdb dla Accessa 2000) jest poprawioną wersją kalendarzyka, którą otrzymałem od Krzysztofa Naworyty już po publikacji pierwszego przykładu. Krzysztof dodał kilka ulepszeń, co zwiekszyło funkcjonalność i uniwersalność jego rozwiązania. Ale niech sam zabierze glos: