Kurs Visual Basic - poziom zaawansowany, Kurs Visual Basic - poziom zaawansowany


Witam wszystkich ponownie. Jeśli przeszedłeś kurs Visual Basic by SLASH na poziomie podstawowym bez problemów, to czas na bardziej zaawansowane funkcje.

Mam nadzieję, że ten język przypadł Ci do gustu i masz zamiar w nim programować.

Nie będę się dużo rozpisywał - zaczynamy więc:

KURS VISUAL BASIC

POZIOM ZAAWANSOWANY

BY SLASH

0x08 graphic

Funkcja With

Zamiast pisać:

Label1.Caption = „Tekst”

Label1.Size = 16

Label1.Bold = True

Label1.Underline = False

Możemy napisać:

With Label1

.Caption = „Tekst”

.Size = 16

.Bold = True

.Underline = False

End With

0x08 graphic

Schowek Windows

Visual Basic potrafi obsługiwać schowek Windows. Możemy na nim wykonać działania:

Składnia:

Zmienna = Clipboard.Mode

Mode:

Clear

Czyści zawartość schowka

GetData

Pobiera ze schowka grafikę

GetText

Pobiera ze schowka tekst

SetData

Kopiuje do schowka grafikę

SetText

Kopiuje do schowka tekst

0x08 graphic

Zastępowanie błędów i funkcja Goto

Bardzo często w aplikacjach VB będziesz używał funkcję zastępującą błędy. Po co ? Np., gdy w okienko przeznaczone na liczbę wpiszesz jakieś litery - wyskakuje błąd. Czy nie lepiej by było, abyśmy sami zdecydowali o komunikacie błędu. Oto przykład pokazujący zdefiniowany przez nas komunikat o błędzie:

On Error Resume Next `Jeśli błąd to go nie wyświetlaj tylko kontynuuj...

Nn = 4 / 0 `Przykładowe spowodowanie błędu

If err.number <> 0 then `Jeśli są błędy (czyli wynik err.number nie jest równy 0)

Goto line1 ` Idź do linii oznaczonej „Line1”

Else `W przeciwnym przypadku (czyli jeśli nie ma błędów)

Goto line2 `Idź do linii oznaczonej “Line2”

End if `Koniec założeń

Line1: `Deklaracja linii “Line1”

If err.number = 11 then `Jeśli wystąpił błąd 11 (czyli dzielenie przez 0)

X = MsgBox(“Cholero! Nie dzieli się przez 0 !!!”) `Odpowiedni komunikat

Exit Sub `Zakańczamy procedurę

ElseIf err.number <> 11 then `Jeśli inny błąd to

X = MsgBox(“Jakiś inny błąd”) `Odpowiedni komunikat

Exit Sub `Zakańczamy procedurę

End if `Zakańczamy założenia

Line2: `Deklaracja linii 2

X = MsgBox(„Bez błędów”) ` Jeśli program dotarł tutaj to znaczy że brak błędów

0x08 graphic

Funkcja InStr

Przeszukuje stringi i zwraca pozycję danej litery np.

String = „XXpXXpXXPXXP”

Szukane = „P”

Wynik = InStr(String, Szukane) `Funkcja zwróci 9

Wynik = InStr(4, String, Szukane) `Funkcja zaczyna szukać dopiero od 4 znaku, czyli

` 4 znak to pierwszy znak i zwróci 6

