vb5_anim.doc
Copyright © 2017, Janusz Bonarowski 1
Zadanie
Wykonać aplikację wyświetlającą rysunki (mapy bitowe, zdjęcia) za pomocą menu.
Aplikację w działaniu przedstawia rys. 1.
Rys. 1. Aplikacja w działaniu
Wykonanie menu
Aplikacją będziemy zarządzać poprzez menu. Aby uzyskać na formularzu menu – dodamy do niego obiekt MenuStrip (menu rozwijalne). Po dodaniu menu do formularza „zadokuje się” ono u góry pod paskiem tytułu formularza. Aby uzyskać pozycje menu należy je wpisać w pola „Wpisz tutaj” („Tape here”). Zbudujmy menu w postaci:
Aveo Film SizeMode Interval
Aveo 3 drzwiowe Start Normal Interval 1000 Aveo 4 drzwiowe Stop AutoSize Interval 500 Aveo 5 drzwiowe CenterImage Interval 200
Zoom
Pozycje z menu Aveo będą wyświetlały na formularzu zdjęcia modeli samochodu w jego trzech wersjach.
Obiektem, w którym wyświetlimy obrazy map bitowych (zdjęcia w formacie jpg) jest PictureBox.
Dodajmy ten obiekt do formularza pod menu, tak aby zajmował prawie cały formularz. Pozostawmy jego nazwę domyślną - PictureBox1.
Aby w obiekcie PictureBox1 wyświetlić obraz z pliku, np. aveo3,jpg należy umieścić w kodzie polecenie:
PictureBox1.Image = System.Drawing.Image.FromFile("C:\TKM\gr_1.4\Anim\Aveo4.jpg")
Aby uzyskać dostęp do edytora kodu i wpisać kod procedury obsługi zdarzenia: „kliknięcie na pozycję menu Aveo 3 drzwiowe” należy kliknąć 2 razy w tę pozycję menu. Otworzy się wtedy okno edytora kodu z gotowym szkieletem procedury:
Private Sub Aveo3DrzwioweToolStripMenuItem_Click(sender As Object, e As EventArgs) _
Handles Aveo3DrzwioweToolStripMenuItem.Click End Sub
Należy wpisać do niego jedną linijkę kodu i da nam to całą procedurę pozwalającą wyświetlić w obiekcie PictureBox1 plik ze zdjęciem aveo3.jpg znajdujący się na odpowiedniej ścieżce dostępu (która musi być napisana poprawnie).
Private Sub Aveo3DrzwioweToolStripMenuItem_Click(sender As Object, e As EventArgs) _ Handles Aveo3DrzwioweToolStripMenuItem.Click PictureBox1.Image = System.Drawing.Image.FromFile("C:\TKM\gr_1.4\Anim\Aveo3.jpg") End Sub
vb5_anim.doc
Copyright © 2017, Janusz Bonarowski 2
Procedurę możemy zabezpieczyć przed awaryjnym zakończeniem aplikacji (np. w przypadku braku pliku do wyświetlenia lub błędnie podanej ścieżki dostępu) za pomocą struktury Try ... Catch:
Private Sub Aveo3DrzwioweToolStripMenuItem_Click(sender As Object, e As EventArgs) _ Handles Aveo3DrzwioweToolStripMenuItem.Click Try
PictureBox1.Image =
System.Drawing.Image.FromFile("C:\TKM\gr_1.4\Anim\Aveo2.jpg") ' Tu jest błąd, powinno być Aveo3.jpg.
Catch ex As Exception MsgBox(ex.Message) MsgBox(Err.Source) MsgBox(Err.Description) MsgBox(Err.Number)
MsgBox("Brak pliku do wyświetlenia. Sprawdź nazwę i/lub ścieżkę dostępu.") End Try
End Sub
Oczywiście umieścimy tylko jedną z informacji wyświetlaną w MsgBox.
Film
Aby wyświetlić film posłużymy się obiektem Timer, dodając go do formularza. Obiekt ten, gdy jest włączony – instrukcją Timer1.Enabled = True samodzielnie uruchamia zdarzenie Timer1_Tick, pojawiające się co definiowany przedział czasu Interval wyrażony w milisekundach
(tzn. jeśli Interval = 1000 to zdarzenie pojawiać się będzie co 1 sekundę).
Aby podczas pojawiających się zdarzeń wyświetlane były kolejne zdjęcia
o nazwach od ren50.jpg do ren57.jpg musimy zmodyfikować postać ścieżki dostępu do kolejnych plików.
Ścieżka ta powinna kolejno przyjmować postać:
PictureBox1.Image = System.Drawing.Image.FromFile("C:\TKM\gr_1.4\Anim\ren50.jpg") PictureBox1.Image = System.Drawing.Image.FromFile("C:\TKM\gr_1.4\Anim\ren51.jpg") PictureBox1.Image = System.Drawing.Image.FromFile("C:\TKM\gr_1.4\Anim\ren52.jpg")
. . .
PictureBox1.Image = System.Drawing.Image.FromFile("C:\TKM\gr_1.4\Anim\ren57.jpg")
Aby to uzyskać podzielimy ścieżkę:
1. Zapiszemy początek ścieżki w zmiennej pocz:
Dim pocz As String = "C:\TKM\gr_1.4\Anim\ren5"
2. Przyjmiemy zmienna i, która będzie zmieniała się od 0 do 7 i wykorzystam do zmieniania ostatniej cyfry w numerze pliku:
PictureBox1.Image = System.Drawing.Image.FromFile(pocz & i.ToString & ".jpg") Aby zmienna i utrzymywała swoją, coraz to wyższą wartość, podczas działania aplikacji, umieścimy ja poza wszystkimi procedurami, dzięki temu będzie miała zasięg globalny.
Film będzie uruchamiany z menu po wybraniu pozycji Film -> Start i Film -> Stop. Pozycje te wykonają po jednej instrukcji:
Timer1.Enabled = True 'Uruchomienie Timera Timer1.Enabled = False 'Zatrzymanie Timera
vb5_anim.doc
Copyright © 2017, Janusz Bonarowski 3
Styl wyświetlania
Styl wyświetlania będziemy określać poprzez wybory z menu SizeMode definiując właściwości SizeMode obiektu PictureBox1 instrukcją:
PictureBox1.SizeMode = PictureBoxSizeMode.styl gdzie styl to:
Normal
Obraz zostanie umieszczony w lewym górnym rogu PictureBox’u i będzie obcięty, jeśli jest większy niż PictureBox, w którym się znajduje.
AutoSize
PictureBox przyjmie rozmiar wielkości obrazu, który w sobie zawiera.
CenterImage
Jeśli obraz jest mniejszy od PictureBoxu - jest w nim centrowany,
jeśli obraz jest większy od PictureBoxu - jest centrowany, a krawędzie obcinane.
Zoom
Obrazu jest zwiększany lub zmniejszany do wypełnienia PictureBox’u z zachowaniem proporcji długości boków.
np.:
PictureBox1.SizeMode = PictureBoxSizeMode.Zoom
Menu Interval
Pozycje tego menu określają wartość właściwości Interval dla Timera. Interval określa co jaki przedział czasu ma pojawić się zdarzenie Timer1_Tick. Wartość właściwości podajemy w milisekundach.
Określenie właściwości odbywa się instrukcją:
Timer1.Interval = 1000
Kod aplikacji
Dim i As Integer = 0
Private Sub Aveo3DrzwioweToolStripMenuItem_Click(sender As Object, e As EventArgs) _ Handles Aveo3DrzwioweToolStripMenuItem.Click Try
PictureBox1.Image =
System.Drawing.Image.FromFile("C:\TKM\gr_1.4\Anim\Aveo3.jpg") Catch ex As Exception
' Należy wybrać jedną z instrukcji:
MsgBox(ex.Message) MsgBox(Err.Source) MsgBox(Err.Description) MsgBox(Err.Number)
MsgBox("Brak pliku do wyświetlenia") End Try
End Sub
Private Sub Aveo4DrzwioweToolStripMenuItem_Click(sender As Object, e As EventArgs) _ Handles Aveo4DrzwioweToolStripMenuItem.Click PictureBox1.Image =
System.Drawing.Image.FromFile("C:\TKM\gr_1.4\Anim\Aveo4.jpg") End Sub
Private Sub Aveo5DrzwioweToolStripMenuItem_Click(sender As Object, e As EventArgs) _ Handles Aveo5DrzwioweToolStripMenuItem.Click PictureBox1.Image =
System.Drawing.Image.FromFile("C:\TKM\gr_1.4\Anim\Aveo5.jpg") End Sub
vb5_anim.doc
Copyright © 2017, Janusz Bonarowski 4
Private Sub StartToolStripMenuItem_Click(sender As Object, e As EventArgs) _
Handles StartToolStripMenuItem.Click Timer1.Enabled = True 'Uruchomienie Timera
End Sub
Private Sub StopToolStripMenuItem_Click(sender As Object, e As EventArgs) _
Handles StopToolStripMenuItem.Click Timer1.Enabled = False 'Zatrzymanie Timera
End Sub
Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick Dim pocz As String = "C:\TKM\gr_1.4\Anim\ren5"
If i = 8 Then i = 0 End If
PictureBox1.Image = System.Drawing.Image.FromFile(pocz & i.ToString & ".jpg") i = i + 1
End Sub
Private Sub NormalToolStripMenuItem_Click(sender As Object, e As EventArgs) _ Handles NormalToolStripMenuItem.Click ' Obraz zostanie umieszczony w lewym górnym rogu PictureBox
' i jest obcięty, jeśli jest większy niż PictureBox, w którym się znajduje.
PictureBox1.SizeMode = PictureBoxSizeMode.Normal End Sub
Private Sub AutoSizeToolStripMenuItem_Click(sender As Object, e As EventArgs) _ Handles AutoSizeToolStripMenuItem.Click ' PictureBox jest wielkości równej wielkości obrazu, który zawiera.
PictureBox1.SizeMode = PictureBoxSizeMode.AutoSize End Sub
Private Sub CenterImageToolStripMenuItem_Click(sender As Object, e As EventArgs) _ Handles CenterImageToolStripMenuItem.Click ' Jeśli obraz < od PictureBoxu - jest centrowany,
' jeśli obraz > od PictureBoxu - jest centrowany, a krawędzie obcinane.
PictureBox1.SizeMode = PictureBoxSizeMode.CenterImage End Sub
Private Sub ZoomToolStripMenuItem_Click(sender As Object, e As EventArgs) _
Handles ZoomToolStripMenuItem.Click ' Obrazu jest zwiększany lub zmniejszany
' Z zachowaniem proporcji długości boków.
PictureBox1.SizeMode = PictureBoxSizeMode.Zoom End Sub
Private Sub Interval1000ToolStripMenuItem_Click(sender As Object, e As EventArgs) _ Handles ToolStripMenuItem2.Click Timer1.Interval = 1000
End Sub
Private Sub Interval500ToolStripMenuItem_Click(sender As Object, e As EventArgs) _ Handles ToolStripMenuItem3.Click Timer1.Interval = 500
End Sub
Private Sub Interval200ToolStripMenuItem_Click(sender As Object, e As EventArgs) _ Handles ToolStripMenuItem4.Click Timer1.Interval = 200
End Sub