Kurs Visual Basic dla początkujących, Języki programowania


KURS

VISUAL BASICA

BY

SLASH

Co powinieneś wiedzieć aby dobrze wystartować

Funkcja wyświetlania komunikatów (MsgBox)

CD. MsgBox, wprowadzenie do instrukcji IF i DIM

Wszystko o DIM - i trochę o MsgBox-ie

TextBox, Label i troszeczkę o konwersji danych

Funkcja konwertująca stringi na liczby

InputBox

Instrukcja IF

Operatory logiczne

Funkcja Case

Komentarze i pętla Do While

Pętla Do Until, pętle odwrócone

Pętla For

Zmiana właściwości komponentów

Opcje wyboru

Opcje wyboru cd, Funkcja Global

Dwie formy

Okna dialogowe i kompilacja

Wstęp do list wyboru i Combo Box-ów

Tablice danych i ScrollBar-y

Funkcje czasowe

Funkcje matematyczne

Funkcje łańcuchowe

Funkcje testujące dane i Funkcje konwersji danych

Uruchamianie innych programów, starowanie listami napędów, katalogów i plików

Funkcja Open, Close, Write

Funkcja Input i EOF

Funkcje Kill, RmDir, MkDir, File

Pole Obrazu

Menu

Pasek narzędzi

0x08 graphic
 

Ściągawka z paska narzędzi

0x01 graphic

Wstęp

Witajcie wszyscy! Oto przed Wami kurs Visual Basica. Wiem, że czytanie kursów jest monotonne i niekiedy nudne. Miałem właśnie takie wrażenie ucząc się VB z pewnej książki. Wprowadziła mnie zaledwie w podstawy. Dalsze funkcje musiałem poznawać sam. Niekiedy nad jedną funkcją spędziłem 10 godzin - ale zawsze dopiąłem swego. Kurs jest napisany z humorem, dzięki czemu naukę tego języka będziesz traktował jak zabawę. No więc zaczynamy ? Chwila, chwila... A może na początek coś o tym języku...

Język Basic został stworzony przez Johna G. Kemeny'ego i Thomasa E. Kurtza w 1963 roku w Darmouth College. Stał się on szybko popularny jako język nauczania w uniwersytetach i szkołach. W latach 70-tych, został przystosowany do użycia na komputerach osobistych przez założyciela i prezesa firmy Microsoft - Billa Gates'a.
Język Basic przeszedł wiele zmian, modyfikacji i udoskonaleń od pierwszych wersji do teraźniejszego wyglądu i sposobu programowania.
W czasach, kiedy typowymi domowymi komputerami były komputery 8-io bitowe, takie jak: Atari 800XL, Commodore C64 czy ZX Spectrum, język Basic był podstawowym językiem programowania. Był dość prosty - stał się więc powszechnie wykorzystywany przez programistów. Wersje stosowane w różnych komputerach nieco się różniły. Był to jednak typowy język strukturalny z dość ograniczoną liczbą rozkazów. Każdy rozkaz występował w osobnej linii programu, a każda linia zaczynała się od numeru linii. Był to język wystarczający do pisania prostych aplikacji jak i dość zaawansowanych programów i gier. Najprostszy program napisany w języku Basic wyglądał tak:

10 PRINT "WITAJ"
20 GOTO 10


Program ten rozkazem PRINT wyświetlał na ekranie tekst WITAJ, a rozkazem GOTO 10, powodował powrót do linii nr 10 i zapętlenie programu.
Wraz z rozwojem techniki komputery 8-io bitowe zostały stopniowo wyparte przez komputery 16-bitowe klasy IBM PC. W pierwszych modelach język Basic zawarty został w ROM BIOS-ie. Jeżeli system operacyjny nie został uruchomiony z dyskietki lub z dysku twardego to z ROM BIOS-u uruchamiany był interpreter języka Basic. Dość szybko jednak zrezygnowano z umieszczania Basic w ROM BIOS.
Wraz z rozwojem systemów operacyjnych, język Basic powrócił jako Microsoft QuickBasic i Qbasic, który stał się częścią systemu operacyjnego MS-DOS. Był to nadal typowy język strukturalny z tekstowym środowiskiem programistycznym. Nie zyskał on jednak wielkiej popularności i szybko został wyparty przez bardziej rozbudowane języki, takie jak Pascal i C.

