GrayRGB.zip
Autor: Krzysztof Pozorek
Baza w formacie MsAccess 2002 - 2003
373kB, 28-05-2007
Opis problemu:
Bardzo mi się kiedyś spodobało rozwiązanie w jednym z programów dołączanych do czasopisma. Polegało ono na tym, że najeżdżając myszką na przycisk, rozżarzał się on stopniowo jak węgielek. Chciałbym mieć w Accessie coś podobnego, żeby po najechaniu na czarno-białe zdjęcie, rozświetliło się ono wszystkimi swoimi kolorami. Ale nie od razu, tylko stopniowo, przechodząc przez wszystkie stadia przenikania się kolorów z szarościami. Czy coś takiego można zrobić na accessowym formularzu i oprogramować w kodzie VBA?
Rozwiązanie:
Począwszy od Windows 2000 pojawiła się nowa funkcjonalność okien, zwana Layered windows. Więcej na ten temat znajdziesz tutaj, czyli u źródła ;-) http://msdn2.microsoft.com/en-us/library/ms997507.aspx. Opisane tam cechy takich okien działają na wyobraźnię. Jedną z nich jest możliwość wyświetlenia okna o dowolnej przezroczystości(!) z zakresu 0...255, gdzie 255 to całkowity brak przezroczystości. Do ustawiania przezroczystości okna służy funkcja API SetLayeredWindowAttributes, której deklaracja VBA jest następująca:
Public Declare Function SetLayeredWindowAttributes Lib "user32" _ (ByVal hwnd As Long, ByVal crKey As Long, ByVal bAlpha As Byte, _ ByVal dwFlags As Long) As LongCzy trzeba nam czegoś więcej do wykonania naszego kolorowego zdjęcia, przechodzącego w odcienie szarości...?
Przykład zastosowania tej funkcji wygrzebał swojego czasu Krzysztof Naworyta w wątku tutaj. Zapoznałem się z tym programem, który pomógł mi w uzyskaniu wymienionego wyżej efektu zamiany kolorowych zdjęć na odcienie szarości. Wynik możesz ocenić w programie GrayRGB, mam nadzieję, że Ci się spodoba :-)
K.P.
PS: Zobacz też inną realizację kolorowania czarno-białych obrazków na tej stronie http://www.access.vis.pl/war235.htm, opartą na odmiennej zasadzie. Tam animacja odbywa się na dokumencie HTML, poza Accessem. Natomiast w przykładzie GrayRGB mamy pełna kontrolę nad wizualizacją efektów przenikania, ponieważ sterujemy wszystkim z poziomu kodu VBA.