Wynik = InStr(String, „W”) `Funkcja zwróci 0, gdyż dana litera nie występuje w stringu

0x08 graphic

Funkcja Line

Rysuje linię prostą od punktu (x1, y1) do (x2,y2) w wybranym kolorze:

Line(100,200) - (3000,4552), RGB(200,12,12)

0x08 graphic

Keyboard, czyli jaki klawisz nacisnąłem ?

Kliknij dwukrotnie na formie, teraz wybierz zdarzenie KeyDown. Oznacza to reakcję na wciśnięcie jakiegoś klawisza. Teraz dodaj kod:

Dim ShiftDown, AltDown, CtrlDown, Txt

ShiftDown = (Shift And vbShiftMask) > 0

AltDown = (Shift And vbAltMask) > 0

CtrlDown = (Shift And vbCtrlMask) > 0

If KeyCode = vbKeyF2 Then ' Jeśli nacisnęliśmy F2 to próbujemy kombinacji.

If ShiftDown And CtrlDown And AltDown Then

Txt = "SHIFT+CTRL+ALT+F2."

ElseIf ShiftDown And AltDown Then

Txt = "SHIFT+ALT+F2."

ElseIf ShiftDown And CtrlDown Then

Txt = "SHIFT+CTRL+F2."

ElseIf CtrlDown And AltDown Then

Txt = "CTRL+ALT+F2."

ElseIf ShiftDown Then

Txt = "SHIFT+F2."

ElseIf CtrlDown Then

Txt = "CTRL+F2."

ElseIf AltDown Then

Txt = "ALT+F2."

ElseIf Shift = 0 Then

Txt = "F2."

End If

MsgBox ("Nacisnąłeś " & Txt)

End If

0x08 graphic
Cała tablica kodów znajduje się tu - kliknij po prostu dwukrotnie na ikonie: 0x01 graphic

Keyboard 2 - czyli co wpisałem ?

Nieraz jednak zachodzi potrzeba sprawdzenia czy wpisałem coś dużą litero czy małą. Poprzednia funkcja reaguje tylko na wciśnięcie klawisza - nie sprawdza jednak co wyskakuje nam na ekranie. Owszem - można sprawdzić czy piszemy dużą literą - bo to w końcu wciśnięte dwa klawisze Shift + Litera. A jeśli mamy włączonego Caps Lock-a ? Program wykryje tylko naciśnięcie litery - więc stwierdzi że mała...

Można się z tym dogadać za pomocą funkcji Chr. Funkcję zastosujmy np. do okienka tekstowego. Zmieńmy więc zdarzenie na KeyPress (Czyli naciśnięcie). Pewnie spytasz dlaczego nie KeyDown. KeyDown zwraca tylko wciśnięty klawisz, a KeyPress zwraca kod Ascii wpisanego znaku.

Dodajmy kod:

Dim znak

Znak = Chr(KeyAscii)

MsgBox(„Wpisałeś : ” & znak)

0x08 graphic

Funkcja Circle:

Rysuje ona okręgi.

Dim CX, CY, Promien

ScaleMode = 3 `Tutaj odstęp promieni (5 - sama obręcz)

CX = ScaleWidth / 2 `Wyznaczenie współrzędnej x środka formy

CY = ScaleHeight / 2 `Wyznaczenie współrzędnej y środka formy

If CX > CY Then

Limit = CY `Ustalenie o którą krawęź ma się opierać ostatni promień

Else

Limit = CX
End If

For Promien = 0 to limit

Circle(CX,CY), Promien, RGB(Rnd * 255, RND * 255, RND * 255)

0x08 graphic
Next Promien

Operator Like

Przeszukuje stringi w poszukiwaniu znaków (nie pojedyńczego znaku jak to było w przypadku funkcji InStr). Funkcja zwraca True (czyli prawda) lub False.

yCheck = "aBBBa" Like "a*a" ' Zwraca True.

MyCheck = "F" Like "[A-Z]" ' Zwraca True.

MyCheck = "F" Like "[!A-Z]" ' Zwraca False.

MyCheck = "a2a" Like "a#a" ' Zwraca True.

MyCheck = "aM5b" Like "a[L-P]#[!c-e]" ' Zwraca True.

MyCheck = "BAT123khg" Like "B?T*" ' Zwraca True.

0x08 graphic
MyCheck = "CAT123khg" Like "B?T*" ' Zwraca False.

Jak rysować na formie za pomocą myszy:

Proces rysowania jest bardziej złożony i składa się z trzech kroków :

  1. Klikamy dwukrotnie na formie i zmieniamy zdarzenie z Load na MousMove. Teraz dodajemy następujący kod:

If Button = vbKeyLButton Then `Jeśli wciśnięty lewy klawisz myszy

PSet (X, Y) ` Narysuj punkt o współrzędnych myszy (x,y)

End If

Po uruchomieniu aplikacji, zobaczymy, że faktycznie możemy rysować, ale tylko wtedy gdy wolno poruszamy myszką. Dlaczego tak się dzieje ? Otóż procesor nie nadąża z rysowaniem punktów. No więc jak robią to inne programy. Otóż stosują one prostą sztuczkę - rysują prostą między dwoma punktami, za którymi nadążył procesor. Pewnie zauważyłeś w aplikacjach, że zamiast ładnego odręcznego okręgu wychodzi iluśtamkąt.

  1. Tworzymy moduł (Project-Add module) i dopisujemy do niego:

Global ostX, ostY `Ostatnie współrzędne

Teraz wracamy do Form1_MousMove i zmieniamy wszystko na:

If Button = vbKeyLButton Then `Jeśli wciśnięty lewy klawisz myszki

Line (ostX, ostY)-(X, Y) `Rysuj prostą od ostatniego punktu do aktualnego

ostX = X `Zapisanie aktualnej pozycji myszy jako ostatniej

ostY = Y ` j.w

End If

Po uruchomieniu zauważymy znaczną różnicę - da się rysować płynnie. Jest jednak mały problem, nie da się narysować dwóch krzywych i rysowanie zawsze zaczyna się z lewego górnego rogu. Aby to skorygować:

  1. W zdarzeniu MouseDown dopisujemy:

