opis
Transkrypt
opis
Przykład 5 Azymut ze współrzędnych - zapis i odczyt z pliku.
Projekt: (modyfikacja projektu P4)
Obiekty mają zmienione następujące wartości cech:
położenie i wielkość obiektów (w przybliżeniu) zgodnie z wyglądem w oknie programu (rozbudowa programu P5)
Cecha NAME:
okno ma nazwę P5
Nowe przyciski mają nazwy odpowiednio – CZYTAJ_PRZ, ZAPISZ_PRZ
Cecha ENABLED - PISZ_PRZ ma ustaloną wartość na FALSE
Cecha TEXTALIGN
- wszystkie pola tekstowe mają ustawioną wartość na = Center
Obiekt P5 ma zmienioną cechę: ICON – wstawiony plik P5.ICO
Zmiany koloru tła i koloru napisu, oraz zmiany czcionki według własnego uznania.
Pozostałe cechy obiektów zachowują wartości początkowe (lub z poprzedniego projektu).
Obliczenie azymutu przeniesione do segmentu funkcji LICZ_AZYMUT (niezwiązanej z żadnym obiektem).
Plik z danymi należy umieścić w podkatalogu BIN\DEBUG bieżącego projektu, i tam też powstanie plik z wynikami.
Kod programu:
Wpisujemy kod oznaczony kolorem czarnym, (zawiera tylko procedury nowe, lub zmienione do programu P5) pozostała
część jest tworzona automatycznie przez VB.
Zawiera tylko procedury nowe, lub zmienione w stosunku do P4 !!!
‘ Kolor zielony (poprzedzony Apostrofem) oznacza tekst komentarza.
Public Class p5
Dim xk, xp, yk, yp As Single
Dim dx, dy As Single
Dim azymut As Single
Dim zapisany_wynik As Boolean 'zmienna dla trybu otwarcia pliku do zapisu
Dim otwarty_plik As Boolean
'zmienna dla trybu otwarcia pliku z danymi
Private Sub wyczyść_prz_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles wyczyść_prz.Click
xp_txt.Text = ""
yp_txt.Text = ""
xk_txt.Text = ""
yk_txt.Text = ""
azymut_ety.Text = ""
Zapisz_prz.Enabled = False
End Sub
Private Sub azymut_prz_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles azymut_prz.Click
If xp_txt.Text = "" Or xk_txt.Text = "" Or yp_txt.Text = "" Or yk_txt.Text = "" Then
MsgBox(" Co najmniej jedna współrzędna nie została wpisana!!!", 16, "BŁĄD WSPÓŁRZĘDNYCH")
Exit Sub
End If
If Val(xp_txt.Text) = Val(xk_txt.Text) And Val(yp_txt.Text) = Val(yk_txt.Text) Then
MsgBox(" Błąd, nie ma azymutu !!!", 16, "BŁĄD WSPÓŁRZĘDNYCH")
Exit Sub
End If
xk = Val(xk_txt.Text)
xp = Val(xp_txt.Text)
yk = Val(yk_txt.Text)
yp = Val(yp_txt.Text)
dx = xk - xp
dy = yk - yp
azymut = Licz_Azymut(dx, dy)
‘ wywołanie funkcji obliczającej azymut, liczba parametrów zgodna z liczbą w definicji.
azymut_ety.Text = Format(azymut, " 0.0000 gradów ")
Zapisz_prz.Enabled = True
End Sub
funkcja użytkownika (niezwiązana z żadnym obiektem), w całości wpisywana w oknie kodu, w dowolnym miejscu (pomiędzy procedurami)
Function Licz_ Azymut(ByRef dx As Single, ByRef dy As Single) As Single
‘ Definicja funkcji (typu single) z dwoma parametrami przekazywanymi przez zmienną (referencję)
Dim az As Single
If dx = 0 And dy > 0 Then
az = 100
ElseIf dx = 0 And dy < 0 Then
az = 300
ElseIf dx > 0 And dy = 0 Then
az = 0
ElseIf dx < 0 And dy = 0 Then
az = 200
ElseIf dx <> 0 And dy <> 0 Then
az = Math.Atan(dy / dx)
az = az * 200 / Math.PI
If az < 0 Then az = -az
If dx < 0 And dy > 0 Then az = 200 - az
If dx < 0 And dy < 0 Then az = 200 + az
If dx > 0 And dy < 0 Then az = 400 - az
End If
Licz_Azymut = Az
‘ Przypisanie nazwie funkcji odpowiedniej (wyliczonej) wartości
End Function
Private Sub czytaj_prz_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles czytaj_prz.Click
If otwarty_plik Then
If EOF(1) Then
‘ EOF bada czy został osiągnięty koniec pliku (wtedy przyjmuje wartość = TRUE
FileClose(1)
‘ zamknięcie pliku z danymi
czytaj_prz.Enabled = False
‘ dezaktywacja przycisku – CZYTAJ_PRZ
Exit Sub
‘ wyjście z procedury
End If
Input(1, xp)
‘ wczytanie z pliku kolejnej zmiennej
xp_txt.Text = Str(xp)
‘ wpisanie wartości zmiennej do odpowiedniego pola tekstowego
Input(1, yp)
yp_txt.Text = Str(yp)
Input(1, xk)
xk_txt.Text = Str(xk)
Input(1, yk)
yk_txt.Text = Str(yk)
Else
FileOpen(1, "dane.txt", OpenMode.Input)
‘ otwarcie pliku tekstowego do odczytu
Input(1, xp)
xp_txt.Text = Str(xp)
Input(1, yp)
yp_txt.Text = Str(yp)
Input(1, xk)
xk_txt.Text = Str(xk)
Input(1, yk)
yk_txt.Text = Str(yk)
otwarty_plik = True
End If
azymut_ety.Text = ""
Zapisz_prz.Enabled = False
‘ dezaktywacja przycisku – ZAPISZ_PRZ
End Sub
Private Sub Zapisz_prz_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Zapisz_prz.Click
If zapisany_wynik Then
FileOpen(2, "azymut.txt", OpenMode.Append)
‘ otwarcie pliku tekstowego do trybu dopisywania
Print(2, azymut)
‘ Wpisanie do pliku tekstowego wartości zmiennej
FileClose(2)
Else
FileOpen(2, "azymut.txt", OpenMode.Output)
‘ otwarcie pliku tekstowego do trybu zapisu – nowy plik
Print(2, azymut)
FileClose(2)
‘ zamknięcie pliku z wynikami
zapisany_wynik = True
End If
Zapisz_prz.Enabled = False
End Sub
Private Sub P5_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
zapisany_wynik = False
‘ Ustawienie wartości początkowej zmiennej logicznej
otwarty_plik = False
End Sub
End Class
Pliki tekstowe
Dane.txt
0 0 0 3
0 0 3 0
0 0 -3 0
0 0 0 -3
Azymut.txt
100 0 200 300
Jan Ruchel
Kraków, kwiecień 2013