Magazyn komputerowy PTiKuś
www.ptik.ivg.pl
#3 - Grudzień

Visual Basic

Lekcja 2

Witajcie! Oto druga lekcja programowania w Visual Basicu. Mam nadzieję, że uporaliście się z zadaniem domowym. Teraz obiecane dokończenie programu...

Napisaliśmy program w którym po naciśnięciu przycisku "Pytanko" program wyświetla komunikat "Czy mnie lubisz ?" z ikonką pytania i przyciskami Tak – Nie, oraz o tytule „Małe pytanko”. Tak więc kod wygląda tak:

Private Sub cmdPytanko_Click
x = msgbox("Czy mnie lubisz ?",vbQuestion+vbYesNo,"Małe Pytanko")
End Sub

No to odpalamy nasz program i co? Naciskamy przycisk - dostajemy pytanie, dajemy odpowiedź ale nic się nie dzieje... Chmmm. Co by tu zrobić. Może spróbujmy dopisać drugiego message Boxa z odpowiedzią .

Private Sub cmdPytanko_Click
x = msgbox("Czy mnie lubisz ?",vbQuestion+vbYesNo,"Małe Pytanko")
y = msgbox("Fajnie, że mnie lubisz ! ",vbExclamation,"Małe pytanko")
End Sub

Odpalamy nasz program. Odpowiadamy na pytanie komputera "Tak". I udało się ! Hurra ! Niestety. Nasz program jest zły. Dlaczego? Spróbuj odpowiedzieć komputerowi "Nie". I co? Ale dlaczego? Prześledźmy kod programu:
pierwsza linijka- wiadome deklaracja zdarzenia
druga linijka - program ma wyświetlić komunikat z pytaniem po odpowiedzi:
trzecia linijka - program ma wyświetlić podziękowanie.
czwarta linijka - koniec

Faktycznie bez sensu - a może by dopisać czwartą linijkę z odpowiedzią "Strasznie mi przykro".   E tam to by było jeszcze głupsze. Po daniu odpowiedzi najpierw zobaczylibyśmy komunikat "Fajnie...", a za chwilę "Przykro mi".

Musimy zastosować funkcję warunkową IF. O niej będzie więcej w następnych lekcjach. Na razie musisz wiedzieć, że IF znaczy (Jeśli). Chyba już przeczówacz do czego będzie służyć. Tak, to ona zdecyduje o tym co ma zostać wyświetlone. Ale jak?

Musisz teraz wrócić do poprzedniej lekcji i zobaczyć co zwraca funkcja MsgBox. Jak to co zwraca? Ach. Nie wytłumaczyłem jeszcze tego. Przed każdym msgBox stoi pewna zmienna (np. x=msgbox(...)). Zwraca tzn. zapisuje do x. Jeśli Ty naciśniesz przycisk Tak wtedy x=6 a jeśli Nie wtedy x=7 (dlaczego - zobacz co zwraca MsgBox !). Tak nasz vbYes (= 6) to Tak a vbNo (= 7) to Nie. Czy wszystko się zgadza? Myślę, że tak ! No i teraz funkcja IF ma rozstrzygnąć co się stanie gdy x=6 i gdy x=7.

UWAGA !!! Potrzebna nam tu będzie jeszcze jedna funkcje (BARDZO WAŻNA). W kolejnych lekcjach dowiesz się więcej o tej funkcji.    Praktycznie każdy program musi ją zawierać. Jest to funkcja DIM. funkcja jest odpowiedzialna za pamiętanie. O co chodzi. Zmienna x może mieć wartości 6 lub 7. I tu właśnie ma ona zapamiętać co wybrałeś - czy 6 czy 7. Podam to na przykładzie:

Private Sub cmdPytanko_Click
x = msgbox("Czy mnie lubisz ?",vbQuestion+vbYesNo,"Małe Pytanko")
'w linijce powyżej rozstrzyga się sprawa o x. Jeśli na pytanie odpowiesz tak x=6, a jeśli Nie to x=7. Niestety, gdy dotrze do tej linijki x=0 gdyż program nie ma obowiązku zapamiętania x
End Sub

