Strona:
14

Kurs Visual Basic - cześć 6

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

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.

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

Slash
slash83@wp.pl