UKO Użytkowanie Komputerów
Visual Basic Lab 7
Projekty z dzisiejszych zajęć dają okazję do zapoznania się z następującymi elementami pracy z Visual Basic'iem:
kontrolki pola rysunku i obrazu;
metody rysowania;
rysowanie punktów, linii, płaskich figur geometrycznych;
W Visual Basicu występują dwie kontrolki, często ze sobą mylone:
kontrolka rysunku (Image)
kontrolka obrazu (PictureBox)
Spełniają one podobne role, pozwalając na umieszczenie w formie projektowej rysunków pochodzących z plików graficznych. Różnice są następujące:
kontrolka pola rysunku jest bardziej elastyczna, ma więcej możliwości;
kontrolka obrazu lepiej działa na wolniejszych komputerach.
Obsługują one pliki o następujących rozszerzeniach:
BMP, CUR, GIF, ICO, JPEG, JPG, WMF, EMF, RLE.
Najważniejszą właściwością tych kontrolek jest właściwość Picture, zawierająca ścieżkę dostępu do odpowiedniego pliku graficznego. Plik można również załadować posługując się instrukcją LoadPicture.
Przykład VII.1
Instrukcja przypisująca plik graficzny właściwości Picture pola rysunku:
rysTwarz.Picture = LoadPicture(”z:\UKO\Lab7\Buzia.jpg”)
☺
Składnia instrukcji LoadPicture jest następująca:
LoadPicture ([NazwaPlikuGraficznego][, varRozmiar] _
[, varKolor][, varX, varY])
Wywołanie instrukcji LoadPicture bez parametrów usuwa istniejący rysunek z kontrolki.
Tabela VII.1. Wartości stałych varRozmiar argumentu funkcji LoadPicture
Nazwa stałej |
Wartość |
Opis |
vbLPSmall |
0 |
Mała ikona systemowa w rozdzielczości graficznej |
vbLPLarge |
1 |
Duża ikona systemowa w rozdzielczości graficznej |
vbLPSmallShell |
2 |
Określona przez parametry panelu sterowania |
vbLPLargeShell |
3 |
Określona przez parametry panelu sterowania |
vbLPCustom |
4 |
Rozmiar określają argumenty varX i varY |
Zmienne varX i varY są wymagane dla vbLPSmallShell, vbLPLargeShell i vbLPCustom.
Tabela VII.2. Wartości stałych varKolor argumentu funkcji LoadPicture
Nazwa stałej |
Wartość |
Opis |
vbLPDefault |
0 |
Najwięcej kolorów |
vbLPMonochrome |
1 |
Dwa kolory |
vbLPVGAColor |
2 |
16 kolorów |
vbLPColor |
3 |
256 kolorów |
Stałe varKolor z Tabeli VII.2 należy podawać przy umieszczaniu ikon i definiowaniu kształtów kursora.
W celu dobrego dopasowania obrazka do okienka, należy ustawic właściwość Stretch na True.
Funkcję Load Picture można również użyć do umieszczenia rysunku w tle formy projektowej:
frmRysuj.Picture = LoadPicture(”Tlo.wmf”)
☺
Poniżej przytaczamy przykład stylów wypełniania kształtów otrzymanych za pomocą kontrolki kształtów (Shape)
. Jest ich osiem: Solid, Transparent, Horizontal Line, Upward Diagonal, Downward Diagonal, Cross, Diagonal Cross.
Rys.VII.1. Osiem wartości właściwości FillStyle
Linię w formie można umieścić korzystając z kontrolki Line
. Istotne jej właściwości to:
Border line - określa kolor linii;
Border Style - określa 7 formatów linii:
Border Width - określa szerokość linii w punktach (0.35 mm)
X1, Y1, X2, Y2 - podają współrzędne początku i końca linii.
Projekt formy Kształt, służacej do zapoznania się z różnymi kształtami i wypełnieniami kształtów generowanych przez kontrolkę Shape.
Kontrolka, właściwość |
|
Wartość |
Forma, Name |
|
frmKształt |
Forma, Caption |
|
Właściwości kontrolki kształtów |
Forma, Height |
|
4395 |
Forma, Width |
|
4830 |
Pole listy nr 1, Name |
|
lstWłściwośćShape |
Pole listy nr 1, Height |
|
1260 |
Pole listy nr 1, Left |
|
0 |
Pole listy nr 1, Top |
|
2400 |
Pole listy nr 1, Width |
|
2295 |
Pole listy nr 2, Name |
|
lstWłaściwośćFillStyle |
Pole listy nr 2, Height |
|
1260 |
Pole listy nr 2, Left |
|
2400 |
Pole listy nr 2, Top |
|
2400 |
Pole listy nr 2, Width |
|
2295 |
Etykieta nr 1, Name |
|
etkKształt |
Etykieta nr 1, Caption |
|
Shape |
Etykieta nr 1, Height |
|
420 |
Etykieta nr 1, Left |
|
480 |
Etykieta nr 1, Top |
|
2040 |
Etykieta nr 1, Width |
|
1095 |
Etykieta nr 2, Name |
|
etkWypełnienie |
Etykieta nr 2, Caption |
|
FillStyle |
Etykieta nr 2, Height |
|
420 |
Etykieta nr 2, Left |
|
2880 |
Etykieta nr 2, Top |
|
2040 |
Etykieta nr 2, Width |
|
1410 |
Kształt, Name |
|
kstKształt |
Kształt, Height |
|
1815 |
Kształt, Left |
|
600 |
Kształt, Top |
|
120 |
Kształt, Width |
|
3615 |
Element manu nr 1, Caption |
|
$Plik |
Element manu nr 1, Name |
|
mnuPlik |
Element manu nr 2, Caption |
|
&Koniec |
Element manu nr 2, Name |
|
mnuPlikKoniec |
Rys.VII.2. Aplikacja Kształt umożliwiająca wybór kształtu i wypełnienia
Wydruk VII.1.
1 Private Sub Form_Load()
2 'Inicjalizacja pola listy kształtu
3 lstWłaściwośćShape.AddItem "0 - Rectangle"
4 lstWłaściwośćShape.AddItem "1 - Square"
5 lstWłaściwośćShape.AddItem "2 - Oval"
6 lstWłaściwośćShape.AddItem "3 - Circle"
7 lstWłaściwośćShape.AddItem "4 - Rounded Rectangle"
8 lstWłaściwośćShape.AddItem "5 - Rounded Square"
9
10 'Inicjalizacja pola listy wypełnienia
11 lstWłaściwośćFillStyle.AddItem "0 - Solid"
12 lstWłaściwośćFillStyle.AddItem "1 - Transparent"
13 lstWłaściwośćFillStyle.AddItem "2 - Horizontal Line"
14 lstWłaściwośćFillStyle.AddItem "3 - Vertical Line"
15 lstWłaściwośćFillStyle.AddItem "4 - Upward Diagonal"
16 lstWłaściwośćFillStyle.AddItem "5 - Downward Diagonal"
17 lstWłaściwośćFillStyle.AddItem "6 - Cross"
18 lstWłaściwośćFillStyle.AddItem "7 - Diagonal Cross"
19
20 'W każdej liście ustaw jako domyślny pierwszy element
21 lstWłaściwośćShape.ListIndex = 0
22 lstWłaściwośćFillStyle.ListIndex = 0
23 End Sub
24
25 Private Sub lstWłaściwośćFillStyle_Click()
26 'Zmień wypełnienie na wybrane
27 kstKształt.FillStyle = lstWłaściwośćFillStyle.ListIndex
28 End Sub
29
30 Private Sub lstWłaściwośćShape_Click()
31 'Zmień kształt na wybrany
32 kstKształt.Shape = lstWłaściwośćShape.ListIndex
33 End Sub
34
35 Private Sub mnuPLikKoniec_Click()
36 'Zakończ aplikację
37 Beep
38 End
39 End Sub
Gdy pragniemy sami wykonać rysunek, to możemy posłużyć się metodą Pset, pozwalającą operować na poziomie pojedynczych pikseli.
frmNazwaFormy.Pset [Step](intX, intY), [kolor]
Kolor domyślny jest zgodny z ForeColor formy. Można go określać albo heksadecymalnie albo podając jedną ze stałych:
vbBlack, vbRed, vbGreen, vbYellow,
vbBlue, vbMagenta, vbCyan, vbWhite.
Parametr opcjonalny[Step] powoduje, że podane współrzędne stają się współrzędnymi względnymi, i następne są już liczone względem nich z krokiem równym parametrowi Step.
Przykład VII.1
Wyświetlenie piksela
frmDrawing.Pset (300,350)
☺
Zamiast rysować piksele możemy od razu nazrusować linię, korzystając z metody Line. Oto jej fomat:
frmNazwaFormy.Line [Step] (intX1, intY1) - _
[Step] (intX2, intY2), [kolor] [B] [F]
Pary współrzędnych określają początek i koniec linii. Parametr opcjonalny [kolor] ma identyczne znaczenie jak w metodzie Pset. Parametr [B] oznacza rysowanie prostokąta (Box) ( wtym przypadku współrzędne określają przeciwległe wierzchołki), a parametr [F] wypełnia prostokąt kolorem. Jeśli nie podamy koloru, to musimy jednak dopisać dodatkowy przecinek
Przykład VII.2
Rysowanie wypełnionego prostokąta
frmRysuj.Line (1000, 1000) - (1500,1500), , BF
☺
Metoda Circle służy do rysowania okręgów i elips. Oto jej format:
frmNazwaFormy.Circlr [Step] )intX, intY), sngPromień, _
[kolor, , , ] [sngSpłaszczenie]
Podając parametr spłaszczenia, rusyjemy elipsę, ale wtedy trzeba wstawić odpowiednią liczbę przecinków (oddzielających bardziej zaawansowane i nie omawiane tu parametry).
Rys.VII.3. Aplikacja Drawing rysująca piksele, linie i owale
Wydruk VII.2.
Listing aplikacji Drawing, rysującej piksele, linie, prostokąty i owale.
1 Private Sub plcPiksele_Click()
2 Dim intX As Integer
3
4 'Rysuj czerwone piksele co 100
5 For intX = 1 To 1000 Step 100
6 frmDrawing.PSet (intX, 250), vbRed
7 Next intX
8 End Sub
9
10 Private Sub plcLinia_Click()
11 Dim intX1 As Integer
12 Dim intY1 As Integer
13 Dim intX2 As Integer
14 Dim intY2 As Integer
15
16 intX1 = 200
17 intY1 = 300
18 intX2 = 1000
19 intY2 = 500
20
21 'Rysuj niebieską linię
22 frmDrawing.Line (intX1, intY1)-(intX2, intY2), vbBlue
23 End Sub
24
25 Private Sub plcSchody_Click()
26 Dim intXP As Integer
27 Dim intYP As Integer
28 Dim intXK As Integer
29 Dim intYK As Integer
30 Dim intLicznik As Integer
31
32 intXP = 0
33 intYP = 0
34 intXK = 500
35 intYK = 400
36
37 'Rysuj prostokąty jako magentowe schody
38 For intLicznik = 1 To 10
39 frmDrawing.Line (intXP, intYP) _
40 -(intXK, intYK) _
41 , vbMagenta, B
42 'Przygotuj wartości dla następnego schodka
43 intXP = intXP + 200
44 intYP = intYP + 200
45 intXK = intXK + 200
46 intYK = intYK + 200
47 Next intLicznik
48 End Sub
49
50
51 Private Sub plcOwale_Click()
52 'Narysuj dwie spłaszczone elipsy
53 Circle (1000, 1000), 1000, vbYellow, , , 0.25
54 Circle (2000, 1000), 1000, vbGreen, , , 4
55 End Sub
Literatura:
1. Greg Perry, Visual Basic 6 w 21 dni, Wydawnictwo RM, Warszawa, 1999.
UKO Użytkowanie Komputerów, Lab 7
Visual Basic Lab 7.doc 4/7