A więc jak to zrobić aby było dobrze? Po prostu dopisujemy DIM x - (Pamiętaj x)

Private Sub cmdPytanko_Click
Dim x
x = msgbox("Czy mnie lubisz ?",vbQuestion+vbYesNo,"Małe Pytanko")
'teraz x=7 aż do zakończenia tej procedury (czyli do End Sub)
End Sub

Czyli nasz program wygląda tak:

Private Sub cmdPytanko_Click
Dim x
x = msgbox("Czy mnie lubisz ?",vbQuestion+vbYesNo,"Małe Pytanko")
End Sub

Teraz dodamy instrukcję IF. Ale przed tym musimy poznać jej składnię:

If x=6 then
y = msgbox("Fajnie, że mnie lubisz ! ",vbExclamation,"Małe pytanko")
End If
If x=7 then
z = msgbox("Strasznie mi przykro...",vbExclamation,"Małe pytanko")
End IF

Przetłumaczmy to na polski:

Jeśli x będzie równy 6 to
Komunikat z tekstem "Fajnie...", ikonką wiadomości i tytule "Małe pytanko"
Zakończenie instrukcji po jeśli = 6
Jeśli x będzie równy 7 to
Komunikat z tekstem "Przykro mi...", ikonką wiadomości i tytule "Małe pytanko"
Zakończenie instrukcji jeśli = 7

W takim razie nasz program będzie wyglądał tak :

Private Sub cmdPytanko_Click
Dim x
x = msgbox("Czy mnie lubisz ?",vbQuestion+vbYesNo,"Małe Pytanko")
If x=6 then
y = msgbox("Fajnie, że mnie lubisz ! ",vbExclamation,"Małe pytanko")
End If
If x=7 then
z = msgbox("Strasznie mi przykro...",vbExclamation,"Małe pytanko")
End IF
End Sub

Teraz cały program tłumaczę jeszcze raz:

Wyświetl komunikat z pytaniem (Tak=6, Nie=7)
Jeśli x będzie równy 6 to
Komunikat z tekstem "Fajnie...", ikonką wiadomości i tytule "Małe pytanko"
Zakończenie instrukcji jesli = 6
Jeśli x będzie równy 7 to
Komunikat z tekstem "Przykro mi...", ikonką wiadomości i tytule "Małe pytanko"
Zakończenie instrukcji jeśli.
Koniec procedury

Prawda, że logiczne?

W tej lekcji poznałeś dwie nowe funkcje - DIM oraz IF. O DIM-ie dowiesz się wszystko w następnej lekcji. O IF-ie troszeczkę później.

W tej lekcji nie zadaję zadania, gdyż nie omówiłem tutaj szczegółowo żadnej z funkcji. Poćwicz sobie jedynie to co poznałeś.

Lekcja 3

Właśnie dotarłeś do lekcji 3 mojego kursu. Jak obiecałem na tej lekcji poznasz szczegółowe zastosowanie funkcji DIM. No więc zaczynamy

Jak pamiętasz funkcja DIM ma zapamiętywać co w danej chwili znajduje się w zmiennej. Teraz pytanie. Czy do poniższego kodu muszę dodać instrukcję DIM?

x=7
if x=6 then msgbox("Witaj")

Odpowidź brzmi NIE ! Dlaczego - przecież program musi wiedzieć, że x=7. PAMIĘTAJ - DIM służy do pamiętania zmiennych a nie stałych. Przecież x zawsze będzie równy 7 ! To jest zadeklarowane w pierwszej linijce. Program dochodząc do linijki 2 napotyka instrukcję IF - czyli jeśli x=6 ... Program więc cofnie się, aby sprawdzić ile to jest x. Linijka wyżej - oświadczenie, że x=7. A poniżej trzeba zastosować instrukcję DIM ?

