KURS VISUAL BASICA
Wstęp Co powinieneś wiedzieć aby dobrze wystartować
Lekcja 1
Funkcja wyświetlania komunikatów (MsgBox)
Lekcja 2
CD. MsgBox, wprowadzenie do instrukcji IF i DIM
Lekcja 3
Wszystko o DIM - i trochę o MsgBox-ie
Lekcja 4
TextBox, Label i troszeczkę o konwersji danych
Lekcja 5
Funkcja konwertująca stringi na liczby
Lekcja 6
InputBox
Lekcja 7
Instrukcja IF
Lekcja 8
Operatory logiczne
Lekcja 9
Funkcja Case
Lekcja 10
Komentarze i pętla Do While
Lekcja 11
Pętla Do Until, pętle odwrócone
Lekcja 12
Pętla For
Lekcja 13 Zmiana właściwości komponentów
Lekcja 14
Opcje wyboru
Lekcja 15
Opcje wyboru cd, Funkcja Global
Lekcja 16
Dwie formy
Lekcja 17
Okna dialogowe i kompilacja
Lekcja 18
Wstęp do list wyboru i Combo Box-ów
Lekcja 19
Tablice danych i ScrollBar-y
Lekcja 20
Funkcje czasowe
Lekcja 21
Funkcje matematyczne
Lekcja 22
Funkcje łańcuchowe
Lekcja 23
Funkcje testujące dane i Funkcje konwersji danych
Lekcja 24
Uruchamianie innych programów, starowanie listami napędów, katalogów i plików
Lekcja 25
Funkcja Open, Close, Write
Lekcja 26
Funkcja Input i EOF
Lekcja 27
Funkcje Kill, RmDir, MkDir, File
Lekcja 28
Pole Obrazu
Lekcja 29
Menu
Lekcja 30
Pasek narzędzi
LEKCJA 1
No więc w tej lekcji napiszemy pierwszy program. Do dzieła:
Otwieramy Visual Basic, tworzymy nową aplikację. Chmmm. Co by tu zrobić. No może na
formularz naniesiemy jakiś przycisk. No dobra. Z paska narzędzi (tego po lewej) wybieramy
„CommandButton” – Szary prostokąt (3 rząd, 2 kolumna). No dobra przycisk się wcisnął i co teraz.
Teraz wystarczy przytrzymać lewy przycisk myszy na formularzu i przeciągnąć w którąś ze stron.
Czy widzisz te przerywane linie. To właśnie tu po puszczeniu przycisku myszy ukaże się pierwszy
element naszej aplikacji – Command Button. No fajnie. Stworzyliśmy przycisk o nazwie
Command1. Możesz go teraz przesunąć w dowolne miejsce na formularzu lub go powiększyć. Po
prostu chwyć go i upuść tam gdzie zechcesz. Jeśli chcesz go powiększyć lub pomniejszyć zaznacz
go, pojawią się teraz obok przycisku kwadraciki za które możemy chwycić i dowolnie zmieniać
rozmiar przycisku. Ufffff... Myślę, że skapowałeś o co chodzi. Dobra – ale ten napis jakoś brzydko
wygląda. Zmieńmy go np. na „Witaj”. Ale jak to zrobić. Pewnie myślisz, że teraz zaczniemy
posługiwać się kodem. Nic z tego. Wykorzystamy do tego okienko „Properties”. To po prawej w
środku. Wygląda jak jakaś tabelka. To właśnie tu ustalamy właściwości przycisku. Zabieramy się
do roboty. Zaznacz przycisk na formie. Teraz w okienku „Properties” widzisz pogrubiony napis
Command1 – command button. Oznacza to, że wszystkie poniżej wypisane opcje odnoszą się do
naszego przycisku. Oto krótki opis najważniejszych funkcji :
(name)
W tym polu wpisujemy nazwę identyfikującą nasz przycisk – najlepiej używać skrótu cmd – tak
wię zmieniamy nazwę naszego przycisku na cmdwitaj
caption
Chyba najważniejsza – Tu ustalamy wyrazy które mają znaleźć się na naszym przycisku –
wpisujemy Witaj !
Enabled
Tu ustalamy czy przycisk będzie się dało wcisnąć czy też nie – my oczywiście zostawiamy True
(Prawda)
Font
W tym oknie możemy ustalić czcionkę, wielkość i efekty dla napisu
Height
Wysokość przycisku. Raczej wygodniejsze jest rozciąganie przycisku bezpośrednio na formularzu
Index
Ustala kolejność przeskakiwania focusa. Chodzi o to gdy np. na formularzu ustawimy trzy
przyciski o nazwie cmdJeden, cmdDwa, cmdTrzy i kolejno ustawimy na nie index 1,3,2 to
przeskakując „Tab-em” kolejno podświetlą się przycisk cmdJeden (1), cmdTrzy (2), cmdDwa (3).
Na razie zostawiamy puste.
Left
Określa odległość przycisku od lewej krawędzi ekranu. Wygodniej jest przemieszczać przycisk
bezpośrednio na formie.
Style
Oznacza czy w przycisku będziemy dokonywać przeróbek kosmetycznych – dla eksperymenu
zaznaczmy True
BackColor
Teraz wracamy się prawie do samego początku. Możemy tu zmienić kolor przycisku. Zmieńmy go
np. na kolor czerwony (znajduje się w zakładce pallete)
Top
Określa położenie przycisku od górnej krawędzi ekranu
Width
Określa szerokość przycisku
Visible
Określa czy przycisk ma być widoczny na formularzu. Jeśli zaznaczymy false, to po uruchomieniu
programu zobaczymy pusty formularz. Zostaw więc true
Większość wyżej wymienionych opcji działa także na formularzu. No to spróbujmy. Zaznacz
formularz (To na czym ułożyłeś przycisk). Teraz w oknie „Properties” zobaczyś pogrubiony napis
„Form1 Form”. Oczywiście jeżeli formularz wydaje ci się za mały to go sobie powiększ.
Identycznie jak przycisk. Po prostu chwyć za kwadracik i ciągnij. Chmmm. Jak na razie program
nie wygląda zbyt ciekawie. Na pasku u samej góry formularza widnieje napis „Form1”. Chyba czas
aby to zmienić... Masz już zaznaczoną formę ? No to teraz w oknie Properties znajdź „Caption” – o
jest tu nasze Form1. Zmień to na np. „Mój pierwszy program”. Efekt widać od razu ! Może
zmienimy teraz kolor naszego formularza, co? No dobra – odnajdź funkcję „BackColor”. Teraz
rozwiń zawartość – wybierz zakładkę „Palette” i wybierz dowolny kolor. Dla przykładu jaskrawy
zielony. Ha ! Program zaczyna fajnie wyglądać. Niestety to co pokazałem do tej pory to tylko
umieszczanie składników na formie i upiększanie wyglądu. Ale my chcemy aby ten program coś
robił. Np. wyświetlił komunikat „Witam cię bardzo serdecznie”. Niestety, aby to wykonać musimy
posłużyć się kodem. Tak, koniec zabawy w „składanie” sobie programu. Teraz musimy się nauczyć
podstawowych funkcji. Radzę abyś zapisywał sobie składnie poznanych funkcji gdzieś na kartce.
Chyba, że dobrze znasz angielski... Później pisząc program możesz akurat zapomnieć sobie jak
używało się danej funkcji
No dobra dość tego pieprzenia. Robota czeka.
Chmmm. Kod, kodem – ale gdzie go wpisać. Musimy zastanowić się kiedy ma wyskoczyć
komunikat. Oczywiście po kliknięciu na nasz przycisk. No to kliknijmy na przycisk. I co?
Zaznaczył się tylko. Chmmm. A może dwukrotnie? Jest! Wyskoczyło coś w formie notatnika z:
Private Sub cmdwitaj_Click()
End Sub
Co to do cholery jest!? Tu właśnie będziemy pisać kod. Przeanalizujmy go:
Private Sub oznacza początek wykonywania się kodu – logicznie myśląc End Sub kończy. Ale do
czego jest cmdwitaj1_Click. Chmmm. Cmdwitaj to przecież nazwa naszego przycisku – to właśnie
tu program rozróżni czy posłużyliśmy się naszym przyciskiem czy czymś innym. Jak pewnie wiesz
Click oznacza kliknięcia – a więc kliknięcie na przycisku. Tak, tak – kod wykona się dopiero
wtedy, gdy klikniesz na naszym przycisku. Zaraz, zaraz ale jaki kod? Teraz napiszmy jakiś prosty
kod wyświetlający okienko z napisem „Witam cię bardzo serdecznie”. Napisz coś takiego
(oczywiście między Private Sub cmdwitaj_Click() a End Sub:
x = MsgBox("Witam cię bardzo serdecznie")
Teraz wystartujmy jakoś program. Możemy to zrobić na trzy sposoby. Najprostszy to przycisk play
na pasku narzędzi (tym u góry) Jest to ikonka bodajże 12 z brzegu. Możemy też użyć klawisza F5,
albo z menu wybrać Run-Start. No to do dzieła. Uruchamiamy...
Wow ! Działa, działa, działa !!! Wystartował nasz program. Teraz kliknij na przycisku. I co pojawił
się komunikat? Jest !!! Ale co się rzuca w oko. Na pasku stanu widzimy „Project1”. Trzeba to
zmienić...
Klikamy na ok. i zamykamy uruchomiony program. No... wróciliśmy do kodu. Teraz zamiast x =
MsgBox("Witam cię bardzo serdecznie") wpisz:
x = MsgBox("Witam cię bardzo serdecznie",vbInformation+vbAbortRetryIgnore,"Witaj !")
I co to zmieniło? Sam zobacz. Wystartuj program jeszcze raz. Tak zmieniliśmy tytuł, ale także
dodaliśmy ikonkę obok komunikatu oraz mamy trzy przyciski. Jak ja to zrobiłem – się dziwisz. Oto
przepis:
X = MsgBox(„Jakiś tam tekst”,ikonka + przyciski, „Tytuł”)
Tak wygląda składnia funkcji odpowiedzialnej za wyświetlenie okienka dialogowego.
Oto poszczególne składniki:
X – nazwa zmiennej (O tym w następnej lekcji). Na dziś musisz wiedzieć, w jednej procedurze (w
naszym przypadku na kliknięciu na przycisk) może wystąpić tylko jedna zmienna o nazwie x
Ikonki
vbCritical
Ikonka krytyczna (przekreślone czerwone kółeczko z charakterystycznym dźwiękiem)
vbQuestion
Ikonka pytania (Dymek, a w nim pytajnik)
vbExclamation
Ikonka ostrzegawcza (Żółty trójkąt z wykrzyknikiem)
vbInformation
Ikonka informacji (Dymek a w nim literka „i”)
vbSystemModal
Brak ikonki. Za to na pasku tytułowym pojawia się ikonka windows
Przyciski
vbOKonly
Tylko OK. – nie trzeba tego pisać. On i tak jest używany domyślnie
vbOKCancel
Przycisk OK. i Anuluj
vbAbortRetryIgnore
Przyciski Przerwij, Ponów próbę i Zignoruj
vbYesNoCancel
Przyciski Tak, Nie, Anuluj
vbYesNo
Tylko przyciski Tak i Nie
vbRetryCancel
Tylko przyciski Ponów i Anuluj
MsgBox zwraca:
1 vbOK
2 vbCancel
3 vbAbort
4 vbRetry
5 vbIgnore
6 vbYes
7 vbNo
To będzie Ci potrzebne (chodzi mi o to co zwraca MsgBox) w następnej lekcji gdy poznasz funkcję
warunkową If.
ZADANIE DOMOWE:
Napisz program z dwoma przyciskami Jeden o nazwie „Witaj” i kolorze czerwonym, a drugi
„Pytanko” i kolorze jasno niebieskim. Klikając na pierwszym powinien wyświetlić się komunikat
„Jestem spoko” z ikonką informacyjną i przyciskiem OK. Zmień tytuł na „Przywitanie”. A drugi z
tekstem „Czy mnie lubisz” z ikonką pytania i przyciskami Tak – Nie, oraz o tytule „Małe pytanko”.
W następnej lekcji nauczymy rozpoznawać program co wybrałeś. Tak np. Gdy na pytanie czy mnie
lubisz odpowiesz „tak” program ci podziękuje. Jeśli nie to wyrazi swój żal.
Powodzenia
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ś.
Tak więc do następnego spotkania w lekcji 3
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")
Odpowiedź 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 zaznaczmy 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. (UWAGA !!! Posiadacze wersji VB 5 muszą
to zastosować do wszelkich operacji arytmetycznych – czyli także mnożenie, dzielenie,
odejmowanie itp...) 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.
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 !
LEKCJA 5
Ach.. Jak ten czas leci. To już lekcja piąta kursu VB dla początkujących. Jestem tylko ciekawy czy
zrozumiałeś ostatnio funkcje CSng. Tłumaczę wszystko jeszcze raz.
Najprościej będzie to zrobić na pewnym przykładzie. Zróbmy program z dwoma polami textowymi
(textBoxem), etykietą (Label) i przyciskiem. Nazywamy je kolejno txtliczba1, txtliczba2, lblwynik i
cmdlicz. Program będzie musiał dodać do siebie liczby wpisane w textboxy, a rezultat wyświetlić w
etykiecie. Tak więc w przycisku umieszczamy kod:
lblwynik = txtliczba1 + txtliczba2
Niby wszystko w porządku. Uruchamiamy program. I jak w zdaniu otrzymujemy fałszywy wynik.
Pomyślmy. Co by się stało gdyby zamiast liczb do textbox-ów wpisalibyśmy jakieś litery ?
Spróbujmy. W pierwszy np. wpisz "Al" a w drugi "ina" i zsumuj - co wyszło? Alina? Właśnie, dla
VB znak "+" ma dwojakie znaczenie. W przypadku zwykłych znaków jest to konkatencja, czyli
połączenie dwóch łańcuchów. Wszelkie łańcuchy znaków Visual Basic interpretuje w
cudzysłowach (""), daty w ##, a liczby zostawia same. W tym przykładzie dajesz programowi
instrukcje:
lblwynik = "To co wpisane w textbox1" + "To co wpisane w textbox2"
Dla przykładu jeśli w textboxie1 masz wpisaną liczbę 3 a w textboxie2 liczbę 7 to VB rozumuje:
lblwynik = "3" + "7" - a to daje 37
No więc jak zrobić aby 3+7=10 ? Właśnie tak jak tu jest zapisane - program musi rozumieć:
lblwynik = 3 + 7 - a to da w wyniku 10
No dobra, ale jak to zrobić ? Musimy wiedzieć, że istnieje coś takiego jak konwersja danych. Na
początku mamy daną typu String czyli "3", a po konwersji daną typu Single czyli 3.
Możemy więc program "naprawić" w ten sposób:
Zamiast
lblwynik = txtliczba1 + txtliczba2 wpisać
lblwynik = CSng(txtliczba1) + CSng(txtliczba2)
Wypróbujmy nasz program. Działa jak trzeba ? No uporaliśmy się z tym. Jednak jest bardziej
elegancki (bardziej przejrzysty) sposób:
Dim a,b as single
a = CSng(txtliczba1)
b = CSng(txtliczba2)
lblwynik = a + b
Ta lekcja była krótka, ale bardzo ważna. Musisz zrozumieć to, gdyż bez tego nie będziesz w stanie
pisać programów operujących na liczbach !!!
ZADANIE
Na ostatniej lekcji nie omówiłem opcji związanych z etykietą. Na zadanie macie poznać
najważniejsze opcje tzn. pobawić się nimi - fajnie co?
-BackColor - zmienia kolor tła etykiety
-BorderStyle - efekt wgłębienia
-Caption - chyba wiadomo o co chodzi ;)
-Font - chyba też wiadomo...
-ForeColor - kolor tekstu na etykiecie
LEKCJA 6
Dzisiaj poznamy funkcję InputBox. Jest to komunikat, z wbudowanym polem tekstowym. Może
nas np. zapytać o imię, a my mu od razu odpowiemy. Chcesz spróbować ? No to do dzieła
Jak zwykle tworzymy program z przyciskiem. Wewnątrz niego umieszczamy następujący kod:
Dim x as string
x = InputBox ("Jak masz na imię ?")
Uruchamiamy nasz program i co? Fajne okienko, ale jak zmienić tytuł?
x = InputBox("Jak masz na imię?"," Tutaj tytuł", "Tu domyślna odpowiedź")
Dobra, napiszmy program który pyta się ciebie jak masz na imię, a następnie w MsgBox-ie
przywita nas "Witaj -imię-"
W przycisku umieszczamy następujący kod :
Dim x,y as string
x = InputBox ("Jak masz na imię ?","Przywitanie","Może Marek...")
y = MsgBox ("Witaj_" & x ,vbExclamation,"Przywitanie")
Uruchamiamy i co? Fajnie! Program działa. No tak, ale o co tu chodzi ? Wyjaśniem linijka po
linijce:
1.Deklaracja zmiennych x i y - chyba nie muszę tłumaczyć...
2.Pytanie do użytkownika. To co wpiszesz w pole tekstowe zostanie zapisane do zmiennej x
3.MessageBox z tekstem Witaj -i tu to co w x-
O co chodzi z tym msgboxem? Po otwarciu nawiasu mamy zwykły tekst wpisany w cudzysłów.
Później widzimy jakieś & x. znak & służy do łączenia łańcuchów (podobnie jak +). W tym
momencie łączy on tekst "Witaj" z x-em czyli naszym imieniem. Powstaje więc jeden ciąg znaków
który widzimy w msgBox-ie. Dalej już wiadomo.
-------------------------------------------------------------------------------------------------
Jeśli masz jakiekolwiek pytania w związku z kursem Visual Basica, nie krępuj się - pisz do mnie na
adres: slash@ptik.prv.pl .Twój list nie zostanie bez odpowiedzi. Jeśli nawet nie masz pytań to i tak
napisz czy podoba ci się ten kurs, co chciałbyś w nim zmienić. Napisz w ogóle cokolwiek, abym
wiedział, że ktoś ten kurs czyta.
-------------------------------------------------------------------------------------------------
ZADANIE
Poćwicz sobie funkcje MsgBox, InputBox, przypomnij sobie instrukcję IF.
LEKCJA 7
Witajcie znowu ! Dziś nauczycie się posługiwać funkcją IF. If,if,if - czy ja tego już gdzieś nie
słyszałem? Tak, właśnie tą funkcję miałeś sobie na dzisiaj przypomnieć.
Co byśmy dzisiaj napisali ? Może program, który uruchomisz tylko po podaniu hasła. Fajny
pomysł. Po drodze poznasz jeszcze kilka funkcji. Tak więc zaczynamy...
Teraz pomyślmy. Kiedy i jak mamy podać hasło. Najlepszym sposobem będzie InputBox (też
miałeś go na dziś powtórzyć). Czyli jak zwykle przycisk... Zaraz, zaraz. Ale my chcemy, aby
okienko proszące nas o podanie hasła uruchomiło się przed programem. Jak to zrobić. Pamiętasz
jak wprowadzaliśmy kod do przycisku? Tak - dwa razy click na przycisku. Musisz wiedzieć, że kod
możemy wprowadzać praktycznie do każdego obiektu ustawionego na formie, a także na niej
samej. I tak właśnie zrobimy w naszym przypadku. Kliknijmy dwa razy na formę. Pojawi się coś
takiego:
Private Sub Form_Load()
End Sub
Co to jest? Tu właśnie jest miejsce na wprowadzenie kodu który będzie wykonany przed
załadowaniem się formy (świadczy o tym słowo Load). Tak więc napiszmy funkcję wyświetlającą
okienko tekstowe z prośbą o podanie hasła:
Dim haslo as string
haslo = InputBox ("Proszę podać hasło dostępu","Hasło")
Teraz gdzieś musimy ustalić jakie będzie hasło. A więc piszemy dalej:
If haslo <> "SLASH" then
x = msgbox("Podałeś złe hasło",vbcritical,"Błąd")
End
Else
y = msgbox("Podałeś dobre hasło",vbExclamation,"OK")
End IF
Cholera ! Ale ten SLASH zamącił. Co to ma być!
Nie przejmuj się ! Zaraz Ci wszystko wytłumaczę, ale najpierw uruchom program.
Pojawia się InputBox - podaj złe hasło. Wyskakuje komunikat i... program się zamknął. No dobra -
uruchamiamy go jeszcze raz i tym razem podajemy dobre hasło - i co - tak program uruchomił się.
Czas by Wam wytłumaczyć co się tu dzieje:
1. Dim haslo... - chyba wiesz ;). Tu oczywiście deklaracja zmiennej
2. Input Box - tu właśnie pojawia się prośba o podanie hasła
3. If haslo <> "SLASH" then - Jeżeli hasło będzie mniejsze lub większe (czyli nierówne - nie będzie
się zgadzało) od "SLASH" wtedy...
4. msgbox - Komunikat o złym podaniu hasła
5. End - i tu UWAGA. Nowe polecenie - służy ono do kończenia programu - czyli jeśli złe hasło
program się zamyka
6. Else - UWAGA - rozszerzenie instrukcji IF - oznacza ono "W przeciwnym przypadku" - o co tu
chodzi ? Wróć do linii 3. Widzisz tam instrukcję Jeżeli hasło nierówne "SLASH" to..., a tu mamy w
przeciwnym przypadku - czyli hasło równe "SLASH". Oczywiście możemy napisać
If haslo = "SLASH" then ... - ale przecież else jest dużo krótsze .
7. MsgBox - wiadomo, komunikt, że poprawnie podałeś hasło
8.End If - tu kończymy instrukcję IF/Else
No i w końcu dotarliśmy do końca, pojawia się forma !
No, myślę, że zrozumiałeś o co tu chodziło. Napiszmy jeszcze jeden program pytający się nas o
wiek.
Na formie układamy przycisk. Dodajemy do niego następujący kod:
Dim wiek As Byte
Dim x, y, z As Byte
wiek = InputBox("Podaj, ile masz lat", "Pytanie o wiek", "17")
If wiek < 12 Then
x = MsgBox("Jesteś jeszcze za młody na pewne rzeczy", vbExclamation, "Młody")
ElseIf wiek >= 40 Then
y = MsgBox("Jesteś w pełni wieku", vbExclamation, "Strszy")
Else
z = MsgBox("Jesteś jeszcze młody", vbExclamation, "Średni wiek")
End If
Teraz objaśniam:
1,2,3. Pierwszych trzech linijek chyba nie muszę tłumaczyć ;)
4. If wiek < 12 then - jeśli wiek będzie mniejsy od 12 to...
5. MsgBox - Komunikat, że jesteś za młody
6. UWAGA - nowe wyrażenie ElseIF - jak się domyślasz jest to połączenie instrukcji Else (w
przeciwnym przypadki) z IF (Jeśli) - i co z tego wychodzi? W przeciwnym przypadku jeśli...
Dlaczego ? Pamiętaj, że nie możemy użyć więcej niż jednej instrukcji IF pod rząd. Co najwyżej IF i
Else - ale nigdy IF, IF, Else - po prostu wyskoczy błąd. Zamiast tego stosuje się instrukcję ElseIF,
którą możesz użyć w dowolnej ilości w programie.
Tłumaczę - jeśli wiek będzie większy lub równy 40 to...
7. y=MSgBox... - wiadomo o co chodzi...
8. Else - w przeciwnym przypadku...
9. Następny MessageBox
10. Zakończenie instrukcji IF
I co łatwe?
-------------------------------------------------------------------------------------------------
Pamiętaj, że jeśli masz jakikolwiek problem z wyżej zamieszczonym kursem lub masz jakieś
pytanie nie krępuj się - pisz do mnie na adres: slash@ptik.prv.pl .Twój list nie zostanie bez
odpowiedzi. Jeśli nawet nie masz pytań to i tak napisz czy podoba ci się ten kurs, co chciałbyś w
nim zmienić. Napisz w ogóle cokolwiek, abym wiedział, że ktoś ten kurs czyta.
-------------------------------------------------------------------------------------------------
Myślę, że na dzisiaj wystarczy. Pewnie już myślisz co ten Slash wymyślił na następny kurs -
powiem ci tylko jedno - prawie to samo co dzisiaj. Poznasz jedynie połączenie instrukcji IF z
operatorami logicznymi. Na dziś zrób sobie przerwę...
LEKCJA 8
Wyspani ? No to do dzieła !!! Dzisiaj dowiesz się co to są operatory arytmetyczne i jak ich używać.
Myślę, że umiesz już posługiwać się instrukcją IF. Będzie nam dzisiaj bardzo potrzebna. Dobra.
Czy ktoś wie co to są operatory arytmetyczne? Nie? No to zaczynamy:
W Visual Basicu będziemy posługiwać się następującymi operatorami: And , Or, Not.
And to nasze polskie "i", Or to lub, a Not to nie. Ale o co tu właściwie chodzi. Wyjaśnię to na
prostym przykładzie:
Mamy dwie firmy które przynoszą dochody. Tak więc uruchamiamy VB, tworzymy dwa pola
tekstowe i przycisk. Pierwsze pole nazywamy txtFirma1, a drugi txtFirma2, oczywiście czyścimy
ich zawartość (Text). Przycisk nazwijmy np. cmdWynik. Nadajmy mu etykietę (Caption) "I co ?".
Teraz napiszemy procedurę, tak abyśmy dostali gratulacje jeśli dochody jednej i drugiej firmy
przekroczą 5000 zł. No to do przycisku "I co?" dodajemy kod. No właśnie, ale jaki. Jak się pewnie
domyślasz będziemy musieli użyć instrukcji IF. Czyli Jeżeli dochód pierwszej firmy będzie
większy niż 5000 to komunikat... Zaraz, a co z drugą firmą? Pierwsza może przynieść zysk w
wysokości 6000 zł, a druga straty w wysokości 9000 zł. I co? Program ma nam pogratulować ?
Można by użyć prostej funkcji matematycznej. Mianowicie dodawania. Skoro i jedna i druga firma
ma przynieść zysk pow. 5000 zł, no to w sumie mają przynieść zysk 10000 zł. No dobra. Ale jak
pierwsza przyniesie zysk 20000 zł, a druga jakąkolwiek stratę to program też ma nam gratulować.
Nie sądzę. My musimy zaznaczyć, że i jedna i druga ma być dochodowa i przynosić zysk pow.
5000 zł. Po polsku powiedzielibyśmy tak:
Jeżeli firma1 przyniesie zysk pow. 5000 i firma2 przyniesie zysk pow. 5000 zł to... gratulacje.
I tak właśnie będzie brzmiał Visual Basicowy język:
Dim x
IF txtfirma1 > 5000 and txtfirma2 > 5000 then
x = msgBox("Gratulacje",vbInformation,"Dochód")
End IF
Uruchom program i co? Wpisz obydwie dane pow. 5000. Otrzymujesz gratulacje. A zmień jedną z
danych np. na 4000. Gratulacji już nie otrzymujemy. No więc program działa. Myślę, że już
rozumiesz operator And. Jeśli tak, to nie będziesz mieć żadnych problemów z operatorem Or (lub).
Spróbujmy zamienić w naszym programie and na or. Teraz rozumiemy to tak:
Jeżeli firma1 przyniesie zysk pow. 5000 lub firma2 przyniesie zysk pow. 5000 zł to... gratulacje.
Uruchamiamy program wpisujemy np. 6000 i 7000. I co? Gratulacje. Tutaj działa tak samo jak z
And. No dobra. Zmieńmy jedną daną np. na 2000. I co? Także gratulacje. W tym przypadku
program szuka w obydwu polach tekstowych liczby większej od 5000. Jeśli znajdzie jakąkolwiek
(czyli w txtFirma1 lub txtFirma2 lub w obydwu) to otrzymujemy gratulacje. No też myślę, że nie
miałeś z tym większych problemów. Został nam jeszcze operator Not. Nie powinniśmy go stosować
-bo gdzieś wyczytałem, że może doprowadzić do nieoczekiwanych wyników - sam jednak nigdy z
nim nie miałem problemów. Faktycznie, lepiej zastępuje się go odwrotną instrukcją do danej. Oto
przykład.
Mamy jedną firmę która powinna przynosić dochody. Gratulacje możemy wyświetlić na dwa
sposoby.
1. Operator NOT
Dim x
IF NOT txtFirma1 < 5000 then
x = msgBox("Gratulacje",vbInformation,"Dochód")
End IF
Jednak pisanie takich instrukcji jest bez sensu. Dlaczego ? Przetłumaczmy:
Jeśli dochód firmy1 NIE mniejszy niż 5000 to... gratulacje
Lepiej zapisać tak:
IF txtFirma1 >= 5000 then
Prawda, że bardziej czytelne. Staraj się nigdy niestosować tego operatora. Zawsze da się go zastąpić
przez zmianę znaku na przeciwny.
-------------------------------------------------------------------------------------------------
Pamiętaj, że jeśli masz jakikolwiek problem z wyżej zamieszczonym kursem lub masz jakieś
pytanie nie krępuj się - pisz do mnie na adres: slash@ptik.prv.pl .Twój list nie zostanie bez
odpowiedzi. Jeśli nawet nie masz pytań to i tak napisz czy podoba ci się ten kurs, co chciałbyś w
nim zmienić. Napisz w ogóle cokolwiek, abym wiedział, że ktoś ten kurs czyta.
-------------------------------------------------------------------------------------------------
Teraz jeszcze dopełnienie do InputBox-a. Zapomniałem Wam napisać, jak sprawić aby działał
przycisk "Cancel" na InputBox-ie. Pokaże to na przykładzie z imieniem, który braliśmy na lekcji 6
Dim x,y as string
x = InputBox ("Jak masz na imię ?","Przywitanie","Może Marek...")
IF x = "" then end
y = MsgBox ("Witaj_" & x ,vbExclamation,"Przywitanie")
Wyjaśnienie do IF-a. Są tu pewnie dwie rzeczy których nie rozumiesz.
Po pierwsze. Dlaczego akurat x = "" ? Jeśli naciśniesz przycisk "Cancel" VB nie przypisuje nic do
zmiennej x. Wykorzystuje to właśnie IF który kończy program w tym momencie.
Po drugie. Dlaczego po "then" nie zakończyłem linii i nie dałem instrukcji End IF.
Otóż, jeśli nie masz zamiaru użyć instrukcji Else, lub ElseIF, a twoja instrukcja warunkowa mieści
się w jednej linijce. (jak np. moja - End) nie musisz rozpoczynać nowej linijki i co za tym idzie
kończyć IF-a
LEKCJA 9
Witam Was znowu, już w 9 lekcji kursu VB. Zastanawiałem się właśnie ile będzie tych lekcji. Z
moich wyliczeń wynika, że nie mniej niż 50 !. Tak, tak ! To jest gorzka prawda. Visual Basic choć
jest językiem programowania łatwym (czytaj najłatwiejszym), to jednak jego możliwości są bardzo
duże. Te 50 lekcji to będą podstawy, a potem? Myślę, że potem będziemy mówić coś o bazach
danych i API (o którym sam nie mam pojęcia - na razie). No dobra skupmy się jednak na dzisiejszej
lekcji. Dowiesz się na niej coś o funkcji Select Case (Przypadek).
Funkcję Select Case zawsze można zastąpić funkcją IF - jednak funkcja Case ma dużo krótszy
zapis. Pokażę to na przykładzie programu pytającego nas o wiek.
Uruchamiamy VB - tworzymy przycisk i dodajemy do niego kod:
Dim wiek As Currency
wiek = InputBox("Podaj swój wiek...", "Pytanie o wiek")
If wiek <= 0 Then
x = MsgBox("To jest niemożliwe", vbCritical, "Błąd")
ElseIf wiek < 11 Then
x = MsgBox("Mniej niż 11 - jeszcze dziecko", vbInformation, "Odp")
ElseIf wiek < 18 Then
x = MsgBox("Młodzież", vbInformation, "Odp")
ElseIf wiek < 40 Then
x = MsgBox("Dorosły do 40", vbInformation, "Odp")
ElseIf wiek = 100 then
x = MsgBox("Piękny wiek !!!", vbInformation, "Odp")
ElseIf wiek < 110 Then
x = MsgBox("Pełnia wieku...", vbInformation, "Odp")
Else
x = MsgBox("Niemożliwe !!!", vbCritical, "Błąd")
End If
Chyba wiecie o co tu chodzi. W tym kodzie są błędy - ktoś może mi zarzucić. Dlaczego. Kilka
lekcji wcześniej pisałem, że nie można kilku MsgBoxom przypisać jednej zmiennej (tutaj x). Ale
zauważmy, że program wykonuje zapis tylko raz do x. To przecież jest zależne od IF-a. Nie
prawdaż ?
Instrukcja IF nie oferuje czegoś takiego jak przedziały. Tak np. nie możemy napisać instrukcji IF z
przedziałem (np. od 20 do 70). Operujemy tylko operatorami (>,<,=,<=,>=,<>). Taki komfort daje
nam za to funkcja Case. Teraz napiszemy ten sam program z użyciem właśnie tej funkcji:
Dim wiek As Currency
wiek = InputBox("Podaj swój wiek...", "Pytanie o wiek")
Select Case wiek
Case is < 0 : x=MsgBox("To jest niemożliwe", vbCritical, "Błąd")
Case 0 to 10: x= MsgBox("Mniej niż 11 - jeszcze dziecko", vbInformation, "Odp")
Case 10 to 18: x = MsgBox("Młodzież", vbInformation, "Odp")
Case 18 to 40: x = MsgBox("Dorosły do 40", vbInformation, "Odp")
Case 100: x = MsgBox("Piękny wiek (100) !!!", vbInformation, "Odp")
Case is <= 110: x = MsgBox("Pełnia wieku...", vbInformation, "Odp")
Case else: x = MsgBox("Niemożliwe !!!", vbCritical, "Błąd")
End Select
Uruchamiamy - i co? Działa tak samo ? No właśnie , tak ma działać. Program stał się dużo
czytelniejszy, nie prawdaż ? No to teraz tłumaczę o co chodzi:
1. Dim - wiadomo, nakazujemy programowi pamiętać wiek
2.wiek=InputBox... - Pytanie o wiek, który zostaje zapisany do zmiennej wiek
3.W odróżnieniu od IF-a, Case należy zacząć - podajemy tutaj co będzie wchodziło w rachubę (w
naszym przypadku wiek)
4.Jeśli mniejsze niż zero (oczywiście wiek) to MsgBox - "To jest niemożliwe..."
5.Jeśli od 0 do 10 to MsgBox - "Mniej niż..."
6,7 - tak samo
8. Jeśli 100 to MsgBox - "Piękny wiek"
9. Jeśli mniej niż 110 to MsgBox "Pełnia wieku..."
10 Case Else - Jeśli inaczej to MsgBox "Niemożliwe..."
11 End Select - Zakańczamy Case (Odpowiednik End IF)
Myślę, że wszyscy zrozumieli o co chodzi. I tutaj jedna uwaga - jeśli będziesz używał operatorów
większy - mniejszy itp. to po instrukcji Case musisz dać słowo is - jednak nie przejmuj się tym
zbytnio. Jeśli zapomnisz napisać tego słowa, VB zrobi to za ciebie (sprytne, nie? ;) ). Dwukropek
jest odpowiednikiem If-owego Then. Tak więc instrukcja Case jest dużo bardziej uproszczona,
chociaż ma większe możliwości niż IF.
Kiedy jej używać ? Wtedy gdy masz dużo rozpatrzeń do obsłużenia. Jak sam widziałeś na
przykładzie - dużo szybciej i milej jest pisać program z Case. Jednak gdy masz tylko dwie opcje do
rozpatrzenia to funkcja IF jest całkowicie wystarczająca...
-------------------------------------------------------------------------------------------------
Pamiętaj, że jeśli masz jakikolwiek problem z wyżej zamieszczonym kursem lub masz jakieś
pytanie nie krępuj się - pisz do mnie na adres: slash@ptik.prv.pl .Twój list nie zostanie bez
odpowiedzi. Jeśli nawet nie masz pytań to i tak napisz czy podoba ci się ten kurs, co chciałbyś w
nim zmienić. Napisz w ogóle cokolwiek, abym wiedział, że ktoś ten kurs czyta.
-------------------------------------------------------------------------------------------------
Może jakieś zadanie ? Etam, myślę zrozumiałeś i sam jeszcze raz przeanalizujesz dokładnie tą
lekcję. Jednak jeśli czegoś nie zrozumiesz napisz do mnie. Na dzisiaj to by było na tyle.
LEKCJA 10
Już dziesiąta lekcja przed nami. Trzeba się za nią wziąć ostro. Zaczynamy nowy dział - pętle.
Jednak przed tym muszę wam wyjaśnić jak pisze się komentarze w VB.
Po co mi komentarze i co to w ogóle jest ? Komentarz jest to pomocniczy tekst w projekcie służacy
jedynie dla nas ! Visual Basic w ogóle na to nie zwraca uwagi. Po co to stosować... Na razie
piszemy małe programy i komentarz jest zbyteczny. Jeśli jednak będziesz musiał wykonać
skomplikowany program, sam się w nim pogubisz. Do deklaracji przykładów stosujemy znak '
Wszystko co znajdzie się po tym znaku aż do końca linijki jest komentarzem i VB nie zwraca na to
najmniejszej uwagi. Komentarze zostają zaznaczone przez VB na zielono. Przykład
If x=0 then end 'Jeśli zmienna x będzie równa zero to zakończ program
lub
If x=0 then end
'Jeśli zmienna x będzie równa zero to zakończ program
Jak widzisz oba przypadki są dobra i czytelne. Dobra, to tyle wstępem - zaczynamy pętle.
Pętla, jak sama nazwa mówi to kilkukrotne powtórzenie się tych samych instrukcji kodu. Ile ich
będzie, to zależy od warunku pętli. Najprościej jest to wyjaśnić na przykładzie.
Napiszemy program pytający się nas o wiek. Po jego podaniu wyskoczy komunikat "Masz x lat".
Oczywiście program musi być głupioodporny i jeśli podamy, że mamy 0 lub 123 lata powinien
zapytać nas jeszcze raz o wiek.
Zabieramy się więc do roboty. Jak zwykle tworzymy przycisk i dodajemy kod:
Dim wiek as string
Dim b,c as byte
wiek = InputBox ("Podaj ile masz lat","Pytanie") 'Tutaj program pyta nas o wiek
If wiek = "" then end ' Jeśli nacisnęliśmy Cancel
wiek = Val(wiek) 'opis poniższej funkcji pod przykładem, na razie musisz wiedzieć, że działa
podobnie jak CSng( )
Do While wiek<=0 or wiek>120
b = MsgBox ("Musisz podać prawidłowy wiek",vbCritical,"Błąd")
wiek = InputBox ("Podaj jeszcze raz swój wiek","Pytanie") 'Tutaj program znów pyta nas o wiek
If wiek = "" then end ' Jeśli nacisnęliśmy Cancel
wiek = Val(Wiek)
Loop
c = MsgBox("Masz " & wiek & " lat" , vbInformation, "Odpowiedź")
Ho, ho, ho - trzy nowości w programie. No to przetłumaczenie:
1. Dim wiek - deklarujemy zmienną wiek - czyli naszą odpowiedź
2. Dim x,y - deklaracja tego co zwraca MsgBox
3. Pytanie o wiek, który zostaje zapisany do zmiennej wiek
4. If... - jeśli naciśniemy cancel to koniec programu
5. wiek = Val(Wiek) - pierwsza nowość. Jest to funkcja bardzo podobna do CSng( ). W przyszłości
właśnie ją będziemy używać. Ale czym się rożni? Jeśli byś napisał:
x = "12"
odp = CSng(x)
w zmiennej odp znalazło by się 12. Miałeś zapamiętać, że to co jest np. w polach tekstowych
nazywa się stringami. Zapisuje się je właśnie w cudzysłowach. String "12" zostaje
przekonwertowany na 12 i wszystko O.K. Ale zobaczmy co się teraz stanie:
x = "Tata i mama"
odp = CSng(x)
i w tym momencie wyskoczy błąd (13). Nie można przekonwertować "Tata i mama" na liczbę 9co
jest chyba logiczne). Jednak funkcja VAL to potrafi...
x = "Tata i mama"
odp = Val(x)
teraz w zmiennej odp znajdzie się liczba 0.
No dobra - ale po co to mam stosować. Załużmy, że użyłeś funkcji CSng. Teraz program pyta się
nas o wiek - ty mu podajesz jakiś string np. Ble, ble - i nagle błąd "Type mismath". Aby temu
zapobiec zastosowałem funkcję VAL - która zwróci 0 i błędu nie będzie...
6. Do while wiek <= 0 or wiek >120 then
Jak widzisz funkcja jest bardzo podobna do funkcji IF - lecz nie oznacza ona jeśli a dopóki.
Czyli tłumacząc - dopóki wiek <= 0 lub wiek >120 wykonuj istrukcje do Loop. Innymi słowy
mówiąc - jeśli podamy liczbę taką jak trzeba to program przeskoczy aż za funkcję Loop
(Odpowiednik End IF). Jeśli jednak podamy np 140 to...
7. MesageBox, że zły wiek
8.InputBox - ponawiamy pytanie o wiek...
9. Znów sprawdzenie czy naciśnięto Cancel
10. Val - znów konwersja stringu Wiek na liczbę
11. Loop - funkcja która spowrotem przenosi nas do funkcji Do While
No to wracamy się, aż do linijki 6 i tu znowu rozstrzyga się czy będziemy już kończyć, czy jeszcze
nie. Znów rozpatrzymy dwa przypadki:
a) Znów podaliśmy zły wiek, więc program ponownie wykonuje to co jest między Do While a
Loop. Gdy dojdzie do końca to znów wraca do linii 6, i po raz kolejny rozstrzyga sprawę.
b) Podaliśmy dobry wiek - program więc przeskakuje przez funkcję Do While - Loop i lądujemy w
linijce 12
12.MsgBox - w końcu dotarliśmy tutaj. Program daje nam odpowiedź ile mamy lat. Ale co tam
znowu jest namieszane... Może przestraszyliście się troszkę wyrażenia "Masz " & wiek & " lat" -
pamiętacie co robił symbol & - dla tych co zapomnieli:
x = "Mam " & 12 & " lat"
Dawało to w wyniku "Mam 12 lat"
No myślę, że wiesz o co tu chodzi...
-------------------------------------------------------------------------------------------------
Pamiętaj, że jeśli masz jakikolwiek problem z wyżej zamieszczonym kursem lub masz jakieś
pytanie nie krępuj się - pisz do mnie na adres: slash@ptik.prv.pl .Twój list nie zostanie bez
odpowiedzi. Jeśli nawet nie masz pytań to i tak napisz czy podoba ci się ten kurs, co chciałbyś w
nim zmienić. Napisz w ogóle cokolwiek, abym wiedział, że ktoś ten kurs czyta.
-------------------------------------------------------------------------------------------------
ZADANIE DOMOWE
Przepisz program który zrobiliśmy dzisiaj na lekcji. Fajnie się zaczyna, co ? No, ale to nie jest
celem zadania. Twoim celem jest zmienienie tak kodu, aby po wpisaniu złego wieku program nie
wyświetlał - Musisz podać prawidłowy wiek, ale powiedział nam, że wiek który podaliśmy jest za
mały, albo za duży.
Podpowiedź:
Musisz zastosować funkcję Case (If też by starczył, ale nie da się go wsadzić między Do While a
Loop !!!)
LEKCJA 11
Czołem !!! Jak tam z zadaniem ? Uporaliście się z zadaniem, czy tylko bezmyślnie przepisaliście
wszystko z przykładu ? Jeśli SAMEMU udało ci się to zrobić, to dobrze. Jeśli skopiowałeś, to i tak
się nie przejmuj - po prostu pewnie to było za trudne. Ale jest to oznaka, że za mało chęci wkładasz
w moje lekcje VB.
Dzisiaj poznamy przeciwność funkcji Do While, będzie to funkcja Do Until. Działa dokłanie
odwrotnie. Oto przykład:
Zamiast:
Do While wiek<=0 or wiek>120
możemy zapisać:
Do Until wiek > 0 and wiek <= 120
Pamiętaj, że przeciwnością < jest >=, a <= jest >. Przeciwnością <> jest =.
Pamiętaj także o zmianie operatorów - Or zamienia się na End i odwrotnie.
Linie możemy przetłumaczyć tak:
Dopóki wiek będzie nie większy niż 0 i nie mniejszy niż 120 to...
Myślisz pewnie, że nigdy nie zastosujesz tej funkcji - bo i po co? Skoro można ją zamienić na
bardziej zrozumiałą Do While, to po co zaprzątać sobie głowę tym. Sam przyznaję, że funkcję Do
Until będziesz używał znacznie rzadziej, ale będziemy pisać takie programy, że będzie ona
najwygodniejszym sposobem.
I co tu więcej pisać. Praktyczne zastosowanie tej funkcji poznasz już za niedługo. Skoro mowa o
pętlach to powiemy jeszcze coś o pętlach odwrotnych.
Pętla: Do While... Loop
Odwrotna: Do... Loop While
Tak samo możemy postąpić z Until... Dobra, ale czym ona się różni od normalnej pętli ? Najlepiej
zobrazować to na małym shemaciku...
Blok instrukcji (1)
Do While...
Blok instrukcji (2)
Loop
Blok instrukcji (3)
W przypadku normalnej pętli program wykonuje się tak:
Blok instrukcji (1), teraz albo blok instrukcji (2), albo po kilku (lub jednej) pętli blok instrukcji (3)
A teraz funkcja odwrotna do poprzedniej
Blok instrukcji (1)
Do
Blok instrukcji (2)
Loop While...
Blok instrukcji (3)
A teraz program wykonuje się tak:
Blok instrukcji (1), Blok instrukcji (2), teraz albo blok instrukcji (3), albo znów Blok instrukcji (2) i
tak kilka razy (lub raz) i na koniec blok instrukcji (3)
Generalnie różni się to tym, że w funkcji Do While - Loop, program może, ale nie musi wykonąć
tego co znajduje się między DO - LOOP. Zaś w funkcji odwrotnej program musi wykonać
przynajmniej jeden raz instrukcję zawartą między DO - LOOP.
Funkcja jest rzadko stosowana (sam nigdy jej nie używałem), zawsze ją można zastąpić zwykłym
ułożeniem. Ale warto wiedzieć, że coś takiego jest . Zawsze się może zdarzyć, że akurat będzie ona
lepsza.
-------------------------------------------------------------------------------------------------
Pamiętaj, że jeśli masz jakikolwiek problem z wyżej zamieszczonym kursem lub masz jakieś
pytanie nie krępuj się - pisz do mnie na adres: slash@ptik.prv.pl .Twój list nie zostanie bez
odpowiedzi. Jeśli nawet nie masz pytań to i tak napisz czy podoba ci się ten kurs, co chciałbyś w
nim zmienić. Napisz w ogóle cokolwiek, abym wiedział, że ktoś ten kurs czyta.
-------------------------------------------------------------------------------------------------
Ufff... Dobrnęliśmy do końca tej lekcji (właściwie to była sama teoria - dopełnienie poprzedniej
lekcji). Trzeba by wypić jakieś piwo. Oczywiście bezalkoholowe ;) .Na następnej lekcji będziemy
brać ostatnią z pętli... pętlę For. Lekcja będzie bardzo ważna. For jest najczęściej stosowaną pętlą w
VB. Przed lekcją dobrze wypocznij.
LEKCJA 12
Dzieńdoberek !!! Jak tam samopoczucie? Dobrze? No to się cieszę !
Jak pisałem wcześniej przechodzimy dzisiaj do bardzo ważnego tematu - Pętli FOR.
Czym różni się ona od pętli Do While, Do Until ? Otóż, jak pamiętasz pętle Do - wykonywały się
dopóki jej warunki nie zostały spełnione. Pętla for wykonuje się zaś określoną ilość razy. Tak np.
Dim x,y as byte
For x = 1 to 5
y = MsgBox("To jest MessageBox nr. " & x, vbinformation,"Przykład")
Next x
Ten program powoduje pięciokrotne wyświetlenie się MsgBox-a. Jak to działa ?
1. Dim - wiadomo co... ;)
2. Dla x = od 1 do 5
3. MsgBox...
4. Dodaj do x i wróć
No dobra, ale jak to działa ? Przeanalizujmy...
Najpierw zainicjowanie zmiennych x i y. Dalej jest instrukcja for. Decyduje ona ile razy ma zostać
wykonana pętla. W naszym przypadku jeśli x=6 to przeskakuje za Next-a (Odpowiednik Loop-a z
pętli DO-LOOP). Czyli tak - obecnie w zmiennej x jest 1 - to jest ta pierwsza liczba w FOR.
Wykonuje się msgBox z wiadomością "To jest MessageBox nr 1". Program dochodzi do funkcji
Next x - oznacza ona - dodaj (1) i wróć . Tak więc program wraca do For-a, tylko teraz w x jest
liczba 2 - i znów MsgBox - To jest MessageBox nr 2. I znów dodaj 1 i wróć, aż tak do 5. Ale co
potem... Załóżmy, że w x jest 5. Jesteśmy przy funkcji For - skoro do pięciu to jeszcze raz pętelka -
MessageBox i dochodzimy do Next x. Po tej operacji x = 6. Program wraca do for-a i okazuje się,
że x nie spełnia warunku pętli. Następuje przeskok za instrukcję Next - i program w ten sposób
kończy działanie.
Dokładne i praktyczne zastosowanie tej funkcji poznasz dużo później - gdy będziemy mówić o
dostępie do plików. Niemniej jednak będzie nam ona bardzo potrzebna i musisz ją znać.
Myślę, że nie będziesz mieć z nią żadnych problemów.
Ach, zapomniałem napisać o pewnym dopełnieniu funkcji FOR - jest nią Step (czyli krok). Po
prostu do funkcji For dopisz jeszcze Step i pewną liczbę. Zastosujmy to do wcześniej napisanego
przykładu. Będzie to wyglądać więc tak:
Dim x,y as byte
For x = 1 to 5 step 2
y = MsgBox("To jest MessageBox nr. " & x, vbinformation,"Przykład")
Next x
I co się tu dzieje... Pomyślmy. Wchodzimy w funkcję FOR, następnie zapisuje ona do zmiennej x
wartość 1. Dostajemy wiadomość "To jest MessageBox nr. 1". I zatrzymujemy się na next.
Pamiętasz co on oznaczał ? Tak, dodaj do x (w tamtym przypadku 1) i wróć do FOR. Teraz sytuacja
się zmienia. Funkcja STEP nakazuje FOR-owi, aby teraz do x dodał 2. I co teraz. Wracamy się, i w
x znajduje się liczba 3 ! A więc nie dostaniemy MessageBoxa z numerem 2 lecz 3. Znów NEXT
czyli x+2 a to daje 5. Powrót, MessageBox nr 5. Znów Next, teraz x=7, powrót do FOR - ale
niestety (?) For nie obejmuje już liczby 7, a więc przeskok za Next i koniec. programu...
Zauważyłeś różnicę? Chyba tak. Zamiast 5 Messag-ów otrzymałeś tylko 3 !
Teraz zastosujmy funkcję for do liczenia silni danej liczby.
Dobra, dobra - ale większość osób pewnie nie wie co to jest silnia.
7! (czytaj. 7 silnia) - 1*2*3*4*5*6*7
No dobra skoro wiesz co to jest już silnia, bierzemy się do pisania programu.
Na formie ułóż przycisk - jako wartość "Caption" wpisz Silnia, i nazwij go cmdSilnia. No dobra,
ale gdzie będziemy wpisywać liczbę... Musimy zrobić textBox-a. Wyczyść wartość Caption i
nazwij go txtSilnia. Teraz dodaj do przycisku następujący kod:
Dim x, odp
odp = 1
For x = 1 To txtSilnia
odp = odp * x
Next x
ss = MsgBox(txtSilnia & " ! to " & odp)
Czy potrafisz go przeanalizować? Przynajmniej powinieneś. Jeśli jednak nie potrafisz tego zrobić
przeanalizujmy razem:
1. Dim - zainicjowanie zmiennych
2. Na początek ustalamy zmienną początkową. Ale dlaczego nie 0. Pomyśl - mnożenie przez 0
zawsze daje w wyniku 0 - a więc bez sensu. Przy dodawaniu jako stałą musisz dać 0, a przy
mnożeniu 1 !!!.
3. Instrukcja for - od 1 do... ile? txtsilnia to jest właśnie liczba którą wpisałeś okienko.
4. Teraz następuje przemnożenie stałej przez x - czyli kolejną liczbę naturalną zaczynając od 1, a
kończąc na txtSilnia. Czyli nasze równanie (załóżmy, że w okienko wpisałeś 7) 1*2*3*4*5*6*7
czyli 7!. Po 7 okrążeniach otrzymujemy nasz wynik.
ZADANIE DOMOWE:
Napisz program z przyciskiem i polem tekstowym. Program ma dodawać tylko liczby parzyste
zaczynając od 2, a kończąc na liczbie wpisanej w pole textowe.
Może trochę trudne więc daję 2 podpowiedzi:
Po pierwsze skoro dodawanie zaczynamy od 2 (bo 1 jest liczbą nieparzystą) funkcję FOR też
zaczniemy od 2.
Po drugie - liczby parzyste to co drugie liczby. Tak więc będziemy musieli użyć funkcji STEP.
No to do dzieła!
Jeśli jednak nie możesz sobie poradzić z tym zadaniem przeanalizuj to...
Do następnego spotkania...
LEKCJA 13
Jakie powitanie by tu dziś wymyślić... Może po prostu WITAJCIE !!!
Dzisiaj przed nami prosta, ale bardzo ważna lekcja. Zmiana właściwości komponentów kodem.
Robiliśmy coś takiego gdzieś w pierwszych lekcjach kursu. Dzisiaj jednak zajmiemy się tym
tematem szczegółowo.
Musimy wrócić do lekcji 1. Dla przypomnienia
(name)
W tym polu wpisujemy nazwę identyfikującą naszą etykietę – najlepiej używać skrótu lbl (od
Label) np. lblNazwa
Alignment
!!! Czyli wyrównanie tekstu który znajduje się na etykiecie. Domyślnie mamy ustalone 0 - Left
Justyfy - czyli wyrównanie do lewej krawędzi. Można też ustawić 1 - Right... czyli wyrównanie do
prawej oraz 2 - Center - czyli wyśrodkowanie tekstu.
caption
Chyba najważniejsza – Tu ustalamy wyrazy które mają znaleźć się na naszej etykiecie
Font
W tym oknie możemy ustalić czcionkę, wielkość i efekty dla napisu
Height
Wysokość etykiety. Raczej wygodniejsze jest rozciąganie bezpośrednio na formularzu
Left
Określa odległość etykiety od lewej krawędzi ekranu. Wygodniej jest przemieszczać etykietę
bezpośrednio na formie.
BackColor
Tutaj kolor tła etykiety
ForeColor
Tutaj kolor tekstu
Top
Określa położenie etykiety od górnej krawędzi ekranu
Width
Określa szerokość etykiety
Visible
Określa czy etykieta ma być widoczna na formularzu. Jeśli zaznaczymy false, to po uruchomieniu
programu zobaczymy pusty formularz.
O co chodzi z tym kodem ? Napiszmy mały program. Na formularzu umieśćmy pole tekstowe o
nazwie txtWpis, wyczyść opcję Caption. Umieszczamy także etykietę o nazwie lblGotowe i także
wyczyśćmy Caption. I jeszcze 3 przyciski o nazwach - Do lewej, Do prawej, Wyśrodkowanie.
Nazwij je jak tam chcesz.
Nasz program ma działać tak - Wpisujemy w pole tekstowe jakiś tekst, który automatycznie
przenoszony jest do etykiety. A nasze trzy przyciski sterują położeniem tekstu na etykiecie.
No dobra, ale nie zapomniałem czasem o przycisku przenoszącym tekst z pola tekstowego do
etykiety ? Zaraz, przecież to miało być automatyczne... Ale jak to zrobić. Po pierwsze musimy
ocenić kiedy program ma zareagować. Oczywiście, że wtedy, gdy zaczniemy coś wpisywać do pola
tekstowego. Czyli nasz kod będzie siedział w polu tekstowym. Tak więc klikamy na niego
dwukrotnie i widzimy coś takiego:
Private Sub txtwpis_Change()
End Sub
Change - oznacza zmianę - czyli jeśli coś będziemy zmieniać w polu tekstowym to wykona nam się
kod. No dobra, ale jaki ? Pomyślmy. Chodzi nam o przeniesienie tego co w txtWpis do lblGotowe.
Wyjdzie proste równanie matematyczne:
lblGotowe.caption = txtwpis
I jak to ma prawo działać. Tu właśnie zmieniamy właściwość etykiety, mianowicie caption (czyli to
co jest wpisane w etykietę). Przyporządkowujemy temu to co wpisujemy w txtwpis.
Myślę, że rozumiesz...
Sprawdźmy jak to działa. Uruchom program i wpisuj cokolwiek w pole tekstowe - działa nie ? No
dobra, ale przyciski nie działają.
Wracamy do trybu projektowania, klikamy dwukrotnie przycisk Do lewej i dodaj kod:
lblGotowe.Alignment = 0
Co to oznacza. Zajrzyj do tabelki. To jest właśnie wyśrodkowanie. Ale dlaczego 0 ? Znów spójrz do
tabelki - 0 to jest do lewej. Po przetłumaczeniu funkcja wygląda tak:
etykietaGotowe.wyrównanie = 0 czyli do lewej
No chyba wiesz co zrobić z pozostałymi przyciskami. Popatrz do tabelki i dopisz odpowiedni kod.
Teraz uruchom program i co? Super nie... ;)
Dobra. ni wyłączaj jeszcze VB. Zapisz program - będzie nam potrzebny za niedługo. W tym celu z
menu file wybierz Save Project As... i zapisz obydwa pliki gdzieś na dysku.
Dobra. Jeszcze jedno zdanie na koniec. Pamiętaj, że tym sposobem możesz zmieniać właściwości
wszystkich elementów ułożonych na formie!!!
-------------------------------------------------------------------------------------------------
Pamiętaj, że jeśli masz jakikolwiek problem z wyżej zamieszczonym kursem lub masz jakieś
pytanie nie krępuj się - pisz do mnie na adres: slash@ptik.prv.pl .Twój list nie zostanie bez
odpowiedzi. Jeśli nawet nie masz pytań to i tak napisz czy podoba ci się ten kurs, co chciałbyś w
nim zmienić. Napisz w ogóle cokolwiek, abym wiedział, że ktoś ten kurs czyta.
LEKCJA 14
Witajcie po raz kolejny. Właśnie mam spieprzony komputer i kurs ten piszę na praktyce. No cóż –
kurs trzeba pisać...
Dość gadania – zaczynamy. Dzisiaj nauczysz posługiwać się polami wyboru – Check Box-em i
Option Button-em (Radio). Znajdują się one na palecie narzędzi w czwartym rzędzie. Taki
kwadracik „zafajkowany” i kółeczko z kropką. Na początek weżmy ten pierwszy czyli kwadracik.
Na pewno już się z nim gdzieś spotkałeś. Służy on do poinformowania programu czy coś chcemy
czy też nie. Np. możemy nim sterować podkreślenie tekstu w etykiecie. Spróbujmy...
Na formie ułóż CheckBox-a. Nazwij go chkPodkreslenie. Właściwość Caption ustaw na
„Podkreśl”. No dobra – ale co będzie podkreślane ? No oczywiście jakiś tekst w etykiecie. No więc
tworzymy etykietę o nazwie lblTekst i tekscie (Caption) – „To jest jakiś tam tekst”. OK. Teraz nasz
program po zaznaczeniu Check-a powinien podkreślić tekst. Oczywiście kod będziemy dodawać do
Check-a. Klikamy więc go dwukrotnie i dopisujemy kod:
lblTekst.FontUnderline = True
Chyba jeszcze nie znasz właściwości FontUnderline – musisz wiedzieć, że służy ona do
podkreślenia tekstu.
Myślę, że rozumiesz ten prosty kod. Jeśli klikniemy to podkreśl...
Odpal program, zaznacz Check-a i co podkreślił. Hurra ! No ale teraz odznacz. Podkreślenie nie
znika – co jest. No tak. My mamy napisane, że program ma podkreślić jeśli klikniemy na pole – nie
ma ani słowa o odznaczeniu. Pomyślmy jakby to zrobić. Musisz wiedzieć jedną bardzo ważną
rzecz. Jak sprawdzić czy Check Box jesz zaznaczony czy też nie ? Steruje tym funkcja Value. Jeśli
jest ona równa 0 to Check jest nezaznaczony, jeśl 1 to zaznaczony, a jeśli 2 to zszarzały. Jak to
sprawdzić. Zaznacz na formularzy Check i w oknie properties zmień właściwość np. na 1 i co
zaznaczył się... ? Procedura powinna wyglądać tak:
If chkPodkreslenie.Value = 1 Then
lblTekst.FontUnderline = True
Else
lblTekst.FontUnderline = False
End If
Przetłumaczmy.
Jeśli Chec Box zostanie zaznaczony (bo Value będzie równe 1) to
Podkreśl tekst
W przeciwnym przypadku (czyli wyłączymy Checka – Value = 0)
Skasuj podkreślenie tekstu
Koniec
Twoje zadanie – dorób podobny CheckBox pogrubiający tekst. Służy do tego właściwość
FontBold. Myślę, że sobie poradzicie.
No dobra – teraz zabieramy się za RadioButton – teraz nazwany OptionButton. Umieśćmy taki na
formularzu. Fajnie wygląda – ale co poza tym. Czy on się różni od CheckBox-a – tylko wyglądem ?
Nie, nie, nie... Aby się o tym przekonać umieść na formie dwa Check-i i dwa OptionButtony.
Uruchom teraz program. Najpierw zaznacz pierwszego CheckBox-a a potem drugiego. Co ten
SLASH kombinuje – oba się zaznaczyły i co z tego ? To miało być dziwne ? No dobra spróbuj to
samo zrobić z Optionami. Co? nie da się ? :) No właśnie – tu jest różnica. Nie można zaznaczyć
dwóch naraz.
Jak sama nazwa wskazuje to jest przycisk opcji – a więc tylko jedną opcję można wybrać.
Napiszmy mały programik pokazujący praktyczne zastosowanie obu tych pól wyboru. Napiszemy
małą ankietę
Na formularzu umieść dwa OptionButton-y jako Caption ponadawaj im kolejno etykiety – Pentium
i AMD oraz nazwij je optPentium, optAMD. Stwórz także jeden CheckBox i jako właściwość
Caption nadaj mu etykietę Posiadam akcelerator graficzny i nazwij go chkAkcelerator. Potrzebna
nam także będzie etykieta. Skasuj zawartość Caption i nazwij ją lblEtykieta. Nasz program ma
działać tak: W etykiecie ma się pojawić tekst – Masz komputer z procesorem (nazwa) i
(masz/niemasz) akcelerator(a). I tu znów musisz wiedzieć jedną bardzo ważną rzecz. OptionButton-
em też możesz sterować za pomocą opcji Value – tylko z tą różnicą, że nie ma tu już wartośći 0,1,2
tylko jest True lub False. Czyli klikamy dwukrotnie na pierwszym z optionButtonów i dodajemy
następujący kod:
Dim procesor, akcelerator As String
If optPentium.Value = True Then
procesor = "Pentium"
Else
procesor = "AMD"
End If
If chkAkcelerator.Value = 1 Then
akcelerator = "i posiadasz akcelerator graficzny"
Else
akcelerator = "bez akceleratora graficznego"
End If
lblEtykieta = "Masz komputer z procesorem " & procesor & " " & akcelerator
Przeanalizuj kod. Myślę, że nie będziesz mieć z nim żadnych problemów. Jeśli jednak ...
------------------------------------------------------------------------------------------------
Pamiętaj ! Jeśli masz jakiekolwiek problemy ze zrozumieniem kursu, albo masz jakieś pytania pisz
do mnie na adres slash@ptik.prv.pl . Twój list na pewno nie zostanie bez odpowiedzi. Jeśli nawet
nie masz do mnie żadnych pytań ani uwag to i tak napisz.. Po co? Chcę wiedzieć czy w ogóle ktoś
ten kurs czyta. Wiecie – upiszę się jak głupi, a nikomu to nie będzie potrzebne ;( Napisz najlepiej
co uważasz o tym kursie...
------------------------------------------------------------------------------------------------
No dobra, ale program ma to samo wykonywać za każdym razem gdy coś wybierzemy. Dodajmy
więc ten kod do pozostałych ptinButtonói i Check-a. Uruchom program. Działa !
Wszystko byłoby w porządku gdyby nie pojawił się 4x ten sam kod. Przecież to jest bez sensu pisać
4x to samo. A jak gdyby trzeba było to zrobić 20x to co? No właśnie – z pomocą przychodzi nam
funkcja Call. Oznacza ona Połącz. Oto zasada jej działania:
Linijka1
Linijka2
Call Podprogram
Linijka3
Linijka4
Private Sub Podprogram( )
Linijka5
Linijka6
Linijka7
End Sub
Program będzie się wykonywał tak – Pierwzse linijka 1 i 2. Następnie napotykamy Call – łączy nas
z podprogramem – czyli następnie linijka 5,6,7 i do End Sub. W tym momencie program wraca do
Call czyli teraz linijki 3 i 4.
No dobra – ale jak to zastosować do naszego programu ? Bardzo prosto !
Najpier musimy skasować wszystko co napisaliśmy (żeby się nie pogubić...). Kliknij dwukrotnie na
czymkolwiek co znajduje się na formie (możesz nawet na niej samej). Wyświetli się kod – zaznacz
wszystko co widzisz i skasuj przyciskiem Del – powinna zostać czysta strona. No dobra –
oczyszczone z kodu.
Teraz musimy napisać procedurę która będzie wywoływana Call-em. W oknie kodu dopisujemy ją
na samym końcu – zawsze za ostatnim End Sub. Jeśli mamy czystą stronę to gdziekolwiek (się da...
;) ) Napisz:
Private Sub Przelicz ( )
Po naciśnięci Enter VB dopisał End Sub i oddzielił procedurę od reszty. Piszemy dalej to co
wpisywaliśmy wcześniej do każdego z przycisków opcji czyli:
Dim procesor, akcelerator As String
If optPentium.Value = True Then
procesor = "Pentium"
Else
procesor = "AMD"
End If
If chkAkcelerator.Value = 1 Then
akcelerator = "i posiadasz akcelerator graficzny"
Else
akcelerator = "bez akceleratora graficznego"
End If
lblEtykieta = "Masz komputer z procesorem " & procesor & " " & akcelerator
No dobra najważniejsze zrobione. No ale skąd program ma wiedzieć, że po zaznaczeniu jednej z
opcji ma się odwołać do tej procedury ?
No właśnie – w każdym przycisku opcji musimy dopisać linijkę:
Call Przelicz ( )
Sprawdź czy działa – przynajmniej powinno... ;)
Dobra – jak na dzisiaj starczy...
W następnej lekcji dowiesz się jak zaznaczyć dwa OptionButtony na raz. Niemożliwe, co ?
Zobaczymy...
LEKCJA 15
Witajcie. W końcu po dwutygodniowej przerwie zasiadłem do kompa. Trzeba by było dalej pisać
kurs VB... No to zaczynamy.
Co by ty dzisiaj zrobić - może jakieś... zaraz dzisiaj chyba miałem napisać jak włączyć 2
OptionButtony, nie? No dobra, ale po co? Zastanówmy się nad rozszerzeniem programu z
poprzedniej lekcji.
Ostatnio pisaliśmy program, gdzie OptionButtony decydowały o naszym procesorze (a CheckBox -
czy mamy akcelerator graficzny). A jak byśmy jeszcze chcieli dorobić np. wybór prędkości CD-
ROM-u ? Konieczne byłoby zaznaczenie dwóch OptionButtonów. Jednego decydującego o
procesorze, a drugiego o CD-ROM-ie. No dobra ale jak to zrobić ?
Umieśćmy na formie dwa OptB (tak to będzie w skrócie) nadajmy im etykiety jak w programie z
poprzedniej lekcji czyli Pentium i AMD. Teraz z 5 kolejnych OptB dla CD-ROM-u. Nadajmy im
kolejno etykiety - wolniejszy, 24x, 32x, 40x, szybszy. Uruchamiamy program i spróbujmy
zaznaczyć, że mamy procesor AMD i CD 40x. Niestety, nie da się. Gdy zaznaczamy AMD jest
wszystko OK. Ale przy zaznaczaniu CD-ROM-u odznacza się procesor. Dlaczego to chyba wiesz?
Nie da się zaznaczyć więcej niż jednej opcji. No dobra - ale powiedziałem, że jakoś się da. No ale
jak ?
Do tego celu musimy użyć narzędzia o nazwie Frame (tłumacząc Ramka). Jest ono na palecie
narzędzi w postaci szarego kwadracika i małym napisem xy u góry (3 rząd, 1 kolumna). Spróbujmy
umieścić to na formularzu. No, takie sobie - ale do czego to właściwie służy ?
Jeśli w ramce utworzymy OptionButtony to nie będą one kolidowały z OptB z sąsiednich ramek,
czy z poza formy. Czyli parę możemy stworzyć np.
OptB bezpośrednio na formie + OptB w ramce lub
OptB w ramce1 + OptB w ramce2 itd..
Oczywiście par możemy tworzyć więcej. No to co - przenosimy nasze OptB (te co charakteryzują
CD-ROM) na ramkę. Chwytamy, przenosimy i puszczamy - OptB zniknął ? Co jest ?
ZAPAMIĘTAJ !!!
Najpierw tworzymy ramkę, a potem przycisk opcji tworzymy bezpośrednio na niej. Nie możemy
przenosić OptB-ów na ramkę.
Czyli stare usuwamy i tworzymy nowe bezpośrednio na ramce. Uruchamiamy nasz program i co, da
się zaznaczyć dwie opcje ?
ZADANIE DOMOWE
Udoskonal program z poprzedniej lekcji, tak aby można było zaznaczyć prędkość CD-ROM-u.
Napis wynikowy powinien być w tej formie:
Masz komputer z procesorem {AMD, Pentium}, CD-ROM-em {wolniejszym niż 24x, 24x, 32x,
40x, szybszym niż 40x} i {posiadasz akcelerator, nie posiadasz akceleratora}
Banalne nie ? To no do roboty...
_________________________________________________________________________
Teraz dwa dopełnienia do poprzednich lekcji. Tak właściwie to jedno nowe, a jedno dopełnienie do
funkcji DIM. Czy może pamiętasz dokąd funkcja DIM pamiętała zmienną ? Tak, do End Sub - czyli
zakończenia procedury. No dobra - napiszmy króciutki program, aby zobrazować to co chcę
wyjaśnić.
Na formie ułóż 2 przyciski - jako etykiety nadaj im Zapamiętaj i Odczytaj oraz 1 TextBox (Pole
tekstowe) nadaj mu nazwę txtzmienna. I o co tu będzie chodziło... Po naciśnięci przycisku
Zapamiętaj nasz program ma zapisać do zmiennej x to co będzie w TextBox-ie. Przycisk Odczytaj
ma spowodować wyświetlenie się Okna komunikatu którego treścią będzie zmienna.
Tak więc do przycisku Zapamiętaj dodajemy kod:
Dim x as string
x = txtzmienna ' zapisujemy d x to co jest w TextBox-ie
A do przycisku Odczytaj:
Dim odp
odp = MsgBox (x)
Uruchom program. Najpierw naciśnij Zapamiętaj, a potem Odczytaj i co? Wyświetla się nam pusty
komunikat - ale dlaczego. Przeanalizujmy program...
Po naciśnięci Zapamiętaj x to się równa to co jest w textboxie (pamiętaj, że DIM "podtrzymuje" x
tylko do momentu zakończenia procedury czyli do End Sub na który waśnie natrafia nasz program.
Po wciśnięciu drugiego przycisku x = nic i właśnie dlatego otrzymujemy puste okienko.
No dobra, ale jak zmusić program, aby pamiętał x przez cały czas ?
Do tego służy opcja global
Stosuje się ją jeszcze przed załadowaniem programu. Czyli w Form_Load ? Nie. Należy ją
załadować jeszcze wcześniej. Ale gdzie ?
Musisz wiedzieć, że oprócz form są jeszcze moduły - one ładują się najwcześniej. No ale jak dodać
moduł do mojego projektu ?
Z menu wybierz Project - Add Module. Teraz wyskoczy okienko- kliknij dwukrotnie na Module.
Zauważ z prawej strony w okienku projektu, że oprócz formy widzimy jeszcze dodany przez nas
moduł. Wyskoczyło okienko tekstowe - pewnie je zamknąłeś - a jeśli nie to je zamknij. Po co?
Skoro zamknąłeś to jak teraz przywrócisz to okienko z powrotem ? Do tego posłuży nam okienko
projektu - kliknij dwukrotnie na pozycji Module1 - a okienko wróci. Teraz dopisz taką linijkę:
Global x as string
Funkcja jak widzisz działa identycznie jak DIM, z tą różnicą, że jest "długowieczna".
Ale musimy jeszcze usunąć funkcję Dim x as string z jednego z przycisków - przecież nie będziemy
deklarować zmiennej dwa razy. No to teraz uruchom program i co? Działa ? Jeśli zrobiłeś wszystko
jak pisałem to powinno... Czy teraz widzisz różnicę pomiędzy DIM a GLOBAL ? Mam nadzieję, że
tak...
Druga sprawa może następnym razem - było by to jednak za dużo jak na jeden dzień...
------------------------------------------------------------------------------------------------
Pamiętaj ! Jeśli masz jakiekolwiek problemy ze zrozumieniem kursu, albo masz jakieś pytania pisz
do mnie na adres slash@ptik.prv.pl . Twój list na pewno nie zostanie bez odpowiedzi. Jeśli nawet
nie masz do mnie żadnych pytań ani uwag to i tak napisz.. Po co? Chcę wiedzieć czy w ogóle ktoś
ten kurs czyta. Wiecie – upiszę się jak głupi, a nikomu to nie będzie potrzebne ;( Napisz najlepiej
co uważasz o tym kursie...
------------------------------------------------------------------------------------------------
LEKCJA 16
_________________________________ Druga sprawa ___________________________
Jak za pomocą jednego formularza wywołać drugi ? Wiadomo - większe programy składają się z
wielu formularzy. No dobra - pokaże Wam praktycznie...
Na formie ułóż przycisk o etykiecie Pokaż. Teraz stworzymy drugą formę - ona właśnie ukaże się
po naciśnięciu przycisku Pokaż. No dobra - tworzymy - ale jak ? Bardzo podobnie jak Moduł. Z
menu wybierz Project - Add Form (pierwsza pozycja) kliknij dwukrotnie na form. Na drugiej
formie ułóż przycisk o etykiecie Ukryj i drugi przycisk o etykiecie Koniec. Jeszcze jedno - co by się
stało jakbyś niechcący wyłączył formę2 - kliknij na krzyżyku w okienku z naszą formą (NIE na
krzyżyku który jest na formie). I co - znikło... Przywracamy to tak samo jak moduł. W okienku
project klikamy dwukrotnie na Form2 i znów widzimy naszą formę. No dobra - zajmijmy się dalej
programem.
Jak spowodować aby po kliknięciu przycisku Pokaż (na Form1) wyświetlić Form2. Proste -
dodajemy kod:
Form2.visible = true
Uruchom program i przetestuj. Pojawiają się dwie formy. Teraz jeszcze dodamy kod do dwóch
przycisków na formie 2.
Aby ukryć formę (właściwie to wyłączyć) należy dodać kod:
Unload Me
Aby zakończyć cały program - czyli do przycisku koniec:
Unload Form1
Unload Me
Wystartuj program i przetestuj - działa? Myślę, że tak.
Teraz sprawdź jeszcze jedno. Uruchom program, wyświetl formę 2 i naciśnij ukryj. Teraz zamknij
program "krzyżykiem" w prawym górnym rogu programu. Na niebiesko zaznaczyła się nam ikonka
"Play" na pasku narzędzi w VB. Oznacza to, że program jest gotowy do następnego uruchomienia. I
co z tego? Czytaj dalej...
Skoro już jesteśmy przy tym temacie to od razu wyjaśnię czym różni się ukrywanie formy od
wyłączenia jej. Zastosujmy to do powyższego przykładu. W przycisku Ukryj zamiast Unload Me
wpisz:
Form2.visible = false
Teraz uruchom program. Postępuj jak przedtem czyli
Uruchom program, wyświetl formę 2 i naciśnij ukryj. Teraz zamknij program "krzyżykiem" w
prawym górnym rogu programu. Ale ikonka play nie zmieniła koloru na niebieski, co świadczy, że
program jest jeszcze uruchomiony - ale gdzie ?
Naciśnij stop.
Uruchomiona jest forma2 gdyż ją tylko ukryliśmy, a nie zamknęli.
To po co w takim razie stosować funkcję Form2.Visible = false ?
Zróbmy jeszcze jeden test. Na formie 2 ułóż jeszcze TextBox-a . Wystartuj program. Naciśnij
przycisk Pokaż - wpisz coś w TextBox (nie wystarczy to co jest tam domyślnie) i kliknij ukryj
(czyli form2.visible = false). Wróciliśmy do formy 1. Kliknij jeszcze raz Pokaż i co jest w TextBox-
ie. Właśnie to co wpisaliśmy. No dobra, a teraz zamień form2.visible = false na Unload Me. Zrób to
samo jeszcze raz i co? Text box już nie wyświetli tego co wpisaliśmy.
Krótko:
Funkcja Form.visible = false ukrywa tylko formę, zachowując jej własności i dane na niej
Funkcja Unload Form kasuje bezpowrotnie wszystkie dane z formy.
LEKCJA 17
Dzisiaj przed Wami dość trudna lekcja - będziemy mówić o oknach dialogowych. Zacznijmy od
tego co to jest okno dialogowe. Okna dialogowe spotkałeś pewnie setki razy. Pokaże ci je w
Paincie. Uruchom Paint-a (Start - Programy - Akcesoria - Paint). Gdy się uruchomi to z menu
wybierz plik i otwórz - pojawiło się okno dialogowe. Daj anuluj. Teraz z plik wybierz zapisz -
pojawiło się drugie okno dialogowe bardzo podobne do otwórz. Dobra daj anuluj. Na dole jest
paleta z farbami - kliknij dwukrotnie na jakimkolwiek kolorze. Wyskoczyło kolejne okno
dialogowe - kolor. Są jeszcze okna dialogowe - czcionka i drukuj. W przykładzie posłużę się
dwoma - kolor i czcionka.
Pamiętasz jeszcze lekcję 13 - kazałem tam zapisać sobie mały programik który potrafił
wyrównywać tekst do prawej, lewej i wyśrodkowywać. Teraz uzupełnimy go o możliwość
manipulowania czcionką tzn. wielkość, styl i rodzaj czcionki. Uzupełnimy go także o możliwość
zmiany koloru czcionki. Do dzieła...
Uruchom VB. Z menu file wybierz open i odnajdź program (rozszerzenie VBP). No dobra
uruchomił się - teraz dorabiamy dwa przyciski. Jako wartość kaption przypisz im kolejno -
Czcionka, Kolor. No dobra - teraz musimy dopisać jakiś kod - ale jaki ?
No niestety - sam kod nie wystarczy - na formie musimy ułożyć element króry nazywa się Common
Dialog Box. Jak się domyślasz będzie on na palecie narzędzi po lewej. No przynajmniej musi się
tam znaleźć. Domyślnie jest wyłączony (chociaż nie wiem dlaczego). No to jak go dodać do palety
? Kliknij prawym klawiszem myszki (to ten drugi) na wolnym miejscu na pasku narzędzi, z
powstałego menu kontekstowego wybierz Components. Wyskoczyło okienko dialogowe na którym
widzimy listę dostępnych komponentów - my musimy znaleźć "Microsoft Common Dialog Control
6.0". Naciskamy Zastosuk i zamknij. Czy widzisz już nowy element na pasku narzędzi ? Tak, ten na
samym dole - to ten prostokąt z dwoma kwadracikami i kropkami w środku). Wybierz go i ustaw
gdzieś na formie. Obojętne gdzie - on i tak jest niewidoczny. Potrzebny jest on VB tylko po to aby
zapamiętywał własności wybrane z okien dialogowych. Zmień tylko jego nazwę na cdb1. Wystartuj
program i co? Widzisz go gdzieś ? No nie. Dobra wyłącz program - bierzemy się za kod. Kliknij
dwukrotnie na przycisku Czcionka. Teraz dopiszemy kod:
cdb1.DialogTitle = "Zmień czcionkę"
cdb1.FontName = "MS Sans Serif"
cdb1.Flags = cdlCFBoth
cdb1.ShowFont
Uruchom program. Kliknij przycisk czcionka - pokazało się nam okno dialogowe. Wybierz
cokolwiek i kliknij OK. Jak widzisz nasz program jeszcze nie działa. Na razie wyjaśnię
poszczególne linijki kodu:
Najpierw tytuł okna dialogowego
Potem mamy domyślną czcionkę
Teraz bardzo ważna rzecz ! Informuje to CDB-a jakie czcionki ma wyświetlić - cdlCFBoth
oznacza, że wszystkie
No i teraz pokaż okno dialogowe.
Teraz musimy spowodować aby to działało - poniżej jeszcze dopisujemy następujący kod:
lblgotowe.Font = cdb1.FontName
lblgotowe.FontBold = cdb1.FontBold
lblgotowe.FontItalic = cdb1.FontItalic
lblgotowe.FontSize = cdb1.FontSize
Jak to działa ? W chwili gdy ty wybierasz coś w Oknie dialogowym odpowiednie własności zostają
zapisane do cdb1. Teraz musisz je tylko stamtąd wyciągnąć. Teraz kolejno wyciągaliśmy:
Nazwę czcionki, czy jest pogrubiona, czy może z kursywą, oraz jej rozmiar.
Uruchamiamy program i... działa !!!
No dobra, a co z drugim przyciskiem? Jeszcze został kolor czcionki... Do drugiego przycisku
dodajemy więc następujący kod:
cdb1.dialogTitle = "Zmieniamy kolor"
cdb1.ShowColor
Uruchamiamy program - naciskamy przycisk kolor - wyskakuje okienko takie jak w Paint. Teraz
wybieramy jakiś kolor i OK. Niestety, jeszcze nie działa. Teraz musimy jakoś z cdb1 wyciągnąć
kolor - ale jak? Poniżej dopiszmy jeszcze:
lblGotowe.ForeColor = cdb1.color
Teraz uruchamiamy program iii... działa !!!
*****************************KOMPILACJA*******************************
Dobra - teraz was nauczę kompilować programy. Po co? Gdy piszesz projekt to zapisujesz go do
pliku VBS. A czy nie lepiej byłoby zrobić plik EXE ? Jasne, że tak ! Kompilacja jest nadzwyczaj
banalna. Wystarczy z menu VB wybrać Make Project1.exe . Oczywiście zamiast Project1.exe może
pisać co innego. No to wybieramy Make... exe. Teraz VB pyta się Nas gdzie zapisać skompilowany
program. Teraz tylko OK i gotowe !!!
*************************************************************************
No dobra - teraz ciąg dalszy CDB.
1. Aby wywołać okno otwórz należy posłużyć się następującym kodem:
cdb1.dialogTitle = "Tytuł"
cdb1.Filter = "Zwykły plik tekstowe|*.txt|Zdjęcia|*.bmp; *.jpg "
cdb1.showOpen
Pewnie zastanawiasz się jak zrobić taki znaczek: | . Znajduje się on nad Enter-em obok Backspace-
a. Wpisujemy go z Shift-em. Wszystko pewnie jest jasne tylko nie wiesz co to są te filtry. Pewnie
się spotkałeś z takimi programami które pozwalają otworzyć tylko niektóre pliki. W powyższym
przykładzie program będzie tylko widział pliki txt, a po zmianie opcji także bmp i jpg. Jeśli chcesz
aby program widział wszystkie pliki to cdb1.Filter = "*.*"
No ale co to zwraca ? Zwraca to ścieżkę do pliku - możesz ją wyciągnąć w ten sposób:
Dim x
x = cdb1.fileName
2. Zapisz:
cdb1.DialogTitle = "Tytuł"
cdb1.Filter = "*.*"
cdb1.FileName = "Test.txt" 'Domyślna nazwa pliku
cdb1.ShowSave
Ta funkcja także zwraca właściwość FileName
3. Drukuj
cdb1.DialogTitle = "Tytuł"
cdb.ShowPrinter
Ta funkcja zwraca pewne ustawienia drukarki - ale o tym później
************************************************************************
Myślę, że tyle na dzisiaj wystarczy - do następnego spotkania...
------------------------------------------------------------------------------------------------
Pamiętaj ! Jeśli masz jakiekolwiek problemy ze zrozumieniem kursu, albo masz jakieś pytania pisz
do mnie na adres slash@ptik.prv.pl . Twój list na pewno nie zostanie bez odpowiedzi. Jeśli nawet
nie masz do mnie żadnych pytań ani uwag to i tak napisz.. Po co? Chcę wiedzieć czy w ogóle ktoś
ten kurs czyta. Wiecie, skoro nikt tego nie czyta to po co pisać ;( Napisz najlepiej co uważasz o
tym kursie...
------------------------------------------------------------------------------------------------
LEKCJA 18
Hi ! Dzisiaj znów dość trudna lekcja przed Wami. Powiemy trochę o liście wyboru i listach Combo.
Najpierw zajmiemy się listami wyboru. Co to jest lista wybory - nasuwa się pytanie. Jest to takie
"okienko" do którego możemy dodawać różne słowa i je np. posortować ? Zresztą cóż ja będę tu
dużo mówił. Zobaczmy listę wyboru na praktycznym przykładzie. Uruchamiamy VB i na formie
układamy element nazwany ListBox (kolumna 2 rząd 5 - taka ikonka z prawym paskiem
przewijania i białym polem) Uwaga nie pomyl z ComboBox-em - o tym dopiero za chwilę. Pewnie
pytasz jak rozpoznać który jest który. Najedź na ikonkę która według ciebie jest tą właściwą. Nic
nie naciskaj, i nie ruszaj myszą - za chwilę się pojawi etykietka z nazwą elementu. Dobra -
znalazłeś ? Teraz to ułóż na formie. Chmm... wygląda jak TextBox. No dobra, ale jak tym się
posługiwać ? Pokaże to na malutkim przykładzie. ListBox nazwij lstLista teraz dodaj przycisk na
formie i nazwij go cmdDodaj. Jako właściwość Caption nadaj mu Dodaj. Teraz na formie ułóżmy
jeszcze TextBox-a - nazwij go txtWprowadz. No teraz wyjaśnię jak ma działać program. Gdy
wpiszemy coś w pole tekstowe i klikniemy Dodaj, to zawartość tego pola tekstowego ma zostać
przeniesiona do Listy. Teraz weźmy się za kod. Do przycisku dopisz:
lstLista.AddItem txtWprowadz
txtWprowadz = ""
Uruchom program - wpisz coś w pole tekstowe i kliknij Dodaj. Fajnie tekst przeniósł się do listy!
Wpisz coś drugi raz i kliknij Dodaj. Wow, mamy już dwie pozycje. Teraz przetłumaczymy
powyższy kod:
Lista.Dodaj to co w txtWprowadz (czyli w naszym polu tekstowym)
wyczyść pole tekstowe - po co? Po co za każdym razem kasować słowo dodane do listy - lepiej
żeby za nas to zrobił komputer :)
Dobra, myślę, że nie miałeś z tym problemu - teraz funkcja usuń. Dodajmy do naszego projektu
jeszcze jeden przycisk - nazwij go cmdUsun i jako etykietę nadaj mu Usuń. Teraz jeszcze jeden
textBox - nazwij go txtUsun. Teraz nasz program będzie jeszcze potrafił usunąć podaną pozycję
listy. Tak więc do przycisku Usuń dodaj następujący kod:
Dim x
x = Val(Text1) - 1
lstLista.RemoveItem (x)
Ho, ho, ho !!! Co to znowu jest za kod. O tym za chwilę. Na razie uruchom program. Dopisz kilka
elementów do listy. Teraz w nowe pole tekstowe wpisz liczbę, która będzie pozycją pewnej danej
którą chcesz usunąć z listy. Wpisz np. 2 lub 3 (Tyle minimalnie musi być pozycji na liście !!!).
Teraz Usuń. Działa. No dobra - ale jak ?
Tłumaczenie: Ostatnia linijka usuwa element x listy. Ale dlaczego wcześniej jest x = to co w polu
tekstowym - 1 ? Dla Visual Basica pierwsza pozycja na liście ma wartość 0, druga 1 itd. Aby to
unormować odejmujemy jeden. No i jak to działa ? Jeśli w okienko tekstowe wpiszesz 1 program
odejmie od tego 1 i wyjdzie mu zero - więc usunie pierwszą pozycję listy. Chyba kapujesz nie ?
Myślę także, że pamiętasz do czego służyła funkcja VAL ( ) - tak ona zamieniała stringi (dane
tekstowe) na liczby.
Może powiecie, że ten program jest bez sensu - przecież lepiej jest zaznaczyć ręcznie pozycję którą
chcemy usnąć i kliknąć Usuń, zamiast ręcznie liczyć pozycje listy, wpisywać je do TextBox-a i
dopiero Usuń. Tego też się nauczycie - ale później. Na razie chcę zobrazować działanie funkcji
ListBox po to tylko, aby wyświetlała różne dane, a nie abyśmy nimi swobodnie operowali. No
dobra, ale dlaczego nie teraz ? Kod jest pogmatwany i bardzo trudny. Dla zniechęcenia podaję
kawałek kodu ;)
Etykieta = costam(LstLista.ItemData(LstLista.ListIndex))
To może nie wygląda tak źle - ale musimy to jeszcze połączyć z tablicami danych o których w
następnej lekcji.
Dobra do rzeczy - teraz następna właściwość ListBox-a. Czyszczenie listy - jeśli chcesz usunąć
wszystkie elementy list do jakiegoś nowego przycisku dodaj kod:
LstLista.Clear
No dobra - a jak policzyć wszystkie elementy na liście ? Bardzo prosto - wystarczy posłużyć się
kodem:
Dim x
x = lstLista.ListCount
Ok - załatwiliśmy prawie wszystko. Zostało nam jeszcze podstawianie pod zmienne. Jeśli chcesz
podstawić pod zmienną x np. 4 element listy posłuż się kodem
Dim x
x = lstLista.List(3)
Chyba zrobiłem pomyłkę - my chcemy podstawić 4 element listy, a ja w kodzie napisałem 3. Nie
zapomnij, że VB zaczyna liczyć od 0. Dla nas 4 element listy to dla niego trzeci !!!
Teraz jeszcze pewne właściwości listy.
Columns
Ta właściwość określa ilość kolumn. Jeśli jej wartość jest ustawiona na 0 to mamy zwykłą listę z
pionowym paskiem przewijania. Jeśli damy 1 to elementy na liście będą wyświetlone w poziomie.
Jeśli damy więcej to elementy będą się układać poziomo, na ekranie będzie widać n kolumn (n to
liczba > 1 ). Uff...
MultiSelect
0 - None - oznacza, że możemy wybrać tylko jeden element listy (podobnie jak było z
OptionsButton), jeśli 1- Simple, użytkownik może wybrać kilka elementów klikając na nich. 2 -
Extended - użytkownik może wybrać kilka elementów listy pod warunkiem, że przytrzyma klawisz
Shift
Sorted
Określa czy lista ma być posortowana alfabetycznie, czy też nie
Style
Określa, czy lista ma wyglądać "normalnie" czy bardziej jak zbiór CheckBox-ów ;)
No to by było tyle o liście wybory - został nam jeszcze ComboBox - ale nie bójcie się. Posługiwać
się nim będziemy identycznie jak ListBox-em. Są tylko dwie różnice. W ListBox-ie mogliśmy
ustawić czy będzie możliwość wybrania jednej czy wielu pozycji. W Combolu możliwe jest tylko
wybranie jednej .
Druga - chyba najważniejsza - zamiast stosować ListBox-a + TextBoxa możemy zastosować sam
ComboBox. Jak - musimy posłużyć się funkcją rozpoznającą wciśnięty klawisz (o tym będziemy
uczyć się w przyszłości). Ułóż na formie ComboBox-a (to ten obok List Box-a, tylko trochę
większy). Kliknij na niego dwukrotnie. Zobacz na górę okna - pisze coś takiego :
Private Sub Combo1_Click()
My zamiast click będziemy musieli posłóżyć się KeyDown. No ale jak ? Popatrz jeszcze wyżej.
Widać dwa ComboBox-y. W jednym jest wpisane Combo1 a w drugim Click. Zmień to Click na
KeyDown i dopisz następujący kod:
If KeyCode = vbKeyReturn Then
Combo1.AddItem Combo1.Text
Combo1.Text = ""
End If
Tłumaczę:
Jeśli nacisnąłeś Enter to
Dodaj do list Combo to co wpisaliśmy
Wyczyść to co wpisaliśmy
Koniec Jeśli
Sam wypróbuj jak to działa - na dziś to by było tyle...
------------------------------------------------------------------------------------------------
Pamiętaj ! Jeśli masz jakiekolwiek problemy ze zrozumieniem kursu, albo masz jakieś pytania pisz
do mnie na adres slash@ptik.prv.pl . Twój list na pewno nie zostanie bez odpowiedzi. Jeśli nawet
nie masz do mnie żadnych pytań ani uwag to i tak napisz.. Po co? Chcę wiedzieć czy w ogóle ktoś
ten kurs czyta. Wiecie, skoro nikt tego nie czyta to po co pisać ;( Napisz najlepiej co uważasz o
tym kursie...
------------------------------------------------------------------------------------------------
LEKCJA 19
Jak napisałem w poprzednim kursie zajmiemy się dzisiaj tablicami danych. Ochooo. Brzmi to jakoś
tak skomplikowanie i matematycznie. Nie bój się. Tym razem przed nami bardzo prosta lekcja !
Jeśli wiesz do czego służy funkcja DIM i FOR (Właściwie skoro nie wiesz to po co czytasz? ;) ) to
bez problemów zrozumiesz tablicę danych. Najczęściej używa się jej w parze z funkcją FOR.
Tablica danych to nic innego jak lista zmiennych tego samego typu. Np. nie możemy pomieszać w
tablicy stringów i liczb. Podaję praktyczne zastosowanie tablicy danych
Przypuśćmy, że musimy napisać program sumujący 20 zmiennych. Wykorzystując już zdobytą
wiedzę napisalibyśmy tak:
Dim Liczba1, Liczba2, Liczba3, Liczba4, Liczba5, Liczba6, Liczba7, Liczba8 (itd...)as Single
wynik = Liczba1 + Liczba2 + Liczba3 + Liczba4 + Liczba5 + Liczba6 + Liczba7 + itd...
Sporo pisania. Gdybyśmy jednak zastosowali tablicę danych wyglądało by to tak:
Dim tablicaliczb(20)
Dim x as byte
For x = 1 to 20
wynik = wynik + tablicaLiczb(x)
Next x
Prawda, że krócej. Tak samo trwa zapisywanie do zmiennych. Gdybyśmy np. chcieli odczytać dane
z pliku to musielibyśmy to robić tak:
Dim Liczba1, Liczba2, Liczba3, Liczba4, Liczba5, Liczba6, Liczba7, Liczba8 (itd...) as Single
--- odczyt z pliku - zapisz do zmiennej Liczba1 ---
--- odczyt z pliku - zapisz do zmiennej Liczba2 ---
--- odczyt z pliku - zapisz do zmiennej Liczba3 ---
--- odczyt z pliku - zapisz do zmiennej Liczba4 ---
--- odczyt z pliku - zapisz do zmiennej Liczba5 ---
itd...
Pomyśl sobie, jak byśmy musieli odczytać 300 danych z pliku... Lepiej nie myśleć. Za pomocą
tablic danych nawet 1000000 jest dla nas błachostką :) Oto sposób:
Dim tablicadanych(100)
Dim x as Single
For x=1 to 100
--- odczyt z pliku - zapis do zmiennej tablicadanych(x)
Next x
Prawda, że proste. Jeśli nawet jeszcze tego nie rozumiesz to nie przejmuj się zbytnio - okazję do
poćwiczenia tego będziemy mieć za kilka lekcji, kiedy będziemy uczyć się dostępu do plików.
Czyli jak odczytać dane, zapisać itp.
------------------------------------------------------------------------------------------------
Pamiętaj ! Jeśli masz jakiekolwiek problemy ze zrozumieniem kursu, albo masz jakieś pytania pisz
do mnie na adres slash@ptik.prv.pl . Twój list na pewno nie zostanie bez odpowiedzi. Jeśli nawet
nie masz do mnie żadnych pytań ani uwag to i tak napisz.. Po co? Chcę wiedzieć czy w ogóle ktoś
ten kurs czyta. Wiecie, skoro nikt tego nie czyta to po co pisać ;( Napisz najlepiej co uważasz o
tym kursie...
------------------------------------------------------------------------------------------------
No, teraz zajmiemy się ScroolBar-em. Co prawda jeszcze go nigdy nie użyłem - nawet nie
widziałem jego praktycznego zastosowania, ale może się Tobie przydać. Jak go umieścić na formie.
Bardzo łatwo. Znajduje się on (one - bo są dwa - poziomy i pionowy) zaraz pod ComboBox-em i
ListBoxem. Tak to te 2 paski pionowy i poziomy z strzałeczkami na końcach. Umieść np. pionowy
na formie. Rozciągnij go aby był jak najwyższy. Teraz uruchom program. Chmmm... Wygląda jak
zwykły pasek do przewijania tekstu. Faktycznie, tak samo wygląda, ale służy do czego innego.
Zwraca on wartość która może posłużyć np. do manipulacji wielkości czcionki w jakiejś etykiecie.
Zanim napiszemy programik musisz poznać 4 właściwości ScrollBar-a.
SmallChange
Tłumacząc - Mała zmiana. Oznacza wartość o którą zmieni się ScrollBar po naciśnięciu jednej ze
strzałek
LargeChange
Tłumacząc - Duża zmiana. Oznacza wartość o którą zmieni się ScrollBar po kliknięciu
gdziekolwiek na pasku
Min
Wartość minimalna paska
Max
Wartość maksymalna paska
No to bierzemy się za pisanie programu:
Na formie mamy już ułożony scrollbar, teraz jeszcze ułóżmy dość dużą etykietę. Nazwijmy ją
lblCzcionka jako wartość Caption nadaj jej TEST. OK. Teraz musimy spowodować, aby regulując
ScrollBar-em regulować wielkość Czcionki. Musimy zmienić właściwości Min i Max. Dlaczego?
Zaznacz ScrollBar i w okienku Properties odnajdź właściwość Min. Domyślnie jest 0. Wielkość
czcionki 0? To chyba jest niemożliwe !!! Najmniejsza to 1. Zmieńmy więc Min z 0 na 1. Teraz
powyżej mamy właściwość Max. 32767 - takiej wielkości czcionka ?! W życiu nie zmieściłaby się
na monitorze. Zmieńmy na 50. Dobra - ustalmy jeszcze SmallChange. Jest 1 no i chyba tak
zostanie. Po kliknięciu na strzałce wielkość czcionki zmieni się o jeden - mniej nie ma sensu a
więcej też się nie opłaci, bo nie będziemy mogli dokładnie ustawić wielkości czcionki. W
większości przypadków SmallChange zostaje 1. Teraz bierzmy się za LargeChange. Co też 1 ? Nie
zmieńmy to na 5. OK. Właściwości paska ustawione. Teraz dopiszemy do niego kod. Kliknij więc
na nim dwukrotnie i dopisz:
lblCzcionka.FontSize = VScroll1
Uruchom teraz program - musisz kliknąć aż 7 razy na strzałce w dół aby zobaczyć efekt.
To by było na tyle jeśli chodzi o ScrollBar. Do następnego spotkania...
LEKCJA 20
Witajcie wszyscy. Dziś przed wami kolejna dość prosta lekcja. Poznamy kilkanaście funkcji. Dość
gadania zaczynamy.
Visual Basic potrafi dobrze operować na godzinach:
1. Wyciąganie informacji o dacie - Stwórzmy mały programik, ułóżmy przycisk i dodajmy do niego
kod:
x = MsgBox(Date)
Uruchamiamy. Program w okienku pokazuje dzisiejszą datę w formacie yy-mm-dd
(rok [dwie ostatnie cyfry]- miesiąc, dzień )
2.DateSerial zwraca w wewnętrznym formacie datę wpisaną przez nas ręcznie np.
Dim MyDate
MyDate = DateSerial(1969, 2, 12)
x = MsgBox (MyDate)
Zwraca to 69-02-12
3.DateAdd - potrafi dodawać do podanej daty miesiące dni itd: Zobaczmy jak to działa. Do
przycisku dodajmy kod:
Dim DataPoczatek As Date ' Declare variables.
Dim TypDopisu As String
Dim Miesiace As Integer
Dim Odp
TypDopisu = "m"
DataPoczatek = InputBox("Podaj jakąś datę w formacie yy-mm-dd")
Miesiace = InputBox("Ile misięcy chcesz dodać")
Odp = "Nowa data: " & DateAdd(TypDopisu, Miesiace, DataPoczatek)
x = MsgBox (Odp)
Uruchom go. Program najpierw pyta nas o datę, potem ile miesięcy chcemy dodać, i w końcu
dostajemy odpowiedź.
Składnia tej funkcji:
DateAdd (Jednostka, Ilość jednostek, Data)
Yyyy Rok
Q
Kwartał
M.
Miesiąc
Y
Dni w roku
D
Dni
W
Weekendy
Ww
Tygodnie
H
Godziny
N
Minuty
S
Sekundy
Zauważ, że w naszym przykładzie użyliśmy literału m - czyli miesiące
4.DateDiff - zwraca ilość jednostek czasu między dwoma datami
Dim TheDate As Date
Dim Msg
TheDate = InputBox("Podzaj jakąś przyszłościową datę")
Odp = "Będzie to za: " & DateDiff("d", Now, TheDate) & " dni."
x = MsgBox (Odp)
Zauważ w tym programiku w linijce 4, że użyliśmy literki d co oznacza ilość dni.
Składnia :
DateDiff ("jednostka", data1, data2)
5.DatePart - zwraca ilość jednostek licząc od początku roku. np.
Dim TheDate As Date
Dim Odp
TheDate = InputBox("Podaj datę:")
Odp = "Od początku roki minęło: " & DatePart("q", TheDate) & " kwartałów"
x = MsgBox (Odp)
Składnia:
DatePart ("jednostka", data)
6.Now - zwraca aktualną datę i czas
x = MsgBox (Now)
wyświetli to np. 00-06-15 11:12:34
7.Time - zwraca aktualny czas np.
x = msgBox(Time)
zwróci to np. 12:23:54
9. TimeSerial - zwraca w wewnętrznym formacie godzinę
MyTime = TimeSerial(16, 35, 17)
' Reprezentacja godziny 4:35:17 po południu.
Zwróci to 16:35:17
10. Timer - tą funkcją zajmiemy się trochę dokładnie, gdyż jest ona używana dość często. Zwraca
ona ilość sekund które upłynęły od północy. No, ale po ci mi to ma być potrzebne ?
Napiszemy program który pyta się nas ile to jest 12*6. Po podaniu prawidłowej odpowiedzi
program wyświetli komunikat ile myśleliśmy nad tym zadaniem...
Ale po co tu funkcja licząca sekundy od północy ?
Załóżmy, że uruchomiliśmy program dokładnie o północy - funkcja timer wskazuje 0.
Rozwiązujemy zadanie 10 sek, funkcja timer wskaże 10 sek. Jeśli teraz odejmiemy czas odpowiedzi
od czasu zapytania otrzymamy czas ile spędziliśmy na rozwiązywaniu zadania.
No dobra - inaczej. Zaczęliśmy w 12000 sekundzie od pólnocy, po 10 sek timer wskaże 12010 czyli
12010-12000 = 10 sek (myślenia). Napiszmy program - może lepiej to zrozumiesz:
Na formularzu umieść przycisk i dodaj do niego kod:
Dim CzasPrzed, CzasPo, CzasRoznica as Single
Dim Odp as string
CzasPrzed = Timer ' Pobieramy czas początku testu
Do
Odp = InputBox ("Ile wynosi iloczyn 12 i 6 ?")
Loop Until Val(Odp) = 72
CzasPo = Timer '' Pobieramy czas końca testu
CzasRoznica = CzasPo - CzasPrzed
x = MsgBox("Zajęło ci to: " & CzasRoznica & " sekund")
Przy okazji przypomniałeś sobie pętle. Program będzie wyświetlał pytanie dopóki nie podamy
prawidłowej odpowiedzi. Potem oblicza czas i podaje wynik. Uruchom program i sam sprawdź...
Jak widzisz odpowiedź jest ułamkowa - ale o zaokrąglaniu liczb dowiesz się na następnej lekcji.
------------------------------------------------------------------------------------------------
Pamiętaj ! Jeśli masz jakiekolwiek problemy ze zrozumieniem kursu, albo masz jakieś pytania pisz
do mnie na adres slash@ptik.prv.pl . Twój list na pewno nie zostanie bez odpowiedzi. Jeśli nawet
nie masz do mnie żadnych pytań ani uwag to i tak napisz.. Po co? Chcę wiedzieć czy w ogóle ktoś
ten kurs czyta. Wiecie, skoro nikt tego nie czyta to po co pisać ;( Napisz najlepiej co uważasz o
tym kursie...
------------------------------------------------------------------------------------------------
LEKCJA 21
Ostatnio poznaliśmy funkcje czasowe - dziś czas na funkcje matematyczne. Do dzieła
1. Abs (liczba) - zwraca wartość bezwzględną z liczby np:
Abs(4) = 4
Abs(-4) = 4
Abs(0) = 0
2.Atn (liczba) - zwraca wartość arcusCotangens liczby wyrażoną w radianach np.
4 * Atn(1) = pi
3.Cos (liczba) - zwraca cosinus z liczby
4.Exp(liczba) - e ^ liczba ; e - podstawa logarytmu naturalnego
5.Log (liczba) - zwraca wartość logarytmu naturalnego z liczby
6.Sng(liczba) - Dla liczby dodatniej zwraca 1, dla ujemnej -1, a dla 0 - 0 np.
Sng(23) = 1
Sng(-29) = -1
Sng(0) = 0
7.Sin(liczba) - zwraca sinus z liczby
8.Sqr(liczba) - zwraca pierwiastek kwadratowy z liczby np.
Sqr(9) = 3
Jeśli chcesz wyliczać pierwiastki n-tego stopnia z liczby x to musisz zastosować wzór:
x ^ (1/n)
9.Tan(liczba) - zwraca tangens liczby
10. INT((6 * RND) + 1) - całkowita liczba losowa z przedziału od 1 do 6. No może nie całkiem
losowa - sam zobacz. Uruchom VB, na formie ułóż przycisk i dodaj do niego następujący kod:
Dim x
x = INT((6 * RND) + 1)
odp = MsgBox(x)
Wystartuj program. Po naciśnięciu przycisku pojawi się pierwsza liczba - zapamiętaj ją. Teraz OK i
jeszcze raz kliknij na przycisk - tym razem inna (chyba) liczba, także ją zapamiętaj. Zrób tak
jeszcze kilka razy (zapamiętaj tylko te dwie pierwsze). No i co ? Są liczby losowe.
Teraz wyłącz program i włącz go jeszcze raz. Kliknij na przycisk - pierwsza liczba jest taka sama
jak poprzednio. Druga też... Jakbyś sprawdzał dalej to wszystkie by się powtórzyły w tej samej
kolejności. Nie będę tłumaczył dlaczego bo tylko bym Wam pomącił w głowie. Aby VB za każdym
razem losował inne liczby należy przed funkcją RND dopisać Randomize, będzie to wyglądało tak:
Dim x
Randomize
x = INT((6 * RND) + 1)
odp = MsgBox(x)
A jak np. zrobić Cotangensa z liczby ? Oto krótka ściągawka :
Secant Sec(X) = 1 / Cos(X)
Cosecant Cosec(X) = 1 / Sin(X)
Cotangent Cotan(X) = 1 / Tan(X)
Inverse Sine Arcsin(X) = Atn(X / Sqr(-X * X + 1))
Inverse Cosine Arccos(X) = Atn(-X / Sqr(-X * X + 1)) + 2 * Atn(1)
Inverse Secant Arcsec(X) = Atn(X / Sqr(X * X – 1)) + Sgn((X) – 1) * (2 * Atn(1))
Inverse Cosecant Arccosec(X) = Atn(X / Sqr(X * X - 1)) + (Sgn(X) – 1) * (2 * Atn(1))
Inverse Cotangent Arccotan(X) = Atn(X) + 2 * Atn(1)
Hyperbolic Sine HSin(X) = (Exp(X) – Exp(-X)) / 2
Hyperbolic Cosine HCos(X) = (Exp(X) + Exp(-X)) / 2
Hyperbolic Tangent HTan(X) = (Exp(X) – Exp(-X)) / (Exp(X) + Exp(-X))
Hyperbolic Secant HSec(X) = 2 / (Exp(X) + Exp(-X))
Hyperbolic Cosecant HCosec(X) = 2 / (Exp(X) – Exp(-X))
Hyperbolic Cotangent HCotan(X) = (Exp(X) + Exp(-X)) / (Exp(X) – Exp(-X))
Inverse Hyperbolic Sine HArcsin(X) = Log(X + Sqr(X * X + 1))
Inverse Hyperbolic Cosine HArccos(X) = Log(X + Sqr(X * X – 1))
Inverse Hyperbolic Tangent HArctan(X) = Log((1 + X) / (1 – X)) / 2
Inverse Hyperbolic Secant HArcsec(X) = Log((Sqr(-X * X + 1) + 1) / X)
Inverse Hyperbolic Cosecant HArccosec(X) = Log((Sgn(X) * Sqr(X * X + 1) + 1) / X)
Inverse Hyperbolic Cotangent HArccotan(X) = Log((X + 1) / (X – 1)) / 2
Logarithm to base N LogN(X) = Log(X) / Log(N)
Bardzo przepraszam, że ściągawka jest nie przetłumaczona na polski. Wyciągnąłem ją żywcem z
Helpa. Myślę, że zwykli użytkownicy nigdy ich nie użyją - jest to dla matematyków (oni już sobie
poradzą z tymi funkcjami). Pewnie spytacie po co to tu umieściłem. Skoro jest w helpie... Założę
się, że większość z Was ma pirackiego VB. Jeśli zakupiłeś 1 płytkę VB 6 to na pewno Helpa nie
posiadasz. No dobra - to tyle jeśli chodzi o funkcje matematyczne
LEKCJA 22
Dziś przed nami funkcje łańcuchowe. Co to są funkcje łańcuchowe? Są to funkcje które
"przerabiają" stringi. Sami zobaczcie:
1. Chr (liczba) - zwraca znak ASCII odpowiadający numerycznemu argumentowi. O co tu chodzi i
po co to stosować. Napiszmy mały programik:
Uruchom VB - na formie ułóż przycisk. Teraz musimy dodać taki kod, aby wyświetlił się
komunikat:
I powiedziała "Jestem tu" i poszła dalej
Psi. Banał - napiszę tak:
x = msgbox (" I powiedziała "Jestem tu" i poszła dalej" )
Ojej ! Wyskoczył jakiś błąd - co jest. VB się pogubił! Dlaczego. VB chce wyświetlić komunikat :
I powiedziała , ale po drugim cudzysłowie nie ma przecinka i zamiast vbPrzycisk czy vbikonka jest
jakaś bzdura ! Chmm co by na to poradzić ? Tutaj z pomocą przychodzi nam funkcja Chr - nasz
program będzie wyglądał tak:
x = msgbox ( "I powiedziała " & chr(34) & " Jestem tu " & chr(34) & " i poszła dalej ")
Trochę bardziej skomplikowane - ale tak musi być
2. LCase (string) - zmienia wszystkie znaki w stringu na małe np:
x = "Stonoga Ma 100 nóg"
y = LCase (x)
Da w wyniku "stonoga ma 100 nóg"
2. UCase - zmienia wszystkie znaki w stringu na duże np.
x = "Stonoga Ma 100 nóg"
y = UCase (x)
Da w wyniku "STONOGA MA 100 NÓG"
3.Left (string, n) - zwraca n pierwszych znaków łańcucha (stringa) np.
x = "Stonoga Ma 100 nóg"
y = Left (x, 10)
Zwróci to - Stonoga Ma
4. Right (string, n) - zwraca n ostatnich znaków łańcucha np.
x = "Stonoga Ma 100 nóg"
y = Right (x, 7)
Zwróci - 100 nóg
5. Mid (string, n,m) - zróci będączy częścią argumentu łańcuch począwszy od znaku numer n do
znaku nr. m (licząc od n !) np.
x = "Stonoga Ma 100 nóg"
y = Mid (x, 9,6)
Zwróci - 100 nóg
S
t
o
n
o
g
a
M
a
1
0
0
n
ó
g
1
2
3
4
5
6
7
8
9
1
2
3
4
5
6
Zauważ, że litera M jest zarazem znakiem 9 jak i pierwszym !!!
6. Len(string) - zwraca długość stringu np.
x= "Stonoga"
y = Len(x)
W tym przypadku y = 7
7. (L),(R)Trim - usuwa spacje wiodące - L z lewej, R z prawej, samo Trim i z lewej i z prawej np
x = Ltrim (" to jest lekcja VB ")
zwróci "to jest lekcja VB "
x = Rtrim (" to jest lekcja VB ")
zwróci " to jest lekcja VB"
x = trim (" to jest lekcja VB ")
zwróci "to jest lekcja VB"
8. ASC (znakASCII) - odwrotność funkcji Chr - czyli ze znaku robi liczbę np
y = Asc("A")
zwróci liczbę 65
LEKCJA 23
Funkcji ciąg dalszy. Dziś funkcje testujące dane i funkcje konwersji danych. Zaczynamy od tych
pierwszych.
Po co się je stosuje ? Jak sama nazwa mówi coś testują, ale co ? Nadają się doskonale do obsługi
błędów w naszym programie. Zademonstruję działanie jednej z nich. Napiszmy program który
będzie podnosił do potęgi pewną liczbę którą wpiszemy w okienko tekstowe. Tak więc
uruchamiamy VB - dodajemy textbox-a nazwijmy go txtLiczba. Teraz jeszcze przycisk - jako
etykietę nadaj mu "Podnieś do kwadratu". OK. Zasada jest prosta - po kliknięciu na przycisk
podnosi do kwadratu liczbę wpisaną w okienko, a wynik podaje w MsgBox-ie. Proste nie ?
Dim x
x = Val(txtLiczba) ^ 2
odp = MsgBox(txtliczba & " do kwadratu to " & x)
Uruchamiamy program - w okienko tekstowe wpisujemy jakąś liczbę i działa. No dobra, ale co się
stanie gdy w okienko tekstowe wpiszemy jakieś słowo np. Visual Basic. Wyskoczy nam
komunikat, że Visual Basic do kwadratu to 0. Co za bzdura !!!. Puki wpisujemy liczby to wszystko
jest w porządku, a gdy jakiś string to cały program się pieprzy.
Można by zastosować coś takiego, że gdy w pole tekstowe wpiszemy jakiś string to program
wyświetli komunikat, że błąd. No ale jak VB ma rozpoznać czy to string czy liczba ? Po to właśnie
są funkcje testujące dane. Nasz program teraz powinien wyglądać tak:
Dim x
If IsNumeric(txtliczba) Then
x = Val(txtliczba) ^ 2
odp = MsgBox(txtliczba & " do kwadratu to " & x)
Else
odp = MsgBox("Błąd", vbCritical, "Błąd")
End If
Po przetłumaczeniu będzie to wyglądało tak:
Zapamiętuj x
Jeśli to co w polu tekstowym to liczba to...
Obliczenie + Komunikat z odpowiedzią
W przeciwnym przypadku
Błąd
OK. Oto najważniejsze funkcje testujące dane:
1. IsDate (string) - zwraca true jeśli data
2. IsNumeric (string) - zwraca true jeśli liczba
3. IsEmpty (zmienna) - zwraca True jeśli zmienna nie istnieje
Mały przykładik do IsEmpty
Dim zmienna
If IsEmpty (zmienna) Then
MsgBox ("Błąd")
End If
W tym przypadku wyskoczy komunikat Błąd ponieważ nigdzie nie mamy podstawienia czegoś pod
zmienną.
No dobra - to tyle o funkcjach testujących dane - więcej w helpie (ci co mają pirata to niestety, ale
jeśli Ci te funkcje będą potrzebne to napisz do mnie, a ci je podeślę ...)
--------------------------- FUNKCJE KONWERSJI DANYCH -----------------------------
A te po co się stosuje ? Znów malutki przykładzik: (chyba to już kiedyś było...)
x = 1/7 'daje to w wyniku 0,1428571
x = CDbl (1/7) 'daje w wyniku 0,142857142857143
VB domyślnie stosuje tryb Single - pierwszy przypadek. Po konwersji na Double otrzymujemy
dokładniejszy wynik...
Oto inne:
Cint (x) - Zaokrągla w górę argument z częścią ułamkową do liczby całkowitej np.
Cint (12,7) = 13
Int(x) - Zaokrągla w dół argument z częścią ułamkową do liczby całkowitej np.
Cint (12,7) = 12
CStr (x) - Konwertuje argument na stringa
CVar (x) - Konwertuje argument na Variant
Fix (liczba) - Obcina część ułamkową
Hex(liczba) - Konwertuje numeryczny argument na heksadecymalny
Oct (liczba) - Konwertuje numeryczny argument na oktalny
Teraz pewnie powiesz, że Fix i Int to te same funkcje. Bo przecież:
Fix (12,5) = 12 i Int(12,5) = 12
Połowicznie masz rację. Fix = Int tylko wtedy gdy liczba jest dodatnia lub 0. Ale zobacz:
Fix (- 12,5) = -12 ' Bo obcina to co jest po przecinku
Int (-12,5) = -13 'Bo -12 było by większe niż -12,5, a ma być mniejsze - więc -13
Oczywiście funkcji jest więcej, ale te są najważniejsze...
LEKCJA 24
Dzisiaj powiemy sobie jak uruchamiać inne programy z VB, oraz jak sterować listami napędów,
plików i katalogów. OKi. Zaczynamy...
Jeśli chcemy np. uruchomić Painta z poziomu programu napisanego przez nas musimy użyć funkcji
shell. Pokażę to na przykładzie.
Uruchom VB, ułóż przycisk i dodaj do niego kod:
x = shell("C:\Program Files\Accessories\Mspaint.exe,1)
Uruchom program i wciśnij przycisk - naszym oczom ukazuje się paint. No dobra, ale co oznacza ta
jedynka w poleceniu ?
Oto składnia funkcji Shell:
x = Shell(Ścieżka dostępu, styl okna)
Ścieżka dostępu to wiadomo co , a styl okna ?
0
Okno uruchamianego programu zostaje ukryte (trochę bez sensu)
1
Normalne okno
2
Okno zminimalizowane
3
Okno zmaksymalizowane
4
Normalne okno niezaznaczone
6
Zminimalizowane okno nie zaznaczone
To nie błąd - w tabelce nie ma wartości 5.
-------------STEROWANIE LISTAMI NAPĘDÓW, KATALOGÓW, PLIKÓW-------------
Co to są te listy ? Otwór eksplorator windows - Start - Programy - Eksplorator Windows
Po lewej stronie widzisz drzewo katalogów - właśnie to jest lista katalogów, Lista plików jest po
prawej stronie, a lista dysków wyżej. Właściwie to co oferuje Eksplorator jest trochę doskonalsze
od list w VB - ale chciałem wam tylko zobrazować jak to wygląda.
Jak to ma działać ? Po pierwsze mamy listę dysków i katalogów. Ma to zostać tak połączone, że
gdy w liście dysków wybierzemy dysk np CD-ROM to w liście katalogów mają zostać wyświetlone
katalogi z tejże płyty. Jeszcze do tego dochodzi lista plików. Jeśli wybierzemy jakiś katalog - mają
się pojawić pliki w nim zawarte. Bierzmy się do roboty:
Uruchamiamy VB i kolejno na formie układamy - Listę dysków (DriveListBox - ikonka znajduje
się obok ikonki zegarka - To ten szary prostokącik z kreską i kropką. Następne listę katalogów,
(ikonka - żółty katalog), oraz listę plików, to zaraz obok ikonki katalogu.
OKi. Mamy wszystko - uruchamiamy program, no ale to jeszcze nie działa. Co prawda możemy
sobie coś tam wybierać, ale nie pociąga to za sobą zmiany drugiego elementu. Musimy dodać kod.
W liście napędów (domyślnie wpisane jest tam C oraz nazwa dysku) dodaj kod:
Dir1 = Drive1
A w liście katalogów (chyba wiesz jak wyglądają katalogi):
File1 = Dir1
Uruchom program. Teraz powinno wszystko działać. No dobra, ale co to zwraca ?
Zwraca to ścieżkę do pliku. Jak ? Ułóż na formie jeszcze Etykietę (Label) i nazwij ją lblWynik.
Teraz do listy katalogów dopisz jeszcze (pod File1 = Dir1):
lblWynik = Dir1.Path
Spowoduje to wyświetlanie się aktualnej ścieżki do pliku. Ale można jeszcze wyciągnąć nazwę
wybranego pliku. W liście plików dopisz:
lblWynik = Dir1.Path & "\" & File1.FileName
Teraz wszystko działa jak trzeba - no może nie wszystko...
Jeśli zaznaczysz dysk nie wybierając żadnego katalogu i zaznaczysz jakiś plik np. Autoexec.bat to
wyświetli się ścieżka :
c:\\autoexec.bat
To jest oczywiście błąd - na zadanie macie to poprawić
------------------------------------------------------------------------------------------------
Pamiętaj ! Jeśli masz jakiekolwiek problemy ze zrozumieniem kursu, albo masz jakieś pytania pisz
do mnie na adres slash@ptik.prv.pl . Twój list na pewno nie zostanie bez odpowiedzi. Jeśli nawet
nie masz do mnie żadnych pytań ani uwag to i tak napisz.. Po co? Chcę wiedzieć czy w ogóle ktoś
ten kurs czyta. Wiecie, skoro nikt tego nie czyta to po co pisać ;( Napisz najlepiej co uważasz o
tym kursie...
------------------------------------------------------------------------------------------------
LEKCJA 25
Dzisiaj przed nami już 25 lekcja. Ach. Jak ten czas szybko leci. Do końca kursu na poziomie
podstawowym zostało jeszcze 5 lekcji !!! Tak, to już koniec podstaw. I co dalej ? Zobaczymy -
jeszcze zostało 5 lekcji - a więc do dzieła:
Dzisiaj przed Wami bardzo ważna (jak nie najważniejsza) lekcja. Jak dotąd pisaliśmy programy,
które nie ingerowały w "życie" innych. No może funkcja Shell była wyjątkiem. Dziś zajmiemy się
tworzeniem plików i zapisywaniem do nich informacji. OKi. Zaczynamy...
Pierwszą funkcją którą musisz poznać jest Open. Przed edycją jakiegokolwiek pliku musimy go
najpierw otworzyć. Jak ?
Open "C:\katalog\plik.roz" for Mode as # number
Co to jest ten Mode ? W mode wpisujemy to co będziemy chcieli zrobić z plikiem :
Input
Jedynie odczyt danych (najbezpieczniejsza funkcja bo nic nie zepsujemy)
Output
Dopisywanie do pliku informacji
Append
Nadpisywanie informacji
Number to zaś liczba porządkowa otwartego pliku. Nie możemy otworzyć dwóch plików z tym
samym numerem porządkowym !!! Czyli:
Open "C:\moje dokumenty\index.dat" for input as #1
Open "C:\info.txt" for input as #1
Coś takiego jest niemożliwe ! Możliwe jest za to:
Open "C:\moje dokumenty\index.dat" for input as #1
Open "C:\info.txt" for input as #2
Teraz funkcja Close. Ona zamyka pliki. Czyli jeśli użyjemy funkcji Open to także musimy użyć
funkcji close.
Jeśli chcemy zamknąć plik z numerem porządkowym 3 to piszemy:
Close 3
Jeśli chcemy zaś zamknąć wszystkie aktualne pliki to po prostu wpisujemy close.
Czy więc teraz jest możliwa taka sytuacja ?
Open "C:\moje dokumenty\index.dat" for input as #1
Close 1
Open "C:\info.txt" for input as #1
TAK ! Otwieramy plik z #1 - zamykamy go (teraz #1 się zwalnia), no i znowu możemy otworzyć
plik z #1
No dobra, ale po co tak otwierać i zamykać pliki ? Po to aby można było z nich skorzystać !!!
--------------------------------------------- WRITE ------------------------------------------
Instrukcja ta zapisuje do pliku pewne informacje. Jak ? Napiszemy teraz program zapisujący do
pliku imiona pewnych dzieci. Otwieramy więc VB - tworzymy przycisk i dodajemy kod:
Dim x
Dim dzieci(6) 'Pamiętasz tablice ?
dzieci(1) = "Kasia"
dzieci(2) = "Michał"
dzieci(3) = "Piotruś" 'Nie musimy wykorzystywać wszystkich 6 imion
Open "C:\dzieci.txt" for Output as #1 'Output bo będziemy zapisywać do pliku
For x = 1 to 3 'Bo mamy troje dzieci
Write #1, dzieci(x)
Next x
Close 1
No, no, no. Co to jest ! Tłumaczę wszystko:
Dim-y - to chyba wiadomo, pierwszy (x) to zmienna dla For-a, a drugi to tablica
Następnie przypisanie dzieci do tablicy
Open - tutaj zostaje otwarty plik do zapisu z liczbą porządkową #1
For - Od x = 1 do 3
Zapisz do #1 zmienną dziecko(x); teraz x = 1 (patrz FOR) a więc Kasia
Next - powrót do for ale x = 2
For ...
Zapisz do #2 zmienną dziecko(x); teraz x = 2 a więc Michał...
Tak jeszcze przez Piotrusia i
Zamknij plik #1
Chmmm. I co to z tego powstało ? Uruchom program i naciśnij przycisk. Nic się nie dzieje... No
tak, ale to ma stworzyć tylko plik... Popatrzmy. Uruchom Ekspolator Windows. Start - Programy -
Ekspolator Windows. Po prawej stronie powinieneś zobaczyć plik dzieci.txt. Otwórz go klikając na
niego. Jest !!! Zapisał tam 3 imiona - ale dlaczego w cudzysłowach ? Jak może pamiętasz w VB
stringi podaje się w cudzysłowach, liczby bez. No fajnie.
A co by się stało gdybyśmy zapomnieli użyć funkcji Close ?
Plik nie zostałby zapisany - a więc zostałby utworzony (funkcja Open as Output), ale nie zapisany -
byłby więc pusty... NIE USUWAJ GO NA RAZIE !!! - plik będzie nam potrzebny w następnej
lekcji !!!
Druga sprawa - będzie wam potrzebna jak będziecie pisać poważniejsze programy. Sam nad nią
myślałem kilka dni - Wam podaję gotowca.
Póki wiemy ile jest informacji do zapisu sprawa jest prosta (For x = 1 to ilość). A jeśli ilości nie
znamy ? Albo będzie się ona stale zmieniała ? Tu jest problem ! Musimy zastosować coś takiego:
Dim x, wynik as single
Dim tablica(100)
... - tutaj np. zapisy do tablicy
Open "C:\plik.roz" for Mode as # number
For x = 1 to 100000 'wpisujemy jakąś liczbę większą od rozmiaru tablicy
wynik = VarType(tablica(x))
If wynik = 0 then Exit For
Write # number, tablica(x)
Next x
Close 1
Jak to działa. Pętla For - Next przerwie się jeśli wynik = 0 (IF wynik = 0 ...). A kiedy będzie 0 ? Nie
znasz jeszcze funkcji VarType. Musisz wiedzieć jedynie, że zwraca ona pewne liczby. Jeśli zwróci
0 to błąd. Czyli - jeśli błąd do koniec zapisu...
OKi. Zapomniałem napisać o jeszcze jednym. Funkcją write możesz zapisać kilka informacji w
jednej linijce np.
Write #1, string, jakasliczba, jakasdata
Spowoduje to np. zapisanie do pliku takich informacji:
" To jest jakiś string", 123456789876, #12-11-99#
Dobra, skoro umiemy już zapisywać to przydałoby się odczytać jakoś te informacje. Ale o tym w
następnej lekcji.
LEKCJA 26
Dzisiaj czeka nas odczytywanie informacji z plików. Postaramy się odczytać trzy imiona z pliku
dzieci.txt. Jak ? Uruchommy VB i na formie ułóżmy przycisk - dodajmy do niego kod:
Dim x
Dim dzieci(10)
Open "C:\dzieci.txt" for input as #1
For x = 1 to 3
Input #1, dzieci(x)
odp = MsgBox(dzieci(x))
Next x
Close
Spowoduje to trzykrotne wyświetlenie się MsgBox-a z imieniem kolejnego dziecka. Jak może
zauważyłeś funkcja Input ma identyczną składnię jak Write. Sam przeanalizuj kod. To tnie o to
chodzi, że jestem leniwy i nie chcę Wam wytłumaczyć. Ja chcę Was nauczyć logicznego myślenia.
Jeśli jednak nie dajesz sobie rady ze zrozumieniem kodu to wróć do poprzedniej lekcji. Tam
znajduje się prawie taki sam i przetłumaczony.
Dobra - ale jeśli chcemy odczytać wszystkie rekordy z pliku, ale nie wiemy ile ich jest? Tym razem
jest trochę inaczej niż z funkcją Write . Tam musiałem napisać procedurę - tutaj użyjemy gotowej
funkcji EOF. Działa ona na zasadzie (tak też ją można przetłumaczyć) - czy jest jeszcze coś w pliku
? Czyli nasz program ma wyglądać tak:
Czy jest jeszcze coś w pliku ? Jeśli tak to...
Odczytaj i powrót
Jeśli nie to koniec
Składnia funkcji EOF
EOF(numer pliku)
Widać, że będziemy tu musieli zastosować pętlę DO-LOOP. Kod ma wyglądać tak:
Dim tablica(100)
Open "c:\dzieci.txt" for input as #1
Do Until EOF(1) = True
Input #1, tablica(x)
Loop
Close
Zobaczmy jak zachowa się nasz program.
Zapisz tablicę 100 - elementową
Otwórz plik dzieci.txt do odczytu danych
Dopóki EOF nie równe True czyli równe False !!! (czyli dopóki nie koniec pliku)
Odczytuj i zapisuj do tablicy
Kontynuuj
Zamknij plik
OKi. Myślę, że sobie poradzisz. Jeszcze jedna ważna sprawa. Co zrobić gdy chcesz odczytać
jedynie drugą i trzecią linijkę pliku dzieci.txt ? Musisz zastosować coś takiego:
Dim dziecko2, dziecko3 as string
Open "c:\dzieci.txt" for input as #1
Input #1, dziecko2
Input #1, dziecko2
Input #1,dziecko3
Close
Działa to tak:
Zapamiętuj dziecko2,dziecko3
Otwórz plik do odczytu danych
Zapisz do zmiennej dziecko2 pierwszą linijkę pliku #1. Nam chodzi o drugą.
No to jeszcze raz zapisz do zmiennej dziecko2 drugą linijkę pliku #1
I do zmiennej dziecko3 trzecią linijkę pliku.
LEKCJA 27
Doszliśmy już do kolejnej, już 27 lekcji podstaw VB. Dzisiaj jeszcze uzupełnienie do ostatnich
dwóch lecji.
Umiemy już otwierać pliki, edytować je, czytać z nich dane. Dziś nauczymy się usuwać pliki,
katalogi itp.
Zaczynamy od usuwania plików. Służy do tego funkcja kill. Używamy jej w następujący sposób:
Kill "C:\dzieci.txt" ' Usunie ona plik stworzony 2 lekcje temu
Kill "C:\Bzdety\*.* 'Usunie wszystkie pliki z katalogu Bzdety
Kill "C:\bzdety\*.txt" ' Usunie wszystkie dokumenty tekstowe z katalogu bzdety
Kill "C:\bzdety\A*.* 'Usunie wszystkie pliki z katalogu bzdety zaczynające się na literę a
Dobra - teraz funkcja RmDir - usuwa ona katalogi (puste).
RmDir "C:\bzdety" 'Spowoduje usunięcie katalogu bzdety jeśli nie ma w nim żadnych plików
A jeśli byśmy chcieli usunąć katalog z plikami ? Zastosujmy połączenie obu wcześniej poznanych
komend:
Kill "C:\bzdety\*.*"
RmDir "C:\bzdety"
Niestety, jeśli w katalogu bzdety będą jakieś podkatalogi (podfoldery), to wyskoczy błąd. Pozbycie
się tego uniedogodnienia jest bardzo trudne. Sam nie wiedziałem jak się za taką funkcję zabrać.
Dopiero na grupie dyskusyjnej poznałem takiego jednego co mi to wyjaśnił. Funkcję opiszę dopiero
w kursie na poziomie zaawansowanym.
OKi. Skoro umiemy usuwać pliki i katalogi, umiemy tworzyć pliki (Funkcją Open-Close) to
przydałoby się nauczyć tworzenia katalogów. Służy do tego funkcja MkDir np:
MkDir "C:\Moje dokumenty\pierdoły" 'Spowoduje utworzenie katalogu pierdoły w Moich
dokumentach
OKi. Czegoś jeszcze brakuje? Tak zmieniania nazw plików, katalogów i przenoszenia ich w inne
miejsce na dysku.
Nie uwierzysz, ale te trzy metody obsługuje jedna funkcja - Name.
Aby zmienić nazwę pliku:
File "C:\Moje dokumenty\Do mamy.doc" as "C:\Moje dokumenty\Wysłany do mamy.doc"
Aby zmienić nazwę katalogu:
File "C:\Bzdety" as "C:\Pierdoły"
Aby przenieść plik w inne miejsce (od razu zmieniając jego nazwę)
File "C:\dzieci.txt" as "C:\Moje dokumenty\bachory.txt"
------------------------------------------------------------------------------------------------
Pamiętaj ! Jeśli masz jakiekolwiek problemy ze zrozumieniem kursu, albo masz jakieś pytania pisz
do mnie na adres slash@ptik.prv.pl . Twój list na pewno nie zostanie bez odpowiedzi. Jeśli nawet
nie masz do mnie żadnych pytań ani uwag to i tak napisz.. Po co? Chcę wiedzieć czy w ogóle ktoś
ten kurs czyta. Wiecie, skoro nikt tego nie czyta to po co pisać ;( Napisz najlepiej co uważasz o
tym kursie...
------------------------------------------------------------------------------------------------
LEKCJA 28
To już lekcja 28. Dzisiaj nauczymy się posługiwać polem grafiki. Podobne jest do Etykiety, z taką
różnicą, że zamiast tekstu umieszcza się tam grafikę. Takie pole graficzne znajduje się na palecie
narzędzi prawie na samym dole. To taki obrazeczek z górami i słoneczkiem w ramce. U samej góry
znajduje się jakiś obraz z kaktusem. Ale nie o to nam chodzi. To co jest na górze to PictureBox -
my zajmiemy się obiektem Image (ten na dole). Wybieramy go więc i układamy gdzieś na formie.
Co to ? Jakiś prostokąt z przerywanych linii. To jest właśnie to ! Teraz w to pole możemy
załadować grafikę ! Teraz uwaga. Jeśli załadujemy plik graficzny większy od pola graficznego to
rysunek zostanie obcięty. Czyli np. na formie ułożyliśmy Image-a o rozdzielczości 400x200. My
zaś chcemy załadować zdjęcie kota o rozdzielczości 800x200. I co nam z tego powstanie ?
Będziemy widzieć albo pierwszą połowę kota, albo drugą. My chcemy zrobić coś takiego jak w
programach graficznych. Chwytamy za krawędź i zmieniamy rozmiar dowolnie. W VB uzyskamy
to poprzez zmienienie opcji Image-a - Stretch na True. Popatrz powyżej tej opcji. Mamy tam
funkcję Picture. Tu możemy ustalić jaki rysunek ma zostać załadowany.
A co jeśli chcemy załadować rysunek kodem. Np. po uruchomieniu programu podajemy mu ścieżkę
do pliku a on to ma otworzyć ?
Pewnie myślisz, że jest to zwykłe przypisanie opcji obiektowi jak np.
Image1.picture = "C:\Moje dokumenty\kot.jpg"
COŚ TAKIEGO JEST NIEPOPRAWNE !!!
Do załadowania obrazka musimy użyć polecenia LoadPicture. Nasz kod więc powinien wyglądać
tak:
Image1.picture = LoadPicture "C:\Moje dokumenty\kot.jpg"
-------------------------------------- SHELL jeszcze raz --------------------------------------
Pamiętasz jeszcze jak uruchamialiśmy programy z poziomu VB ? No dobra, dziś jeszcze nauczysz
się otwierać inne pliki. Np. chcemy otworzyć dokument Worda z poziomu VB. Pewnie napisałbyś
tak:
x = Shell("C:\Moje dokumenty\list.doc",1)
Takiej funkcji używamy tylko do odpalanie Exe-ców. My musimy otworzyć Worda. Sprawa jest
nadzwyczaj prosta, w pewnym miejscu dopisujemy tylko start:
x = Shell("Start C:\Moje dokumenty\list.doc",1)
OKi. Dzisiejsza lekcja była nadzwyczaj krótka. Za to następna będzie trochę trudniejsza.
LEKCJA 29
Witajcie znów ! Jak obiecałem dzisiaj trochę dłuższa i trudniejsza lekcja. Będziemy tworzyć menu.
Jeśli używasz teraz przeglądarki to spójrz prawie na samą górę ekranu - widzisz tam Plik, Edycja,
Widok itd. Kliknij np. na Plik - rozwija się kolejne menu - będziemy to już nazywać podmenu. Ale
to podmenu można jeszcze bardziej rozwinąć. Tak np. jest W Internet Explorer pod Plik - Nowy.
Rozwija się kolejne. Te zagadnienia są trochę trudniejsze więc po raz pierwszy do kursu wstawię
grafikę!!!
OKi. Na razie stworzymy coś takiego:
Menu jak na razie nie będą rozwijane. Nie posłużymy się tu żadną kontrolką z menu narzędzia. To
co nas interesuje znajduje się pod menu Tools- Menu Edytor. Lub szybko dostaniemy się do tego
przytrzymując przycisk Control a potem literkę E. Wyskoczy nam takie okienko:
Chmmm. Co my tu mamy. Pierwszą rzeczą jest Caption. Chyba wiesz co to jest ... To jest to co
będziemy widzieć na pasku - wpisz więc Plik. Duga rzecz to name - tutaj nazywamy to mnuPlik.
Inne rzeczy nas na razie nie będą interesować. Klikamy Next. Teraz znów w Caption wpisujemy
Edycja i nazwa mnuEdycja. Next. Caption Widok, nazwa mnuCaption. Teraz nasz program
powinien wyglądać tak ja na pierwszym rysunku. No dobra, ale my chcemy aby to menu było
rozwijalne. No więc jeszcze raz wchodzimy do menu edytora. Są tam nasze trzy pozycje. Klikamy
poniżej ostatniej na wolnym miejscu. W pole Caption wpisujemy Start, a jako nazwę nadajemy mu
mnuPlikStart. No dobra, jak na razie stworzyliśmy 4 menu rozwijalne. Ale my przecież chcemy aby
to było podmenu. Aby ustawić to tam gdzie trzeba będziemy musieli się posłużyć strzałeczkami - te
zaraz obok Next-a. Skoro Start ma być pod Plik, to musimy 2x kliknąć strzałkę w górę. No ale
nadal mamy 4 menu rozwijalne. No to jeszcze strzałka w prawo i wyglądać to powinno tak:
Ja jeszcze zrobiłem koniec. Myślę, że sobie z tym już poradzisz. Jeszcze raz na wolne miejsce
Caption na Koniec, nazwa mnuPlikKoniec. I jeszcze ustawić tak jak na rysunku. A jeśli teraz
byśmy chcieli z Plik - Start zrobić kolejne menu rozwijalne ? Tzn. Klikamy Plik - Start i wyskakuje
kolejne menu z kolejnymi dwoma opcjami - Przód i tył ? Znów klikamy na wolne miejsce w Menu
Edytorze. Tworzymy kolejną pozycję - Przód o nazwie mnuPlikStartPrzod. Ma ona być rozwijana
Startem, a więc przesuwamy ją strzałkami do góry pod Start. No ale teraz znów mamy 4 główne
menu rozwijalne. No to strzałka w prawo. No, ale tera jak klikniemy na menu plik to pokaże 3
pozycje - Start, Przód,Koniec. My chcemy, aby Przód ukazało się dopiero po kliknięciu na Start. No
to jeszcze raz strzałka w prawo. To samo robimy z Tył. Powinno to teraz wyglądać tak:
Dobra. Teraz klikamy OK - nasz program powinien wyglądać tak:
Dobra. A teraz jak zrobić, aby po kliknięciu na Koniec program się wyłączył ? Bardzo prosto ! Po
prostu kliknij na Koniec i dodaj odpowiedni kod tzn. Unload Me
Musisz sobie jeszcze poćwiczyć tą lekcję, gdyż jest ona troszeczkę skomplikowana, a na następnej
lekcji jeszcze trudniejsze zagadnienie - będziemy projektować pasek narzędzi
------------------------------------------------------------------------------------------------
Pamiętaj ! Jeśli masz jakiekolwiek problemy ze zrozumieniem kursu, albo masz jakieś pytania pisz
do mnie na adres slash@ptik.prv.pl . Twój list na pewno nie zostanie bez odpowiedzi. Jeśli nawet
nie masz do mnie żadnych pytań ani uwag to i tak napisz.. Po co? Chcę wiedzieć czy w ogóle ktoś
ten kurs czyta. Wiecie, skoro nikt tego nie czyta to po co pisać ;( Napisz najlepiej co uważasz o
tym kursie...
------------------------------------------------------------------------------------------------
LEKCJA 30
Dziś już ostatnia lekcja VB ;( - ale na poziomie podstawowym. Będą kolejne :)))))
Dziś zajmiemy się chyba najtrudniejszym zagadnieniem jak do tej pory - tworzeniem paska
narzędzi. Jeśli oglądasz tą stronę w przeglądarce internetowej to na pewno widzisz takie pasek
zaraz pod (niekiedy obok) menu. Tak to te strzałki, krzyżyki itp. To jest właśnie pasek narzędzi. W
tej lekcji także wstawiam grafikę ;) (Mogłem o tym wcześniej pomyśleć - zajebisty pomysł nie...)
Dobra - aby zrobić pasek narzędzi musimy posłużyć się dwoma elementami z paska narzędzi.
Uwaga standardowo są one nie dostępne - musimy (jak kiedyś) dodać element Microsoft Windows
Common Controls 6.0. Pamiętasz jak - jeśli nie to powrót do lekcji 17 !. Najpierw potrzebny nam
będzie ImageList. Jak wygląda to zobacz na ściągawce z paska. Układamy go na formie - tak to
takie 3 kwadraciki z jakąś klepsydrą czy czymś takim. Klikamy na niego prawtm klawiszem myszy
i z powstałego menu wybieramy Properties. Wyskoczyło nam okienko Opcji. Wybieramy teraz
zakładkę Images i wybieramy kolejno ikonki (lub inne małe obrazki) które będziemy później
chcieli wstawiać do naszego paska narzędzi. A więc klikamy Insert Picture i wybieramy katalog z
Visual Basiciem. Standardowo jest to C:\Program Files\Microsoft Visual Studio. My będziemy
dodawać ikonki standardowo zainstalowane przez VB. A więc wchodzimy kolejno w
Common\Graphics\Icons. Teraz wybierzmy dziedzinę Computer. Wyświetliło się mnóstwo ikonek -
dodajm ze 4 - może kolejno - CDROM01.ico. Pojawiła się ona w okienku. Teraz znów Insert
Picture i dodajemy dalej - DISK04.ico, KEYBRD02.ico, Mouse01.ico - no może starczy. Nasze
okienko Properties powinno wyglądać tak:
Teraz klikamy OK. No i bierzemy się do tworzenia paska narzędzi. Wybieramy więc ToolBar -
także zobacz ściągawka. Układamy go gdzieś na formie. Sam ułoży się u samej góry formy -
zostawmy go więc tam. Teraz klikamy prawym klawiszem myszy na ToolBar-ze i wybieramy
Properties. Ojej - ile tu tego jest !
Nas zainteresuje trzecia pozycja - mianowicie ImageList. Musimy wybrać ImageList1 - bo tam są
nasze rysunki... Teraz przechodzimy do zakładki Buttons i widzimy:
I chyba już wiesz co kliknąć ! Oczywiście insert Button. Teraz podświetlą nam się "zszarzałe" pola.
W sekcji Imege wybieramy numer ikonki (teraz z 0 robimy 1). W sekcji Key wpisz nazwę
przycisku - KeyCDROM. Teraz znów Insert Button - tym razem w sekcji Imege wpisujemy 2 i
wpisujemy inną nazwę przycisku. Czynność należy wykonać jeszcze 2 razy - w sumie pole index
ma osiągnąć wartość 4. No i na koniec OK. Po wystartowaniu nasz program powinien wyglądać
tak:
Dobra - stworzyliśmy pasek narzędzi ale jak to wykorzystać. Sprawa nie jest tak prosta jak ze
zwykłymi przyciskami. Przedtem wystarczyło kliknąć dwukrotnie na przycisku i dopisać kod, a tu
nie mamy do czynienia z przyciskami tylko ToolBarem. Nie bój się. Tym razem sprawa jest dość
prosta. Kliknij dwukrotnie na pasku narzędzi naszego programu. Wyskoczy miejsce na dopisanie
kodu. Ale do jakiego przycisku?
Do wszystkich ! Program je będzie rozróżniał po nazwach.
Dim Msg as Integer
Select Case Button.Key
Case is = "KeyCDROM":
Msg = MsgBox ("Nacisnąłeś CD-ROM")
Case is = "KeyDyskietka":
.... itd
End Select
Uff. Dobrnęliśmy do końca kursu VB dla początkujących. Mam nadzieję, że będziesz mieć pożytek
z tej nauki. Jeśli dobrnąłeś tutaj to koniecznie napisz do mnie na adres slash@ptik.prv.pl . Chcę
wiedzieć ile osób skorzystało z mojego kursu VB. Napisz jak ci się podobał kurs, ile dni (lat ???) go
przerabiałeś. Teraz czeka Ciebie kurs dla wtajemniczonych w VB - nie będę już opisywał tak
dokładnie jak masz co robić krok po kroku. Jeśli uporałeś się z podstawami to na pewno masz już
pojęcie jak zabrać się za zaawansowane funkcje VB. Nie wiem jeszcze kiedy zacznę i ile tych lekcji
będzie. Na razie rozpoczynam przygodę z dużo bardziej profesjonalnym językiem programowania
jakim jest C++. Jeśli podobał się Wam kurs VB (po to właśnie chcę abyście pisali do mnie), to na
pewno w przyszłości napiszę kurs C++. Jeszcze raz dziękuję za naukę z mojego kursu VB i
zapraszam do kursu VB dla wtajemniczonych - w sieci już po wakacjach (albo nawet może w
wakacje :) )