Przełomem stało się wprowadzenie języka Visual Basic. Język ten wykorzystywał środowisko Microsoft Windows. Był to język wizualny, gdzie część programowania polegała na graficznym ułożeniu elementów aplikacji. Zamiast pisać bardzo rozbudowane aplikacje, w których znaczna część kodu wykorzystywana była do utworzenia interface (wyglądu) aplikacji, język Visual Basic udostępniał środowisko graficzne, w którym wygląd aplikacji tworzyło się podobnie jak obrazy w programach graficznych. Należało wybrać odpowiedni element wyglądu i narysować go, wybierając jego położenie i rozmiar. Skróciło to znacznie czas tworzenia aplikacji, ponieważ zamiast pisać rozbudowany kod wystarczyło "poskładać" program z dostępnych elementów. Kolejne wersje Visual Basic wprowadziły wiele kolejnych udoskonaleń i ułatwień, oraz możliwość tworzenia 16 i 32 bitowych aplikacji.
Mimo że w pełni graficzne środowisko projektowania Visual Basica i język programowania są odległe od wczesnych interpreterów Basica, elegancja i prostota języka oryginalnego Basica pozostały do dziś. Łatwość użycia i duże możliwości Visual Basica to podstawowe przyczyny, dla których został on wybrany językiem programowania aplikacji systemu Windows, takich jak Excel. Ze względu na różne wymagania programistów powstało kilka wersji języka Visual Basic. Wersja Learning Edition (LE) jest najuboższą wersją z obszerną pomocą, przeznaczoną dla początkujących programistów. Wersją podstawową stała się wersja Standart Edition (SE), a nieco rozbudowana wersja Proffessional Edition (PE) zawiera więcej kontrolek i możliwości. Najbardziej rozbudowaną wersją jest wersja Enterprise Edition (EE), która posiada bardzo dużo rozszerzeń i możliwości, w tym również możliwość tworzenia aplikacji typu klient-server. Dostępna jest również wersja Control Creation Edition (CCE), która ułatwia tworzenie własnych kontrolek Visual Basic.

EE

PE

LE

CCE

Konfigurowalne środowisko edycyjne
Wyświetlające się listy wartości, właściwości, obiektów i metod znacznie przyspieszające i ułatwiające pracę, zastosowane dzięki technologii IntelliSense™ firmy Microsoft z funkcjami QuickInfo, DataTips, Complete Word oraz List Properties/Methods.

+

+

+

+

Visual Basic Applications Edition, wersja 5.0
Możliwość wykorzystania znajomości Visual Basic w aplikacjach posiadających Visual Basic for Applications, jak np. Microsoft Office 97.

+

+

+

+

Szablony projektów, przykładowe projekty i dokumentacja Books Online
Gotowe szablony i przykładowe projekty ułatwiające pracę i zrozumienie Visual Basic oraz rozbudowana dokumentacja Books Online.

+

+

+

+

Dodatki (add-ins)
Zbiór dodatkowych narzędzi ułatwiających tworzenie modułów klas, metod, zdarzeń, właściwości, formantów ActiveX i stron Property Pages.

+

+

+

+

Wielokrotne projekty
Możliwość edycji i analizy składników i aplikacji w jednej instancji Visual Basic.

+

+

+

+

Dziedziczenie i dziedziczenie wizualne
Możliwość dziedziczenia z innych modułów klas i łączenia formantów ActiveX.

+

+

+

+

Tworzenie formantów ActiveX
Możliwość tworzenia formantów ActiveX wykorzystywanych w produktach wspierających ActiveX, m.in. Visual Basic, Visual C++, Visual FoxPro, Microsoft Office, aplikacje internetowe.

+

+

+

+