x = msgbox("Czy mnie lubisz ?",vbQuestion+vbYesNo,"Małe Pytanko")
If x=6 then
y = msgbox("Fajnie, że mnie lubisz ! ",vbExclamation,"Małe pytanko")
End IF

TAK! To jest nawet przykład z ostatniej lekcji. Ale myślę, że teraz kapniesz o co chodzi. Dochodzimy do linijki 2 i mamy instrukcję IF. Teraz program musi sprawdzić ile to jest x. Wraca się więc linijkę wyżej i widzi x=msgbox(...). Niestety - program w tym momencie nie pamięta czy wybrałeś Tak czy też Nie. Przecież od tego zależy wartość x. Tak więc program nie wiedząc co jest w x - przyporządkowuje mu wartość 0 i program jest do bani. Tak więc MUSISZ dodać na początku programu instrukcję DIM x.

Wiem ze swojego doświadczenia, że łatwo zapomnieć o dopisaniu tej funkcji. Później musiałem dochodzić gdzie tkwi błąd w moim programie. Jednak Visual Basic 6 (i chyba 5 też) oferuje funkcję przypominania. Tzn. jeśli nie dodamy instrukcji DIM która będzie potrzebna VB zasygnalizuje błąd. Warto ją włączyć. Wystarczy z menu wybrać Tools - Options. I teraz zaznazcmy funkcję "Require Variable Declaration". Od tej pory VB zawsze nam przypomni o zapomnianym DIM-ie.

No! Pierwsze zastosowanie DIM-a z głowy. Musisz jednak wiedzieć, że DIM może przechowywać inne dane. Do tej pory wiesz, że ta instrukcja przechowuje dane liczbowe. Tak jak w powyższych przykładach miała zapamiętać czy x=6 czy 7. Ale trzeba wiedzieć, że DIM może przechowywać dane innego typu. Oto one:

 
Boolean Przetrzymuje True lub False
Byte Liczby całkowite z zakresu od 0 do 255
Currency Liczby z zakresu -922337685477,5808 do + ( -||- )
Date Data od 01.01.0100 - 31.12.9999
Decimal Liczba zapisana z dokładnością do 28 liczb po przecinku
Double Liczba z zakresu -1,79769313486232E+308 do + ( -||- )
Integer Liczba z zakresu od -32768 do 32767
Single Liczba z zakresu -3402823E+38 do + ( -||- )
String Dane znakowe (alfanumeryczne)
Variant Dowolne - nie musimy tego pisać gdyż Variant jest domyślnie

Funkcję DIM deklarujemy następująco:

DIM x as typ

Jak widziałeś wcześniej w zadaniu pisaliśmy samo DIM x. Jest to równoznaczne z zapisem:

DIM x as Variant  -  gdyż variant jest domyślne.
Od tej pory będziemy stosować następujący zapis:
DIM x as Byte   - dlaczego? Pomyślmy... Jakie wartości może przyjąć x ? Tylko 6 i 7. A więc Byte jest najmniejszym zakresem spełniającym nasze kryteria. A dlaczego nie zostawić po prostu DIM x ?  Instrukcja DIM x jest bardziej pamięciożerna przez co program będzie działał trochę wolniej. Na szybkich komputerach i małych programach nie odczujemy tego. Jeśli jednak przyjdzie nam napisać objętościowo duży program na wolny komputer, będzie on działał trochę wolniej niż z poprawnymi instrukcjami DIM.  Uffff... No myślę, że kapujecie o co chodzi. Tak więc pamiętajcie. Stosujcie najmniejszy zakres spełniający kryteria zmiennej !!!!

A co się stanie gdy pomylimy sobie zakresy? Np gdy zmienna x będzie mogła mieć wartości 6 i 7 a zakresem będzie typ (Boolean - czyli Prawda lub Fałsz) ? Spróbujmy.

Na formie stwórz przycisk. Kliknij na niego dwukrotnie i wpisz:

Dim x As Boolean
x = MsgBox("Co wybierasz ?", vbYesNo)
c = MsgBox(x, vbCritical)