ostX = X

ostY = Y

I wszystko powinno działać jak trzeba. Do formularza możemy także dodać przycisk który będzie czyścił zawartość ekranu - wystarczy dodać do niego :

CLS

Możemy także pokusić się o zmianę koloru pędzla i jego grubość.

W sekcji Form1_Load dopisz:

DrawWidth = 10 `Grubość pędzla

0x08 graphic
ForeColor = RGB(0, 0, 255) `Kolor pędzla (niebieski)

Obiecałem już w kursie podstawowym, że wyjaśnię jak ListBox ma rozpoznawać wybrany element:

Cała funkcja powinna wyglądać tak: (Zakładam, że stworzyłeś ListBox i nie zmieniałeś jego domyślej nazwy - czyli zostało List1

Tworzymy mduł i deklarujemy dwie tablice:

Global tytul(10)

Global opis(10)

W sekcji Form_Load dopisujemy:

Dim i

tytul(1) = "Jeden"

tytul(2) = "Dwa"

tytul(3) = "Trzy"

opis(1) = "Opis do jeden"

opis(2) = "Opis do dwa"

opis(3) = "Opis do trzy"

For i = 1 To 10

If tytul(i) = "" Then Exit For

List1.AddItem tytul(i)

List1.ItemData(List1.NewIndex) = i

Next i

A w procedurze kliknięcia na listBox:

im wynik

wynik = opis(List1.ItemData(List1.ListIndex))

MsgBox (wynik)

0x08 graphic
I teraz czy lista posortowana, czy też nie program zawsze prawidłowo będzie rozróżniał dane

Teraz zajmiemy się plikami na naszym twardzielu-

Kopiowanie pliku:

FileCopy „C:\plik.dat”,”D:\backupplik.dat”

Przenoszenie i zmiana nazwy:

Aby tylko zmienić nazwę:

Name "C:\ptik.htm" As "C:\index.htm"

Aby przenieść plik:

Name "C:\ptik.htm" As "D:\HTML\ptik.htm"

Aby przenieść i zmienić nazwę:

Name "C:\ptik.htm" As "D:\HTML\PTiK\index.htm"

Aby pobrać wielkość pliku (w bajtach):

Wielkosc = FileLen(„C:\ptik.htm”)

0x08 graphic

Teraz jedna z ciekawszych funkcji : Stymulowanie naciskaniem klawiszy

Do jakiegoś przycisku dodaj kod:

x = Shell("c:\windows\Calc.exe", 1) `Uruchom kalkulator

SendKeys "10{+}50", True `Prześlij klawisze 10 + 50, Poczekaj na reakcję

SendKeys "=", True `Prześlij klawisz =, poczekaj na reakcję

W ten sposób kalkulator powinien wyświetlić liczbę 60

Po co to True na końcu każdej instrukcji SendKeys ?

Jest to instrukcja dla naszej aplikacji, że ma zaczekać, aż uruchomiony program odpowie.

Np.,gdybyśmy nie napisali True pierwsza linijka została by przesłana, ale zaraz pojawiło by się =. Program mógłby nie zdążyć pobrać całego 10+50 i wyświetlił by nam albo błędną odpowiedź, albo by w ogóle nie zareagował (przy szybkich procesorach). Tak więc zawsze stosuj funkcję TRUE !!!

Więcej o tej funkcji znajdziesz w Helpie.

0x08 graphic

I to by było na tyle jeśli chodzi o funkcje zaawansowane. Sorki, że obiecałem, że będzie jeszcze o API i Bazach danych. Miało tak być, ale postanowiłem się uczyć innego języka Visual C++ - VB zostawiłem w spokoju.

Ale dla pocieszenia powiem Wam, że jak dojdę do wprawy w VC++ to zaraz wezmę się za pisanie kursu - także tak prostego w zrozumieniu jak VB.

Trzeba patrzeć w przyszłość - wiele osób powie, że VB to bardziej język skryptowy. Jego wadami jest powolność i małe możliwości. Nie chcę Wam wmówić, że niepotrzebnie uczyliście się tego języka - jeśli Wam wystarcza to kontynuujcie naukę - kupcie sobie jakąś dobrą książkę (oczywiście nie dla początkujących). Jeśli jednak nie widzisz przyszłości z tym językiem, to przystąp do nauki C++. Na pewno będzie Ci dużo łatwiej znając już VB. Wiele funkcji jest podobnie zbudowanych w C++. No a znać dwa języki programowania to już coś - tylko najlepsi to potrafią :)))

Kiedy będzie kurs VC++-a , tego jeszcze nie wiem. To zależy od tego jak szybko się go nauczę. Zaglądaj na www.ptik.prv.pl .



Wyszukiwarka