Akademia Techniczno-Rolnicza w Bydgoszczy
Wydział Mechaniczny
Katedra Sterowania i Konstrukcji
Systemy mikrokomputerowe
WSTĘP DO PROGRAMOWANIA
W JĘZYKU VISUAL BASIC
Instrukcja nr 9
Opis działania programu Motyl
Program Motyl pokazuje wykorzystanie obiektów obraz - Image do zbudowania aplikacji wyświetlającej animacje rysunków w formatach BMP, WMF oraz ICO.
Implementacja wizualna programu Motyl
Otwórz nowy projekt, zachowaj jego formę w pliku Motyl.frm, a projekt pod nazwą Motyl.mak.
Na podstawie danych z tabeli zbuduj formę tak jak na rysunku 1.
Obiekt |
Własność |
Ustawienie |
Form |
Name Caption Height Left ScaleMode Top Width |
frmMotyl Motyl 4425 930 3-Pixel 1080 7485 |
Image |
Name Height Left Picture Stretch Top Width |
imgObraz 77 24 (znaleźć bfly1.bmp) False 176 77 |
Image |
Name Height Left Picture Stretch Top Width Visible |
imgMotyl1 77 24 (znaleźć bfly1.bmp) False 16 77 False |
Image |
Name Height Left Picture Stretch Top Width Visible |
imgMotyl2 77 128 (znaleźć bfly2.bmp) False 16 77 False |
Timer |
Name Interval Left Top |
tmeZegar 220 8 14 |
Command Button |
Name Caption Height Left Top Width |
cmdKoniec &Koniec 33 400 224 73 |
Rys.1 Program Motyl
Instrukcja |
Własność ScaleMode obiektu Form określa w jakich jednostkach podawane są rozmiary i położenie obiektów umieszczonych w formie frmMotyl. Ustawienie 3-Pixel wskazuje, że wartości podawane w takich cechach ja Left, Top, Width, Height wyrażono w punktach (pikselach) obrazu. Obiekt Timer pozwala na automatyczne uruchamianie wskazane procedury (w tym przykładzie tmeZegar_Timer()) co określony czas. Czas jaki mija pomiędzy kolejnymi uruchomieniami określa w milisekundach własność Interval. Obiekt typu Timer podczas działania programu nie jest wyświetlany, tak więc własności Left oraz Top określają położenie ikonki symbolizującej obiekt Timer w trakcie budowania formularza. Własność Visible obiektów imgMotyl1 i imgMotyl2 ustawiona na False wskazuje, że nie są one widoczne podczas działania programu (wykorzystano je do przechowywania kolejnych klatek animacji). |
Wprowadzanie kodu programu Motyl
Do procedury tmeZegar_Timer() formy frmMotyl wpisz następujący kod:
Sub tmeZegar_Timer()
Static WskazObraz As Integer
imgObraz.Move imgObraz.Left + 20 imgObraz.Top - 5
If WskazObraz = True Then
imgObraz.Picture = imgMotyl1.Picture
Else
imgObraz.Picture = imgMotyl2.Picture
End If
WskazObraz = Not WskazObraz
End Sub
Instrukcja |
Procedura ta wykonywana jest automatycznie przez obiekt tmeZegar co 220 milisekund (określa to własność Interval tego obiektu). Działanie procedury polega na przesuwaniu obiektu imgObraz wyświetlającego wizerunek motyla po każdym wywołaniu o 20 pikseli w prawo i 5 pikseli do góry. Jednocześnie następuje cykliczna zmiana wyświetlanego obrazu motyla - raz jest to obrazek motyla ze złożonymi skrzydłami, a następnie ze skrzydłami rozłożonymi. W pierwszej kolejności definiowana jest zmienna WskazObraz określająca, który obraz motyla ma być wyświetlony. Jeśli jej wartość wynosi True wyświetlany jest motyl z otwartymi skrzydłami, w przeciwnym wypadku ze złożonymi. Deklaracja Static określa, że wartość zmiennej nie jest kasowana po zakończeniu się procedury. Static WskazObraz As Integer Po tej deklaracji obiekt imgObraz jest przesuwany przy pomocy metody Move z argumentami określającymi punkt docelowy przesunięcia (górny lewy wierzchołek ma zostać przesunięty ze swego aktualnego położenia w prawo o 20 punktów - imgObraz.Left + 20 i do góry o 5 punktów - imgObraz.Top - 5). imgObraz.Move imgObraz.Left + 20 imgObraz.Top - 5 Następnie sprawdzany jest wspomniany wyżej warunek określany przez zmienną WskazObraz, a następnie własności Picture obiektu imgObraz przypisywana jest zawartość własności Picture ukrytych obiektów imgMotyl1 i imgMotyl2. Wykorzystanie trzech obiektów umożliwia przechowywanie dwóch różnych obrazów motyla jednocześnie w pamięci (imgMotyl1 i imgMotyl2) oraz przesuwanie tylko pojedynczego obiektu (imgObraz), któremu na zmianę przypisywane są obrazki pamiętane przez dwa pozostałe obiekty. Umożliwia to programowanie szybkich animacji przy pomocy stosunkowo prostych procedur. If WskazObraz = True Then imgObraz.Picture = imgMotyl1.Picture Else imgObraz.Picture = imgMotyl2.Picture End If Na koniec wykonywana jest zamiana wartości na przeciwną zmiennej WskazObraz przy pomocy operatora Not (z True na False lub z False na True). Dzięki deklaracji Static wartość zmiennej jest pamiętana nawet po zakończeniu działania procedury (deklaracja Dim pozwala deklarować zmienne, których wartości pamiętane są podczas wywołania procedury, po jej zakończeniu ulegają one usunięci z pamięci komputera) WskazObraz = Not WskazObraz |
Do procedury Form_Load() formy frmMotyl wpisz następujący kod:
Sub Form_Load()
cmdKoniec.Move 10,10
End Sub
Instrukcja |
Procedura ta przesuwa (licząc od lewego górnego wierzchołka) obiekt cmdKoniec (klawisz Koniec) do punktu o współrzędnych 10,10 przy czym początek układu współrzędnych znajduje się w górnym lewym wierzchołku wewnętrznej (o kolorze białym) części formy frmMotyl. |
Do procedury cmdKoniec_Click() formy frmMotyl wpisz następujący kod:
Sub cmdKoniec_Click()
End
End Sub
Uruchomienie programu Obrazki
Uruchom program Motyl.
Zwróć uwagę na sposób animacji motyla.
Kliknij Koniec, aby zakończyć działanie programu.
Tworzenie pliku wykonywalnego (Motyl.exe)
Wybierz z menu File opcję Make EXE File.
Zapamiętaj plik pod nazwą Motyl.exe w katalogu .
Zakończ działanie Visual Basic wybierając z menu File opcję Exit.
Ćwiczenie końcowe
Zmień program Motyl, tak aby zmienić tor lotu motyla (w dowolny sposób).
Zmodyfikuj program Motyl, tak aby wyświetlał on przesuwający się poziomo księżyc w kolejnych kwadrach. Obrazki przedstawiające kolejne kwadry księżyca znajdują się w plikach Moon01.ico, Moon02.ico, Moon03.ico, Moon04.ico, Moon05.ico, Moon06.ico, Moon07.ico oraz Moon08.ico (katalog: \vb\icons\elements)
Informacja |
W celu wykonania ćwiczenia pierwszego konieczne jest zmiana argumentów metody Move przesuwającej obiekt imgObraz.
Wykonanie ćwiczenia drugiego wymaga zdefiniowania dodatkowych obiektów Image zawierających obrazki reprezentujące kolejne kwadry księżyca, oraz zmodyfikowania procedury wyświetlającej animację zarówno w części odpowiedzialnej za sposób przemieszczania obiektów jak i kolejności ich wyświetlania. |
5
5