Przeanalizujmy kod. Pierwsza linijka - deklarujemy zmienną dla wartości True lub False.
Druga linijka - znany nam MessageBox z pytaniem. Pamiętaj, że zależnie od naszego wyboru x powinien wynosić 6 lub 7
Trzecia linijka. Co to błąd ? x nie jest wzięte w cudzysłów ?! Nie to nie błąd. Nie chcę aby powstał komunikat o treści "x" ale żeby komunikat podał nam co jest w x. Innymi słowy mówiąc powinien pojawić się komunikat z treścią: "6" lub "7". No to uruchamiamy nasz program i co? Program zamiast 6 lub 7 pokazał jakieś True! Właśnie oznacza to że mamy źle zadeklarowaną zmienną x. Zmieńmy więc instrukcję DIM x as boolean na DIM x as byte. I co teraz? Uruchom program, odpowiedz na pytanie twierdząco. I co jest 6 ? A przecząco - jest 7! Tak wszystko działa jak trzeba. Myślę, że wiesz już coś o deklarowaniu zmiennych. Okazję do poćwiczenia będziemy mieć w następnej lekcji.

Ale przed zakończeniem obecnej lekcji muszę Wam jaśniej wytłumaczyć o co chodziło z tym MsgBox-em wyświetlającym zmienną.

Napiszmy mały program: Jak zwykle na formie przycisk. 2x na niego i piszemy:

to_co_w_msgBox = "Co jest?"
c = MsgBox(to_co_w_msgBox)

Uruchamiamy - i dostajemy komunikat "Co jest? ". A teraz w message boxie dodajmy cudzysłowy: c=MsgBox("to_co_w_msgBox"). I co teraz? Dostajemy komunikat "to_co_w_msgBox" - no myślę, że zrozumiałeś o co chodzi !

Lekcja 4

Witajcie po raz kolejny. W dzisiejszej części kursu nauczycie się posługiwać TextBox-em oraz Label-em (Etykietą). Napiszemy prosty program, w którym będziemy mieć TextBox-a w którego trzeba będzie wpisać liczbę. Po naciśnięciu przycisku, liczba zostanie podniesiona do kwadratu, a wynik zobaczymy w polu Label.

Co to jest Label? Właśnie - label znaczy etykieta. Jest to pewne pole tekstowe, w którym widnieje jakiś tekst. Tym różni się od pola tekstowego, że nie możemy edytować jego zawartości. Tak więc TextBox będzie służył do wpisywania tekstu przez nas, a w label komputer zwracał nam będzie odpowiedź (Której oczywiście nie będzie się dało edytować). Tak więc zaczynamy:

Odpalamy VB. Na formie układamy (gdzieś na dole) przycisk - nadajemy mu nazwę cmdLicz, a w Caption wpisz Licz. No mamy przycisk. Tylko gdzie będziemy teraz wpisywać liczbę ? Oczywiście w pole tekstowe. Ale jak? Musimy go odnaleźć na pasku narzędzi (pamiętaj - wszystko co układamy na formie jest po lewej stronie). Jest to biały prostokąt z wpisanymi literkami "ab". Widzisz? Nie? Drugi od góry, druga kolumna. No! Teraz ustawmy go gdzieś na formie. Najlepiej u góry. Ustawia się go tak samo jak przycisk (CommandButton). O jest TextBox. Domyślnie wpisane jest tam Text1. No to musimy to zmienić. Nie szukaj Caption ! Odpowiednikiem tego jest tutaj Text. Odnajdź go w oknie properties. Teraz wyczyść pole. No mamy czyściutkiego texbox-a. Teraz zmieńmy jego nazwę np. na txtLiczba. OK. Pomyślmy teraz przez chwilę. W pole tekstowe wpiszę np. 7, przycisnę przycisk licz i co? No właśnie - i co? Możemy zastosować funkcję MsgBox, aby wyświetlała odpowiedź. E tam. Spróbujcie sami. Ja na tej lekcji od razu chcę Was nauczyć coś o funkcji Label. Tak więc na formie układamy Label. Jest on widoczny na pasku narzędzi jako duża litera "A", tak, to ta obok TextBox-a. I co - to tylko jakieś szare pole bez kropek. Widzimy w nim napis Label1 - zmieńmy to na "Twój wynik to:" oczywiście w opcji Caption. Nadajemy mu nazwę lblStalyTekst i zmniejszamy pole tak aby obejmowało jedynie tekst. Obok niego postawmy drugie pole Label, nadajmy mu nazwe lblWynik i wyczyśćmy zawartość (Caption). Aby wszystko elegancko wyglądało zmień etykietę Formy na "Do kwadratu". 