Bogaty zestaw standardowych formantów ActiveX
Formanty ActiveX takie jak: DBGrid, CheckBox, ComboBox, FileListBox, DriveListBox, CommonDialog, WebBrowser i ponad 20 innych.

+

+

+

 

Tworzenie aplikacji
Możliwość kompilacji do plików typu .EXE lub DLL.

+

+

+

 

Kurs "Learn Visual Basic Now"
Rozbudowany kurs Visual Basic zawierający ćwiczenia, lekcje wideo, odczyty lektora.

 

 

+

 

Dostęp do danych
ODBC w wersji 3.5 to dodatkowe możliwości zarządzania danymi dla źródeł danych ODBC i ISAM.

+

+

 

 

Optymalizujący kompilator kodu rodzimego
Ponad 20-to krotne przyspieszenie działania aplikacji w stosunku do poprzednich wersji, poprzez zastosowanie kompilacji kodu rodzimego.

+

+

 

 

Dokumenty ActiveX
Możliwość tworzenia aplikacji Visual Basic, które będą odczytywane przez Internet Explorer.

+

+

 

 

Formanty ActiveX dla serwerów
Możliwość wykorzystania wielowątkowych bezpiecznych i wydajnych składników dla serwerów.

+

+

 

 

Microsoft Transaction Server Developer Edition
Możliwość tworzenia trójwarstwowych aplikacji biznesowych.

+

 

 

 

Wsparcie dla RISC
Możliwość tworzenia aplikacji pracujących na platformach RISC w kodzie rodzimym.

+

 

 

 

Remote Data Objects (RDO) wersja 2.0
Obiektowo zorientowany interfejs programowania ułatwiający szybki dostęp do baz danych ODBC aplikacji klient-server lub z Internetu.

+

 

 

 

Program analizy TSQL Debugger
Możliwość testowania procedur SQL Server 6.5.

+

 

 

 

Microsoft SQL Server Developer Edition
Możliwość tworzenia i testowania baz danych SQL w sieci lokalnej.

+

 

 

 

Microsoft Visual SourceSafe
Możliwość zarządzania kodem źródłowym przy wykorzystaniu Check In/Out, dzielenie zasobów, historia projektów dla pracy grupowej.

+

 

 

 

Application Performance Explorer (APE)
Możliwość analizy wydajności aplikacji rozproszonych.

+

 

 

 

Microsoft Visual Database Tools
Możliwość tworzenia logicznych i fizycznych baz danych, kwerend klienta i struktur danych serwera.

+

 

 

 


Język Visual Basic stał się częścią pakietu Visual Studio. Obecnie dostępna jest wersja 6.0 języka Visual Basic, który w wersji Enterprise Edition jest również częścią pakietu Visual Studio 6.0. Dostępna jest również wersja Visual Basic dla systemu DOS.

Język Visual Basic utrzymuje swoją popularność pomimo bardzo silnej konkurencji, m.in. Delphi i Visual C.
Język ten jest uważany za łatwiejszy od konkurentów, jednak napisane w nim aplikacje wykonują się wolniej niż aplikacje konkurentów. Język ten posiada wiele wad i zalet, ale umożliwia tworzenie nawet bardzo rozbudowanych aplikacji, a możliwość dołączania nowych kontrolek ActiveX bardzo to ułatwia i przyspiesza.

Zaczynamy pracę

Mam nadzieję, że posiadasz Visual Basica 6 lub 5. W ostateczności możesz posiadać wersję 4 (właśnie na tej wersji poznawałem język VB), ale pamiętaj ,że różni się troszeczkę od nowszych wersji. No dobra dość gadania... zaczynamy.

