Akademia Techniczno-Rolnicza w Bydgoszczy
Wydział Mechaniczny
Katedra Sterowania i Konstrukcji
Systemy mikrokomputerowe
WSTĘP DO PROGRAMOWANIA
W JĘZYKU VISUAL BASIC 5
Instrukcja nr 11
Opis działania programu Grafika
Program Grafika pokazuje wykorzystanie podstawowych funkcji graficznych języka Visual Basic.
Implementacja wizualna programu Grafika.
Otwórz nowy projekt, zachowaj jego formę w pliku Grafika.frm, a projekt pod nazwą Grafika.mak .
Na podstawie tabeli zbuduj formę tak jak na rysunku 1.
Obiekt |
Własność |
Ustawienie |
Form |
Name Caption Height Left Top Width |
frmGrafika Grafika 5115 1155 2715 7590 |
Timer |
Name Interval Left Top |
tmeZegar 1 6960 120 |
Command Button |
Name Caption Height Left Top Width |
cmdStartStop Start 390 240 120 1830 |
Rys.1 Program Grafika
W celu utworzenia menu opcje należy otworzyć okno Menu Design, poprzez wybór z menu Window opcji Menu Design.
Rys.2 Okno Menu Design
- jest to okienko tekstowe, do którego wprowadza się nazwę menu, podmenu lub komendy mającej pojawić się na pasku menu lub w samym menu. Wpisanie znaku „-” zamiast nazwy tworzy w menu separator. Uzyskanie dostępu poprzez klawiaturę do wprowadzanej pozycji menu możliwe jest po umieszczeniu znaku „&” przed jednym ze znaków nazwy. Po uruchomieniu znak poprzedzony ampersandem („&”) będzie podkreślony, a użytkownik będzie mógł dotrzeć do menu wciskając na klawiaturze lewy Alt i podkreślony znak. - okienko tekstowe, do którego wprowadza się nazwę tworzonego obiektu (menu, podmenu lub komendy), Nazwa ta spełnia taką samą rolę jak nazwy innych obiektów Visual Basica. - okienko tekstowe, do którego wprowadza się wartość numeryczną określającą pozycję obiektu menu w tabeli obiektów (bez związku z pozycją obiektu na ekranie). - lista, z której można wybrać skrót klawiatórowy związany z daną pozycją menu. - wybór tej opcji spowoduje, że menu będzie zawierało listę wszystkich otwartych form (okienek) projektowanej aplikacji. - okienko tekstowe, do którego wprowadza się wartość numeryczną określającą indeks tematu pomocy związanego z daną pozycją menu. - wybór tej opcji spowoduje, że po uruchomieniu wskazana pozycja menu będzie zaznaczona (znaczkiem „”, a wartość cechy Checked będzie ustawiona na True. - zaznaczenie tej opcji powoduje, że wskazana pozycja menu będzie dostępna dla użytkownika po uruchomieniu aplikacji. - zaznaczenie tej opcji spowoduje, że wybrana pozycja menu będzie widoczna po uruchomieniu programu. - klawisze, które pozwalają ustalić, czy wprowadzona pozycja jest nazwą menu, stanowi jedną z jego komend lub jest nazwą podmenu. Można w ten sposób utworzyć do czterech „warstw” menu. - umożliwiają zmianę pozycji wskazanej komendy menu niższą lub wyższą w obrębie pojedynczej „warstwy” menu. - hierarchiczna lista obiektów wszystkich menu. Komendy menu i nazwy podmenu są odsunięte od marginesu, aby wyróżnić ich pozycję na poszczególnych „warstwach”. - przesuwa wskazany obiekt do następnej linii. - wprowadza nowy obiekt do menu przed obiekt wskazany. - kasuje wskazany obiekt. - kończy definiowanie menu, zapisując zmiany - kończy definiowanie menu unieważniając zmiany |
Numer menu |
Własność |
Ustawienie |
1 |
Name Caption Menu nadrzędne (numer) |
mnuOpcje &Opcje - |
2 |
Name Caption Menu nadrzędne (numer) |
mnuPunkt &Punkty 1 |
3 |
Name Caption Menu nadrzędne (numer) |
mnuLinia &Linie 1 |
4 |
Name Caption Menu nadrzędne (numer) |
mnuOkrag Okrę&gi 1 |
5 |
Name Caption Menu nadrzędne (numer) |
mnuSeparator1 - 1 |
6 |
Name Caption Menu nadrzędne (numer) |
mnuKoniec &Koniec 1 |
Wprowadzanie kodu programu Grafika
Do procedury mnuPunkt_Click() formy frmGrafika wpisz następujący kod:
Sub mnuPunkt_Click()
mnuPunkt.Checked = True
mnuLinia.Checked = False
mnuOkrag.Checked = False
End Sub
Instrukcja |
Procedura ta wykonywana jest po wybraniu z menu Opcje komendy Punkty. W wyniku jej działania cecha Checked oznaczająca fakt wybrania opcji Punkty (mnuPunkty) jest ustawiania na True (Prawda), zaś ta sama cecha w przypadku innych opcji menu jest ustawiana na False. Wizualnym efektem działania tej procedury jest pojawienie się w menu przy opcji Punkty znaczka „”. |
Do procedury mnuLinia_Click() formy frmGrafika wpisz następujący kod:
Sub mnuLinia_Click ()
mnuPunkt.Checked = False
mnuLinia.Checked = True
mnuOkrag.Checked = False
End Sub
Instrukcja |
Procedura ta wykonuje podobne operacje co kod zamieszczony w punkcie 1 lecz odnosi się do wybrania z menu Opcje komendy Linie. |
Do procedury mnuOkrag_Click() formy frmGrafika wpisz następujący kod:
Sub mnuOkrag_Click ()
mnuPunkt.Checked = False
mnuLinia.Checked = False
mnuOkrag.Checked = True
End Sub
Instrukcja |
Procedura ta wykonuje podobne operacje co kod zamieszczony w punkcie 1 lecz odnosi się do wybrania z menu Opcje komendy Okręgi. |
Do procedury mnuKoniec_Click() formy frmGrafika wpisz następujący kod:
Sub mnuKoniec_Click ()
End
End Sub
Instrukcja |
Procedura ta wykonywana jest po wybraniu z menu Opcje komendy Koniec i powoduje zakończenie działania programu. |
Do procedury cmdStartStop_Click() formy frmGrafika wpisz następujący kod:
Sub cmdStartStop_Click ()
Select Case Wykonuj
Case True
cmdStartStop.Caption = "Start"
Wykonuj = False
mnuOpcje.Enabled = True
Cls
Case False
cmdStartStop.Caption = "Stop"
Wykonuj = True
mnuOpcje.Enabled = False
If mnuLinia.Checked = True Then
Randomize
DrawWidth = 2
ElseIf mnuPunkt.Checked = True Then
DrawWidth = 5
ElseIf mnuOkrag.Checked = True Then
DrawWidth = 1
DrawStyle = 1
DrawMode = 7
End If
End Select
End Sub
Instrukcja |
Procedura cmdStartStop wywoływana jest po naciśnięciu klawisza Start. Pierwsza linia kodu rozpoczyna warunek wielokrotnego wyboru Select Case zależny od wartości zmiennej Wykonuj. Select Case Wykonuj Jeżeli zmienna Wykonuj przyjmie wartość True wykonywane są instrukcje pomiędzy Case True a Case False, w przeciwnym wypadku między Case False, a End Select. Wartość zmiennej Wykonuj równa True oznacza, że przycisk Start został wcześniej wciśnięty, a w związku z tym demonstracja procedur graficznych jest w toku. Ponowne wciśnięcie klawisza Start ma na celu zatrzymanie prezentacji. Kolejno są wykonywane opisane poniżej operacje. Napis na klawiszu cmdStartStop zostaje zmieniony na Start. cmdStartStop.Caption = "Start" Zmienna Wykonuj przyjmuje wartość False powodując tym samym zakończenie prezentacji. Wykonuj = False Menu Opcje zostaje udostępnione użytkownikowi poprzez ustawienie własności Enabled na True. mnuOpcje.Enabled = True W ostatniej operacji forma jest czyszczona z narysowanych na niej elementów przy pomocy instrukcji Cls. Cls Od linii Case False rozpoczyna się kod wykonywany gdy zmienna wykonuj jest równa False, czyli w przypadku, gdy klawisz Start jest wciskany w celu uruchomienia demonstracji procedur graficznych. Napis na klawiszu cmdStartStop zostaje zmieniony na Stop cmdStartStop.Caption = "Stop" Zmienna Wykonuj przyjmuje wartość True powodując tym samym uruchomienie prezentacji. Wykonuj = True Następuje wyłączenie dostępu do menu Opcje poprzez ustawienie własności Enabled na False. MnuOpcje.Enabled = False Kolejne linie kodu przygotowują system do wykonania procedur graficznych. Ponieważ każda z procedur wymaga innego przygotowania wykonywane funkcje zostały uzależnione od wybranej komendy z menu Opcje. Jeżeli wybrano komendę Linie (warunek: If mnuLinia.Checked = True Then) wykonywane są poniższe operacje. Uruchomienie generatora liczb losowych. Randomize Grubość rysowanej linii ustawiana jest na 2 piksele. DrawWidth = 2 Wybór komendy Punkty (warunek: ElseIf mnuPunkt.Checked = True Then) powoduje ustawienie wielkości rysowanych punktów na 5 pikseli. DrawWidth = 5 Wybór komendy Okręgi (warunek: ElseIf mnuOkregi.Checked - True Then) powoduje ustawienie grubości krawędzi rysowanego okręgu na 1 piksel. DrawWidth = 1 Rodzaju wykorzystywanej linii na linię przerywaną. DrawStyle = 1 Trybu rysowania na - rysowanie aktualnym kolorem. DrawMode = 7 |
Do procedury tmeZegar_Timer() formy frmGrafika wpisz następujący kod:
Sub tmeZegar_Timer ()
If mnuLinia.Checked And Wykonuj = True Then
Linie
ElseIf mnuPunkt.Checked And Wykonuj = True Then
Punkty
ElseIf mnuOkrag.Checked And Wykonuj = True Then
Okregi
End If
End Sub
Instrukcja |
Procedura ta wykonywana jest automatycznie co określony czas, opisany cechą Interval obiektu tmeZegar. Wykonanie procedury polega na sprawdzeniu, która komenda z menu Opcje została wybrana oraz czy został wciśnięty klawisz Start. Sprawdzenie tych warunków następuje poprzez określenie wartości cechy Checked każdej z pozycji menu Opcje (mnuPunkt, mnuLinia, mnuOkrag) oraz sprawdzenie wartości zmiennej Wykonuj (określającej czy został wciśnięty klawisz Start). Jeżeli jednocześnie spełnione są dwa warunki tzn. cecha Checked badanego w danym warunku obiektu i wartość zmiennej Wykonuj mają wartość True to wywoływana jest odpowiednia procedura. Każdy z warunków rozpoczyna się słowem If lub ElseIf kończy zaś słowem Then (np. ElseIf mnuLinia.Checked = True And Wykonuj = True Then), po którym następuje nazwa procedury do wywołania (np. Linie). Listę warunków kończymy End If. |
Do procedury Form_Load() formy frmGrafika wpisz następujący kod:
Sub Form_Load ()
Wykonuj = False
End Sub
Instrukcja |
Procedura ta wykonywana jest podczas ładowania do pamięci komputera formy frmGrafika tworzonego programu. Przypisuje ona zmiennej Wykonuj wartość False. Zabiezbiecza to program przed automatycznym uruchomieniem procedur graficznych bez wykonania wyboru i jego potwierdzenia - klawiszem Start przez użytkownika. |
Do dyrektywy General w sekcji declarations formy frmGrafika wpisz następujący kod:
Option Explicit
Dim PozycjaX
Dim PozycjaY
Dim Wykonuj
Dim Czerwony
Dim Zielony
Dim Niebieski
Instrukcja |
W tej części deklarujemy zmienne, które będą wykorzystywane przez więcej niż jedną procedurę. |
Utwórz nową procedurę Punkty(), do której wpisz następujący kod:
Sub Punkty ()
Czerwony = 255 * Rnd
Zielony = 255 * Rnd
Niebieski = 255 * Rnd
PozycjaX = Rnd * frmGrafika.ScaleWidth
PozycjaY = Rnd * frmGrafika.ScaleHeight
PSet (PozycjaX, PozycjaY), RGB(Czerwony, Zielony, Niebieski)
End Sub
Instrukcja |
Procedura ta rysuje punkty o podanej pozycji i kolorze. Zarówno kolor jak i pozycja punktu są przypadkowe. Kolor wyliczany jest przez funkcje RGB na podstawie wartości barw składowych (kolorów: czerwonego, zielonego i niebieskiego). Wartości składowych przechowują zmienne: Czerwony, Zielony i Niebieski wyliczane przy każdym wywołaniu procedury na nowo w poniższych liniach kodu. Czerwony = 255 * Rnd Zielony = 255 * Rnd Niebieski = 255 * Rnd Funkcja Rnd losuje liczbę z przedziału od 0 do 1, co po pomnożeniu przez 255 daje przedział od 0 do 255, który to przedział określa wszystkie możliwe wartości barw składowych. Pozycja punktu również jest wyliczana przy każdym uruchomieniu procedury i przechowywana w zmiennych PozycjaX i PozycjaY, co realizują poniższe linie kodu. PozycjaX = Rnd * frmGrafika.ScaleWidth PozycjaY = Rnd * frmGrafika.ScaleHeight Przedział od 0 do 1 podawany przez funkcję Rnd jest rozszerzany do wewnętrznych rozmiarów formy (odpowiednio w kierunku poziomym i pionowym). Własności ScaleWidth i ScaleHeight przechowują rozmiary wewnętrzne formy (wysokość i szerokość po odliczeniu listwy tytułowej, paska menu oraz obramowań. Punkt na ekranie rysowany jest funkcją PSet na współrzędnych określonych przez zmienne PozycjaX, PozycjaY o kolorze wyliczonym na podstawie składowych funkcją RGB. |
Utwórz nową procedurę Linie(), do której wpisz następujący kod:
Sub Linie ()
Dim pozycjax1, pozycjax2, pozycjay1, pozycjay2
Czerwony = 255 * Rnd
Zielony = 255 * Rnd
Niebieski = 255 * Rnd
PozycjaX1 = Int(frmGrafika.ScaleWidth * Rnd + 1)
PozycjaY1 = Int(frmGrafika.ScaleHeight * Rnd + 1)
PozycjaX2 = Int(frmGrafika.ScaleWidth * Rnd + 1)
PozycjaY2 = Int(frmGrafika.ScaleHeight * Rnd + 1)
Line(PozycjaX1,pozycjay1)-(pozycjaX2,pozycjaY2),RGB(Czerwony, Zielony, Niebieski)
End Sub
Instrukcja |
Procedura ta rysuje linie od ostatniej pozycji menu lub punktu 0,0 do pozycji podanej jako argument funkcji Line. Kolor i pozycja wyliczane są w ten sam sposób co w procedurze Punkty, |
Utwórz nową procedurę Okregi(), do której wpisz następujący kod:
Sub Okregi ()
Dim Promien
Czerwony = 255 * Rnd
Zielony = 255 * Rnd
Niebieski = 255 * Rnd
PozycjaX = ScaleWidth / 2
PozycjaY = ScaleHeight / 2
Promien = ((PozycjaY * .9) + 1) * Rnd
Circle (PozycjaX, PozycjaY), Promien, RGB(Czerwony, Zielony, Niebieski)
End Sub
Instrukcja |
Procedura ta rysuje okręgi na podanej pozycji o określonym promieniu i kolorze. Kolor jest wyliczany tak samo jak w dwóch poprzednich procedurach. Położenie środka wszystkich okręgów jest stałe i umieszczone w środku formy. PozycjaX = ScaleWidth / 2 PozycjaY = ScaleHeight / 2 Promień jest przypadkowy i wyliczany z zależności. Promien = ((PozycjaY * .9) + 1) * Rnd |
Uruchomienie programu Grafika
Uruchom program Grafika.
Wybierz z menu Opcje komendę uaktywniającą rysowanie punktów, linii, okręgów lub prostokątów.
Uruchom demonstrację klikając na przycisk Start.
Kliknij na przycisku Stop, aby zatrzymać rysowanie.
Powtórz operacje 2, 3 i 4 dla innej komendy z menu Opcje.
Zakończ działanie programu wybierając komendę Koniec z menu Opcje.
Tworzenie pliku wykonywalnego (Grafika.exe)
Wybierz z menu File opcję Make EXE File.
Zapamiętaj plik pod nazwą Grafika.exe.
Zakończ działanie Visual Basic wybierając z menu File opcję Exit.
Ćwiczenie końcowe
Zmień program, tak aby powstała nowa pozycja w menu Opcje pod nazwą Przypadek. Wybór tej komendy ma powodować przypadkowe uruchamianie procedur Punkty, Linie, Okregi i Prostokaty po naciśnięciu klawisza Start.
5
9