Kurs Visual Basic dla zaawansowanych.doc

(58 KB) Pobierz

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

 



 

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



 

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



 

 

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



 

 

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



 

Funkcja Line

 

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

 

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

 



 

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

 



Cała tablica kodów znajduje się tu – kliknij po prostu dwukrotnie na ikonie:

 

 

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)



 

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)



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.



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.

 

2.      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ć:

 

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



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)

 



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



 

Teraz jedna z ciekawszych funkcji : Stymulowanie naciskaniem klawiszy

...

Zgłoś jeśli naruszono regulamin