UKO Użytkowanie Komputerów
Visual Basic Lab 5
I. Projekt Mysz daje okazję do zapoznania się z następującymi możliwościami Visual Basica:
obsługiwanie przycisków myszy;
obsługiwanie zdarzeń myszy;
programowanie operacji przeciągnij i upuść.
W oknie narzędziowym nie ma kontrolki myszy, gdyż aplikacja ma reagować na zdarzenia związane z działaniem myszy (kliknięcia przycisku, dwukrotne kliknięcie przycisku, przeciąganie i upuszczanie, zmiana pozycji...), a nie na jej właściwości. Poniżej podajemy, jakie wartości należy przypisać właściwości MousePointer obiektu, nad którym przemieszcza się mysz, aby zmienić kształt wskaźnika myszy w trakcie tej operacji.
Nazwa stałej |
Wartość |
Opis |
vbArrow |
1 |
Strzałka standardowa |
vbCrosshair |
2 |
Krzyż nitkowy |
vbIbeam |
3 |
Kursor tekstowy I |
vbIconPointer |
4 |
Ikona |
vbSizePointer |
5 |
Poczwórna strzałka w górę, w dól, w prawo, w lewo |
vbSizeNESW |
6 |
Podwójna strzałka Pn-W i Pd-Z |
vbSizeNS |
7 |
Podwójna strzałka w górę i w dół |
vbSizeNWSE |
8 |
Podwójna strzałka w górę i w dół |
vbSizeWE |
9 |
Podwójna strzałka Pn-Z i Pd-W |
vbUpArrow |
10 |
Strzałka w górę |
vbHourglass |
11 |
Klepsydra |
vbNoDrop |
12 |
Nie upuszczać |
vbArrowHourglass |
13 |
Klepsydra ze strzałką |
vbArrowQuestion |
14 |
Znak zapytania ze strzałką |
vbSizeAll |
15 |
Podwójna strzałka przy zmianie rozmiaru okna |
vbCustom |
99 |
Kształt wskazany przy właściwości MouseIcon |
Visual Basic generuje zdarzenie przesunięcia myszy dopiero po wykryciu przesunięcia po każdym 10-15 twipach.
Krok 1.
Projektujemy formę, pozwalającą użytkownikowi zapoznać się z obsługą myszy.
Rys. V.I.1. Forma do ćwiczeń z obsługą myszy.
Opis kontrolek formy z Rys. V.I.1.
Kontrolka, właściwość |
|
Wartość |
Forma, Name |
|
frmMysz |
Forma, Caption |
|
Mysz |
Forma, Moveable |
|
False |
Forma, MaxButton |
|
False |
Pole tekstowe, Name |
|
txtMysz |
Pole tekstowe, Alignment |
|
2 - Center |
Pole tekstowe, Multiline |
|
True |
Pole tekstowe, Text |
|
Nie bój się myszy! |
Pole tekstowe, Locked |
|
True |
Obraz, Name |
|
obrNiespodzianka |
Obraz, Picture |
|
ścieżka dostępu |
Obraz, Name |
|
obrCos |
Obraz, Picture |
|
ścieżka dostępu |
Przycisk poleceń, Name |
|
plcKoniec |
Przycisk poleceń, Caption |
|
&Koniec |
Kod formy z Rys. V.I.1
01 Private Sub Form_Click()
02 txtMysz.Text = "Kliknąłeś formę!"
03 Beep 'Daj sygnał, że klikąłes formę
04 Print "Kliknąłeś formę!"
05 End Sub
06
07 Private Sub Form_DblClick()
08 txtMysz.Text = "Dwukrotnie kliknąłeś formę!"
09 Beep 'Daj sygnał, że dwukrotnie kliknąłeś formę
10 Beep
11 Print "Dwukrotnie kliknąłeś formę!"
12 End Sub
13
14 Private Sub Form_MouseDown(Button As Integer, _
15 Shift As Integer, _
16 X As Single, Y As Single)
17 'Przycisk myszy naciśnięty
18 txtMysz.Text = "Przycisnąłeś przycisk myszy w X = " _
19 & X & ", Y = " & Y & _
20 " punkcie formy!"
21 End Sub
22
23 Private Sub Form_MouseMove(Button As Integer, _
24 Shift As Integer, _
25 X As Single, Y As Single)
26 'Tu nie wykorzystujemy argumentów myszy
27 txtMysz.Text = "Mysz jest przesuwana...!"
28 End Sub
29
30 Private Sub obrNiespodzianka_Click()
31 'Kliknąłeś obrazek
32 txtMysz.Text = "Kliknąłeś obrazek!"
33 Beep
34 Print "Kliknąłeś obrazek!"
35 End Sub
36
37 Private Sub obrNiespodzianka_DblClick()
38 'Kliknąłeś obrazek dwukrotnie
39 txtMysz.Text = "Kliknąłeś obrazek dwukrotnie!"
40 Beep
41 Beep
42 Print "Kliknąłeś obrazek dwukrotnie!"
43 End Sub
44
45 Private Sub obrNiespodzianka_MouseDown(Button As Integer, _
46 Shift As Integer, _
47 X As Single, Y As Single)
48 'Przycisk myszy naciśnięty nad obrazkiem
49 txtMysz.Text = "Przycisnąłeś przycisk myszy w X = " _
50 & X & ", Y = " & Y & _
51 " punkcie obrazka!"
52 End Sub
53
54 Private Sub obrNiespodzianka_MouseMove(Button As Integer, _
55 Shift As Integer, _
56 X As Single, Y As Single)
57
58 'Mysz jest przesuwana nad obrazkiem...!
59 txtMysz.Text = "Mysz jest przesuwana nad obrazkiem...!"
60 End Sub
61
62 Private Sub Form_DragDrop(Source As Control, _
63 X As Single, Y As Single)
64 'ustaw DragMode obrNiespodzianka na 1-Automatic
65 obrCos.DragMode = 0
66 obrNiespodzianka.DragMode = 1
67 Source.Move X, Y 'upuść obrazek
68 End Sub
69
70 Private Sub obrCos_MouseDown(Button As Integer, _
71 Shift As Integer, _
72 X As Single, Y As Single)
73 'ustaw DragMode obrCos na 0-Manual
74 obrNiespodzianka.DragMode = 1
75 obrCos.DragMode = 0
76 obrCos.Drag 'inicjuje przeciągnij i upuść
77 End Sub
78
79 Private Sub plcKoniec_Click()
80 Dim intReply As Integer
81
82 'Badanie, czy kończymy
83 intReply = MsgBox("Czy na pewno chcesz zakończyć pracę?", _
84 vbYesNo, _
85 "Zakończyć pracę?")
86
87 If (intReply = 6) Then
88 ' Kod, gdy opowiedz Tak
89 Beep
90 End
91 GoTo Koniec
92 Else
93 ' Kod, gdy odpowiedz Nie
94 GoTo Koniec
95 End If
96 Koniec: 'Wyjdź z aplikacji
97 End Sub
Kod zawiera różne procedury związane z aktywnością (zdarzeniami) myszy:
procedury związane z szybkim pojedynczym lub podwójnym naciśnięciem przycisku myszy:
Form_Click() (linia 1)
DblClick() (linia 7)
obrNiespodzianka_Click() (linia 30)
obrNiespodzianka_DblClick() (linia 37)
procedury związane z wciśnięciem i przytrzymaniem przycisku myszy:
MouseDown(Button As Integer, _
Shift As Integer, _
X As Single, Y As Single) (linia 45, 70)
procedury związane z ruchem myszy:
MouseMove(Button As Integer, _
Shift As Integer, _
X As Single, Y As Single) (linia 54)
implementacja automatycznego (a) i ręcznego (b) przeciągania i upuszczania obiektów:
(a) Form_DragDrop(Source As Control, _
X As Single, Y As Single) (linia 62)
(b) obrCos_MouseDown(Button As Integer, _
Shift As Integer, _
X As Single, Y As Single) (linia 70)
Kod związany z przyciskiem poleceń kończącym aplikację pokazany jest w liniach 79 -97.
Procedura badająca zwolnienie przycisku myszy nosi nazwę MouseUp.
Zadanie domowe:
Napisz aplikację wykrywającą wciśnięcie kombinacji przycisków myszy i klawiatury. Szkielet kodu przytaczamy poniżej.
01 Private Sub obrLadny_MouseDown(Button As Integer, _
02 Shift As Integer, _
03 X As Single, Y As Single)
04 Dim intStanShift As Integer
05 intStanShift = Shift And 7 `specjalne AND bitowe
06 Select Case intStanShift
07 Case 1
08 `Kod dla kombinacji z [Shift]
09 Case 2
10 `Kod dla kombinacji z [Ctrl]
11 Case 3
12 `Kod dla kombinacji z [Alt]
13 Case 4
14 `Kod dla kombinacji z [Shift + Ctrl]
15 Case 5
16 `Kod dla kombinacji z [Shift +Alt]
17 Case 6
18 `Kod dla kombinacji z [Ctrl + Alt]
19 Case 7
20 `Kod dla kombinacji z [Shift+Ctrl+Alt]
21 End Select
22 End Sub
II. Projekt Lista daje okazję do zapoznania się z następującymi możliwościami Visual Basica:
korzystanie z pól listy prostej i listy rozwijanej;
korzystanie z pól prostego kombo i rozwijanego kombo;
inicjowanie, dodawanie i usuwanie elementów list;
Kontrolka prostego pola listy
umożliwia wybranie jednego elementu lub więcej niż jednego elementów równocześnie. Do dodawania elementów list najlepiej służy metoda AddItem. Odpowiednie polecenia umieszczamy w procedurze zdarzenia Form_Load. Jeśli okno listy jest zbyt małe i nie widać wszystkich elementów listy, to automatycznie dołączane są paski przewijania. Niezależnie od powyższych czynności, warto usunąć zawartość właściwości LIST kontrolki pola listy. Jeśli tego nie zrobimy, to ta zawartość będzie wykorzystywana jako początkowy fragment listy.
Ustawienie właściwości Sorted na True, spowoduje posortowanie listy alfabetycznie. Metoda RemoveItem usuwa elementy listy, a ListCount znajduje liczbę elementów listy.
Lista rozwijana zajmuje w formie tylko jedną linię do czasu, aż użytkownik otworzy listę i wyświetli jej zawartość
Proste pole kombo, wygląda jak proste pole listy z dołączonym polem tekstowym.
Pole kombo rozwijane oszczędza miejsca na ekranie, bo jest zwinięte i rozwija się tylko na żądanie użytkownika.
Wszystkie trzy powyższe obiekty obsługuje kontrolka pola kombo
, a różnice miedzy nimi uzyskuje się za pomocą wyboru wartości właściwości Style
Nazwa stałej |
Wartość |
Opis |
DropDown Combo |
0 |
Pole kombo rozwijane |
Simple Combo |
1 |
Proste pole kombo |
DropDown List
|
2 |
Lista rozwijana |
Rys. V.II.1 Projekt formy do pracy z listami
Opis kontrolek formy z Rys. V.II.1.
Kontrolka, właściwość |
|
Wartość |
Forma, Name |
|
frmKolory |
Forma, Caption |
|
Kolory |
Forma, MaxButton |
|
False |
Forma, Moveable |
|
False |
Pole tekstowe, Name |
|
txtKolory |
Pole tekstowe, Alignment |
|
0 - Left Justify |
Pole tekstowe, Font |
|
Zmień na inny niż w lstKolory |
Pole tekstowe, Locked |
|
True |
Pole tekstowe, Multiline |
|
False |
Pole tekstowe, Text |
|
|
Pole etykiety, Name |
|
etkKolory |
Pole etykiety, Alignment |
|
2 - Center |
Pole etykiety, Caption |
|
Kolory |
Pole etykiety, MousePointer |
|
vbCrossHair |
Pole etykiety, Name |
|
etkProstePoleListy |
Pole etykiety, Alignment |
|
0 - Left Justify |
Pole etykiety, Caption |
|
Proste pole listy: |
Pole etykiety, Name |
|
etkPoleListyRozwijanej |
Pole etykiety, Alignment |
|
0 - Left Justify |
Pole etykiety, Caption |
|
Pole listy rozwijanej: |
Pole etykiety, Name |
|
etkProsteKombo |
Pole etykiety, Alignment |
|
0 - Left Justify |
Pole etykiety, Caption |
|
Pole prostego kombo |
Pole etykiety, Name |
|
etkKomboRozwijane |
Pole etykiety, Alignment |
|
0 - Left Justify |
Pole etykiety, Caption |
|
Pole rozwijanego kombo |
Pole listy, Name |
|
lstKolory |
Pole listy, ItemData |
|
|
Pole listy, ToolTipText |
|
Proste pole listy |
Pole listy, Name |
|
lsrListaRozwijana |
Pole listy, ItemData |
|
|
Pole listy, Text |
|
|
Pole listy, ToolTipText |
|
Lista rozwijana |
Pole listy, Name |
|
lkpProsteKombo |
Pole listy, ItemData |
|
|
Pole listy, Text |
|
|
Pole listy, ToolTipText |
|
Proste kombo |
Pole listy, Name |
|
lkrRozwijaneKombo |
Pole listy, ItemData |
|
|
Pole listy, Text |
|
|
Pole listy, ToolTipText |
|
Rozwijane kombo |
Przycisk poleceń, Name |
|
plcKoniec |
Przycisk poleceń, Caption |
|
&Koniec |
Przycisk poleceń, ToolTipText |
|
Przycisk kończący aplikację |
Kod formy z Rys. V.II.1
1 Private Sub Form_Load()
2 'Startowe wartości list
3
4 'Dodawanie elementów do prostego pola listy
5 lstKolory.AddItem "Czerwony"
6 lstKolory.AddItem "Niebieski"
7 lstKolory.AddItem "Zielony"
8 lstKolory.AddItem "Żółty"
9 lstKolory.AddItem "Pomarańczowy"
10 lstKolory.AddItem "Biały"
11 lstKolory.AddItem "Fioletowy"
12 lstKolory.AddItem "Czarny"
13 lstKolory.AddItem "Amarantowy"
14 lstKolory.AddItem "Indygo"
15 lstKolory.AddItem "Śliczny"
16 lstKolory.AddItem "Sztuczny"
17 lstKolory.AddItem "Seledynowy"
18
19 'Dodawanie elementów do rozwijanego pola listy
20 lsrListaRozwijana.AddItem "Czerwony"
21 lsrListaRozwijana.AddItem "Niebieski"
22 lsrListaRozwijana.AddItem "Zielony"
23 lsrListaRozwijana.AddItem "Żółty"
24 lsrListaRozwijana.AddItem "Pomarańczowy"
25 lsrListaRozwijana.AddItem "Biały"
26 lsrListaRozwijana.AddItem "Abc"
27 lsrListaRozwijana.AddItem "Abra"
28 lsrListaRozwijana.AddItem "Aa"
29
30 'Dodawanie elementów do prostego pola kombo
31 lkpProsteKombo.AddItem "Czerwony"
32 lkpProsteKombo.AddItem "Niebieski"
33 lkpProsteKombo.AddItem "Zielony"
34 lkpProsteKombo.AddItem "Żółty"
35 lkpProsteKombo.AddItem "Pomarańczowy"
36 lkpProsteKombo.AddItem "Biały"
37
38 'Dodawanie elementów do rozwijanego pola kombo
39 lkrRozwijaneKombo.AddItem "Czerwony"
40 lkrRozwijaneKombo.AddItem "Niebieski"
41 lkrRozwijaneKombo.AddItem "Zielony"
42 lkrRozwijaneKombo.AddItem "Żółty"
43 lkrRozwijaneKombo.AddItem "Pomarańczowy"
44 lkrRozwijaneKombo.AddItem "Biały"
45 End Sub
46
47
48 Private Sub lkpProsteKombo_LostFocus()
49
50 Dim intI As Integer
51 Dim N As Integer
52 Dim intR As Integer
53
54 'Dodaje nowy element do listy
55
56 N = lkpProsteKombo.ListCount
57 For intI = 0 To N - 1
58 If (lkpProsteKombo.Text = lkpProsteKombo.List(intI)) Then
59 intR = MsgBox("Taki kolor już istnieje!", _
60 vbCritical, _
61 "Info o kolorze")
62 GoTo Skok
63 End If
64 Next intI
65 lkpProsteKombo.AddItem lkpProsteKombo.Text
66 Skok: 'Zakończ procedurę dodawania koloru do listy
67 End Sub
68 Private Sub lsrListaRozwijana_LostFocus()
69
70 Dim intI As Integer
71 Dim N As Integer
72
73 'Usuwa wybrany element z listy kolorów
74
75 N = lsrListaRozwijana.ListCount
76 For intI = 0 To N - 1
77 If (lsrListaRozwijana.Text = lsrListaRozwijana.List(intI)) Then
78 lsrListaRozwijana.RemoveItem intI
79 GoTo Skok
80 End If
81 Next intI
82 Skok: 'Zakończ usuwanie koloru z listy
83 End Sub
84 Private Sub lstKolory_Click()
85 'Skopiuj wybrany element do pola tekstowego
86 txtKolory.Text = lstKolory.Text
87 End Sub
88
89 Private Sub plcUsuńKolor_Click()
90 'Usuwa wybrany element z listy
91 'Służy do zmiany fokusu
92 End Sub
93
94 Private Sub plcDodajKolor_Click()
95 'Dodaje nowy kolor do listy
96 'Służy do zmiany fokusu
97 End Sub
98
99 Private Sub plcKoniec_Click()
100 Dim intReply As Integer
101
102 'Badanie, czy kończymy
103 intReply = MsgBox("Czy na pewno chcesz zakończyć pracę?", _
104 vbYesNo, _
105 "Zakończyć pracę?")
106
107 If (intReply = vbYes) Then
108 ' Kod, gdy opowiedź Tak
109 Beep
110 End
111 GoTo Koniec
112 Else
113 ' Kod, gdy odpowiedź Nie
114 GoTo Koniec
115 End If
116 Koniec: 'Wyjdź z aplikacji
117 End Sub
UKO Użytkowanie Komputerów, Lab 5
Visual Basic Lab 5.doc 10/10