Visual Basic Lekcje 20-30
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ń )
(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)
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)
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:
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)
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)
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)
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)
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.
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:
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")
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ź...
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
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
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
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)
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)
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:
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)
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)
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.
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
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:
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
Cała tablica w pliku txt
2. LCase (string) - zmienia wszystkie znaki w stringu na małe np:
x = "Stonoga Ma 100 nóg"
y = LCase (x)
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)
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)
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)
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)
y = Mid (x, 9,6)
Zwróci - 100 nóg
Zauważ, że litera M jest zarazem znakiem 9 jak i pierwszym !!!
6. Len(string) - zwraca długość stringu np.
x= "Stonoga"
y = Len(x)
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 "
zwróci "to jest lekcja VB "
x = Rtrim (" to jest lekcja VB ")
zwróci " to jest lekcja VB"
zwróci " to jest lekcja VB"
x = trim (" to jest lekcja VB ")
zwróci "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
zwróci liczbę 65
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 ?
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)
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:
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
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
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
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
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ę ...)
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
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
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
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 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
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...
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:
Uruchom VB, ułóż przycisk i dodaj do niego kod:
x = shell("C:Program FilesAccessoriesMspaint.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:
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.
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.
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:
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):
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
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:katalogplik.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 dokumentyindex.dat" for input as #1
Open "C:info.txt" 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 dokumentyindex.dat" for input as #1
Open "C:info.txt" for input as #2
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:
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 ?
Czy więc teraz jest możliwa taka sytuacja ?
Open "C:moje dokumentyindex.dat" for input as #1
Close 1
Open "C:info.txt" 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ć !!!
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
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
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 !!!
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:
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
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.
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
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
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:
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
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
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
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.
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.
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.
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:bzdetyA*.* 'Usunie wszystkie pliki z katalogu bzdety zaczynające się na literę a
Kill "C:Bzdety*.* 'Usunie wszystkie pliki z katalogu Bzdety
Kill "C:bzdety*.txt" ' Usunie wszystkie dokumenty tekstowe z katalogu bzdety
Kill "C:bzdetyA*.* '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"
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 dokumentypierdoł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.
Nie uwierzysz, ale te trzy metody obsługuje jedna funkcja - Name.
Aby zmienić nazwę pliku:
File "C:Moje dokumentyDo mamy.doc" as "C:Moje dokumentyWysłany do mamy.doc"
File "C:Moje dokumentyDo mamy.doc" as "C:Moje dokumentyWysłany do mamy.doc"
Aby zmienić nazwę katalogu:
File "C:Bzdety" as "C:Pierdoły"
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 dokumentybachory.txt"
File "C:dzieci.txt" as "C:Moje dokumentybachory.txt"
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 dokumentykot.jpg"
Pewnie myślisz, że jest to zwykłe przypisanie opcji obiektowi jak np.
Image1.picture = "C:Moje dokumentykot.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 dokumentykot.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 dokumentylist.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 dokumentylist.doc",1)
OKi.
Będziemy tworzyć menu. Jeśli używasz teraz przeglądarki to spójrz prawie na samą górę ekranu - widzisz tam Plik, Edycja, Widok itd. Kliknij np. na Plik - rozwija się kolejne menu - będziemy to już nazywać podmenu. Ale to podmenu można jeszcze bardziej rozwinąć. Tak np. jest W Internet Explorer pod Plik - Nowy. Rozwija się kolejne. Te zagadnienia są trochę trudniejsze więc po raz pierwszy do kursu wstawię grafikę!!!
OKi. Na razie stworzymy coś takiego:
Menu jak na razie nie będą rozwijane. Nie posłużymy się tu żadną kontrolką z menu narzędzia. To co nas interesuje znajduje się pod menu Tools- Menu Edytor. Lub szybko dostaniemy się do tego przytrzymując przycisk Control a potem literkę E. Wyskoczy nam takie okienko:
Chmmm. Co my tu mamy. Pierwszą rzeczą jest Caption. Chyba wiesz co to jest ... To jest to co będziemy widzieć na pasku - wpisz więc Plik. Duga rzecz to name - tutaj nazywamy to mnuPlik. Inne rzeczy nas na razie nie będą interesować. Klikamy Next. Teraz znów w Caption wpisujemy Edycja i nazwa mnuEdycja. Next. Caption Widok, nazwa mnuCaption. Teraz nasz program powinien wyglądać tak ja na pierwszym rysunku. No dobra, ale my chcemy aby to menu było rozwijalne. No więc jeszcze raz wchodzimy do menu edytora. Są tam nasze trzy pozycje. Klikamy poniżej ostatniej na wolnym miejscu. W pole Caption wpisujemy Start, a jako nazwę nadajemy mu mnuPlikStart. No dobra, jak na razie stworzyliśmy 4 menu rozwijalne. Ale my przecież chcemy aby to było podmenu. Aby ustawić to tam gdzie trzeba będziemy musieli się posłużyć strzałeczkami - te zaraz obok Next-a. Skoro Start ma być pod Plik, to musimy 2x kliknąć strzałkę w górę. No ale nadal mamy 4 menu rozwijalne. No to jeszcze strzałka w prawo i wyglądać to powinno tak:
Ja jeszcze zrobiłem koniec. Myślę, że sobie z tym już poradzisz. Jeszcze raz na wolne miejsce Caption na Koniec, nazwa mnuPlikKoniec. I jeszcze ustawić tak jak na rysunku. A jeśli teraz byśmy chcieli z Plik - Start zrobić kolejne menu rozwijalne ? Tzn. Klikamy Plik - Start i wyskakuje kolejne menu z kolejnymi dwoma opcjami - Przód i tył ? Znów klikamy na wolne miejsce w Menu Edytorze. Tworzymy kolejną pozycję - Przód o nazwie mnuPlikStartPrzod. Ma ona być rozwijana Startem, a więc przesuwamy ją strzałkami do góry pod Start. No ale teraz znów mamy 4 główne menu rozwijalne. No to strzałka w prawo. No, ale tera jak klikniemy na menu plik to pokaże 3 pozycje - Start, Przód,Koniec. My chcemy, aby Przód ukazało się dopiero po kliknięciu na Start. No to jeszcze raz strzałka w prawo. To samo robimy z Tył. Powinno to teraz wyglądać tak:
Ja jeszcze zrobiłem koniec. Myślę, że sobie z tym już poradzisz. Jeszcze raz na wolne miejsce Caption na Koniec, nazwa mnuPlikKoniec. I jeszcze ustawić tak jak na rysunku. A jeśli teraz byśmy chcieli z Plik - Start zrobić kolejne menu rozwijalne ? Tzn. Klikamy Plik - Start i wyskakuje kolejne menu z kolejnymi dwoma opcjami - Przód i tył ? Znów klikamy na wolne miejsce w Menu Edytorze. Tworzymy kolejną pozycję - Przód o nazwie mnuPlikStartPrzod. Ma ona być rozwijana Startem, a więc przesuwamy ją strzałkami do góry pod Start. No ale teraz znów mamy 4 główne menu rozwijalne. No to strzałka w prawo. No, ale tera jak klikniemy na menu plik to pokaże 3 pozycje - Start, Przód,Koniec. My chcemy, aby Przód ukazało się dopiero po kliknięciu na Start. No to jeszcze raz strzałka w prawo. To samo robimy z Tył. Powinno to teraz wyglądać tak:
Dobra. Teraz klikamy OK - nasz program powinien wyglądać tak:
Dobra. A teraz jak zrobić, aby po kliknięciu na Koniec program się wyłączył ? Bardzo prosto ! Po prostu kliknij na Koniec i dodaj odpowiedni kod tzn. Unload Me
Musisz sobie jeszcze poćwiczyć tą lekcję, gdyż jest ona troszeczkę skomplikowana, a na następnej lekcji jeszcze trudniejsze zagadnienie - będziemy projektować pasek narzędzi
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 FilesMicrosoft Visual Studio. My będziemy dodawać ikonki standardowo zainstalowane przez VB. A więc wchodzimy kolejno w CommonGraphicsIcons. Teraz wybierzmy dziedzinę Computer. Wyświetliło się mnóstwo ikonek - dodajm ze 4 - może kolejno - CDROM01.ico. Pojawiła się ona w okienku. Teraz znów Insert Picture i dodajemy dalej - DISK04.ico, KEYBRD02.ico, Mouse01.ico - no może starczy. Nasze okienko Properties powinno wyglądać tak:
Teraz klikamy OK. No i bierzemy się do tworzenia paska narzędzi. Wybieramy więc ToolBar - także zobacz ściągawka. Układamy go gdzieś na formie. Sam ułoży się u samej góry formy - zostawmy go więc tam. Teraz klikamy prawym klawiszem myszy na ToolBar-ze i wybieramy Properties. Ojej - ile tu tego jest !
Nas zainteresuje trzecia pozycja - mianowicie ImageList. Musimy wybrać ImageList1 - bo tam są nasze rysunki... Teraz przechodzimy do zakładki Buttons i widzimy:
I chyba już wiesz co kliknąć ! Oczywiście insert Button. Teraz podświetlą nam się "zszarzałe" pola. W sekcji Imege wybieramy numer ikonki (teraz z 0 robimy 1). W sekcji Key wpisz nazwę przycisku - KeyCDROM. Teraz znów Insert Button - tym razem w sekcji Imege wpisujemy 2 i wpisujemy inną nazwę przycisku. Czynność należy wykonać jeszcze 2 razy - w sumie pole index ma osiągnąć wartość 4. No i na koniec OK. Po wystartowaniu nasz program powinien wyglądać tak:
Dobra - stworzyliśmy pasek narzędzi ale jak to wykorzystać. Sprawa nie jest tak prosta jak ze zwykłymi przyciskami. Przedtem wystarczyło kliknąć dwukrotnie na przycisku i dopisać kod, a tu nie mamy do czynienia z przyciskami tylko ToolBarem. Nie bój się. Tym razem sprawa jest dość prosta. Kliknij dwukrotnie na pasku narzędzi naszego programu. Wyskoczy miejsce na dopisanie kodu. Ale do jakiego przycisku?
Do wszystkich ! Program je będzie rozróżniał po nazwach.
Nas zainteresuje trzecia pozycja - mianowicie ImageList. Musimy wybrać ImageList1 - bo tam są nasze rysunki... Teraz przechodzimy do zakładki Buttons i widzimy:
I chyba już wiesz co kliknąć ! Oczywiście insert Button. Teraz podświetlą nam się "zszarzałe" pola. W sekcji Imege wybieramy numer ikonki (teraz z 0 robimy 1). W sekcji Key wpisz nazwę przycisku - KeyCDROM. Teraz znów Insert Button - tym razem w sekcji Imege wpisujemy 2 i wpisujemy inną nazwę przycisku. Czynność należy wykonać jeszcze 2 razy - w sumie pole index ma osiągnąć wartość 4. No i na koniec OK. Po wystartowaniu nasz program powinien wyglądać tak:
Dobra - stworzyliśmy pasek narzędzi ale jak to wykorzystać. Sprawa nie jest tak prosta jak ze zwykłymi przyciskami. Przedtem wystarczyło kliknąć dwukrotnie na przycisku i dopisać kod, a tu nie mamy do czynienia z przyciskami tylko ToolBarem. Nie bój się. Tym razem sprawa jest dość prosta. Kliknij dwukrotnie na pasku narzędzi naszego programu. Wyskoczy miejsce na dopisanie kodu. Ale do jakiego przycisku?
Do wszystkich ! Program je będzie rozróżniał po nazwach.
Dim Msg as Integer
Select Case Button.Key
Case is = "KeyCDROM":
Msg = MsgBox ("Nacisnąłeś CD-ROM")
Case is = "KeyDyskietka":
.... itd
End Select
Select Case Button.Key
Case is = "KeyCDROM":
Msg = MsgBox ("Nacisnąłeś CD-ROM")
Case is = "KeyDyskietka":
.... itd
End Select