Teraz zajmiemy się kodem. Program zacznie liczyć po naciśnięciu przycisku licz. Tak więc kod umieścimy wewnątrz niego. Klikamy więc dwukrotnie na przycisku i pomyślmy. Co nasz program ma robić? Ma podnieść liczbę wpisaną do pola tekstowego do kwadratu i wynik wyświetlić w polu label. Wyglądać to będzie tak:

lblWynik.Caption = txtLiczba ^ 2

Co to znaczy? Otóż przed przeliczeniem w lblwynik.Caption nie ma nic. Chyba wiesz co to jest lblWynik? Nie. To jest nasze pole Label w którym nie ma nic wpisanego. Dobra - ale co to jest w takim razie to Caption ? A pamiętasz jak kasowałeś zawartość pola Label? Właśnie w caption. Jeśli byś w caption wpisał np ble,ble,ble to na twojej  etykiecie pojawiłby się takiż tekst. My teraz chcemy aby w naszej etykiecie pojawił się wynik. I właśnie do tego go teraz zmuszamy. Po prawej stronie zwykłe równanie czyli nasza liczba do kwadratu. Uruchom program - i co działa?

Pamiętaj, że w okienko textowe musisz wpisać jakąś liczbę inaczej wyjdzie błąd. Kiedyś nauczę Was jak zapobiegać takim przypadkom, na razie jednak musisz poznać podstawy.

ZADANIE DOMOWE

Napisz program z dwoma polami tekstowymi, czterema przyciskami i jednym polem label. Program ma wykonywać pewne działania matematyczne. Przyciski kolejno powinny wykonywać funkcje: dodawanie, odejmowanie, mnożenie i dzielenie liczb podanych w textbox-ach. Wynik oczywiście powinniśmy dostać w polu Label.

UWAGA !!! Przy dodawaniu będą pewne problemy. Mianowicie jeśli w pierwsze pole textowe wpiszesz 4 a w drugie 6, to po zsumowaniu nie ujrzysz liczby 10, a 46. Dlaczego? Visual Basic myśli, że operujesz na literach i dodajesz je. Musisz programowi powiedzieć, że to co wpiszesz w pole tekstowe jest liczbą. Służy do tego funkcja CSng. Jak ją użyć:

Private Sub cmddodaj_Click()
Dim a, b As Single
a = CSng(txta)
b = CSng(txtb)
lblwynik = a + b
End Sub

Przyjąłem, że pierwszy textbox nazywa sie txta a drugi txtb.
W tym momencie przyporządkowujesz zmiennej "a" to co jest w textbox-ie1 jako liczbę. Pamiętaj, że w Textbox-ie jest zawsze tekst (liczba w końcu to też tekst) . Musisz ten tekst dopiero przerobić na liczbę, a dopiero potem wykonywać działania arytmetyczne.

Tutaj zamieszczam gotowe zadanie jakbyś nie mógł szczaić o co chodzi!

Aha, zapomniałem napisać, jak uruchomić zapisany projekt. Po rozpakowaniu programu, uruchamiamy plik z rozszerzeniem VBP (nie frm !).

Miłej pracy i do następnego kursu !

Slash
slash@ptik.ivg.pl 
http://www.ptik.ivg.pl 

Copyright (C) 2000 by PTiK
Wszelkie prawa zastrzeżone.
Kopiowanie tekstów i grafiki bez zgody autora zabronione !