Odpalamy naszego VB. Ojej, co to wyświetliło się jakieś okienko. Teraz możemy wybrać to co będziemy chcieli tworzyć. My oczywiście zajmiemy się pisaniem programów więc wybieramy pierwszą ikonkę czyli standard exe. I co my tu widzimy. Po lewej stronie okna znajduje się pasek z odpowiednimi narzędziami. Po środku widać nasz formularz, czyli to na czym będziemy „układać” nasz przyciski itp. A co jest po prawej? Chmmm... Pierwsze to składniki projektu - tu możemy zobaczyć z ilu formularzy składa się nasz program oraz przełączać się między nimi - o tym to dopiero w następnych częściach tego kursu. Poniżej widzimy okno „Properties”. Są to ustawienia danego elementu. Tak np. możemy tutaj ustawić wielkość formularza, kolor itp... A jeszcze niżej widzimy okno „Form Layout”. Jest to podgląd naszej aplikacji, gzie znajdzie się na pulpicie po uruchomieniu. Innymi słowy możesz tu ustalić czy program po uruchomieniu będzie się znajdował bliżej krawędzi dolnej czy górnej. No zapomniałem o jednym. Oczywiście o pasku narzędzi - właśnie tego u góry. Jak w każdym pasku narzędzi znajdują się tam najczęściej używane opcje. To tyle na temat wyglądu.

Nie będę tu pisał innych bzdur bo wiem, że zanudził bym Was na śmierć. Wszystko dowiesz się w swoim czasie. Wiem, że w książkach wszystko opisywane jest na początku. Z własnego doświadczenia wiem, że uczenie się czegoś o czym nie ma się bladego pojęcia jest bezsensowne.

Żelazna zasada: przede wszystkim praktyka .

Tak więc zaczynamy - następna lekcja to elementy sterujące

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")

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

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

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

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

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

 

Boolean

Przetrzymuje True lub False

Byte

Liczby całkowite z zakresu od 0 do 255

Currency

Liczby z zakresu -922337685477,5808 do + ( -||- )

Date

Data od 01.01.0100 - 31.12.9999

Decimal

Liczba zapisana z dokładnością do 28 liczb po przecinku

Double

Liczba z zakresu -1,79769313486232E+308 do + ( -||- )

Integer

Liczba z zakresu od -32768 do 32767

Single

Liczba z zakresu -3402823E+38 do + ( -||- )

String

Dane znakowe (alfanumeryczne)

Variant

Dowolne - nie musimy tego pisać gdyż Variant jest domyślnie


Funkcję DIM deklarujemy następująco:

DIM x as typ

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

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

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

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

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

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

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

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

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

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

Do następnego spotkania !

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.

0x01 graphic
Tutaj załączam gotowy program, wystarczy, że klikniesz na ikonkę dwukrotnie.

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.

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? 

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.

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...

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...



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 !!!)

Gotowy projekt dla słabszych... 0x01 graphic

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.

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...

0x01 graphic

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!!!

Do następnej lekcji...

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 ...

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ń...

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...

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...

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.

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.

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ć

Cała tablica w pliku txt 0x01 graphic

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ć

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"

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:
0x01 graphic

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:
0x01 graphic

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:
0x01 graphic


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:
0x01 graphic

Dobra. Teraz klikamy OK - nasz program powinien wyglądać tak:

0x01 graphic

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

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:

0x01 graphic

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 !
0x01 graphic


Nas zainteresuje trzecia pozycja - mianowicie ImageList. Musimy wybrać ImageList1 - bo tam są nasze rysunki... Teraz przechodzimy do zakładki Buttons i widzimy:
0x01 graphic


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:
0x01 graphic


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

------------------------------------------------------------------------------------------------
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...
------------------------------------------------------------------------------------------------



Wyszukiwarka

Podobne podstrony:
Visual Basic Dla Aplikacji W Programach Word, Powerpoint I Excel Praktyczny Kurs Z Cwiczeniami
Programowanie w języku Visual Basic dla arkusza kalkulacyjnego Excel
kurs+visual+basic%27a ZQI63ESWFA6RV2NSDJNG3PDNCTT5FCM7QKZEK5Q
praktyczny kurs visual basic net XPYVI3QBP3MCXRIFJRISPLODUH6ANI5R5DTEUTQ
ZAAWANSOWANY KURS VISUAL BASIC BY SLASH
Visual Basic 2005 Wprowadzenie do programowania w NET vb25pn
ABC Visual Basic dla aplikacji w Office XP PL

więcej podobnych podstron