Biologie | Chimie | Didactica | Fizica | Geografie | Informatica | |
Istorie | Literatura | Matematica | Psihologie |
Private Sub Form_Click()
pi = 4 * Atn(1)
Scale (-pi, 1)-(pi, -1)
For fi = -3.1415 To 3.1415 Step 0.01
X = fi
Y = Sin(fi)
PSet (X, Y)
Next fi
For Y = -1 To 1 Step 0.01
PSet (0, Y)
Next Y
For X = -3.1415 To 3.1415 Step 0.01
PSet (X, 0)
Next X
End Sub
- Proprietatea WindowsState a formei trebuie setata pe 2 - Maximized.
Programul triangulatie rezolva o problema de calcul a distantei prin triangulatie. Se cunoaste o latura a unui triunghi si unghiurile formate de celelalte laturi cu latura cunoscuta. Latura cunoscuta este data prin coordonatele punctelor P1 (1,1) si P2 (1,9). Unghiurile sunt: si .
Scalarea se face la evenimentul Load (incarcare) al formei pe coordonatele:
Scale (0, 10)-(15, 0)
Fig. 12.25. Problema de triangulatie.
Lungimile segmentelor P1P3 si P2P4 se iau 20 (unitati).
- Determinarea coordonatelor punctelor:
,
,
,
,
- Determinarea ecuatiilor celor doua drepte:
- Punctul de intersectie se obtine din conditia:
- La evenimentul click pe forma programul calculeaza punctul de intersecsie al celor doua laturi (afiseaza coordonatele X si Y in doua TextBox in partea de sus a ecranului) si deseneaza cele doua segmente P1 P3 si P2 P4.
- In partea de jos a ecranului, in doua TextBox la evenimentele mouse-ului (MouseDown, MouseMove si MouseUp) se afiseaza coordonatele mouse-ului. In momentul in care indicatorul mouse-ului se afla pe punctul de intersectie al celor doua drepte informatiile afisate in cele doua TextBox din partea de sus a formei (cele calculate) trebuie sa fie egale cu cele afisate in partea de jos a ecranului (coordonatele mouse-ului).
Fig. 12.26. Interfata programului de triangulatie.
Dim X1, Y1, X2, Y2 As Single
Dim X3, Y3, X4, Y4 As Single
Dim X5, Y5, X, Y As Single
Dim AlfaR, BetaR As Single
Dim AlfaG, BetaG As Single
Dim PI As Single
Function Functie1(X, X1, Y1, X3, Y3)
Functie1 = Y1 + (X - X1) * (Y3 - Y1) / (X3 - X1)
End Function
Function Functie2(X, X2, Y2, X4, Y4)
Functie2 = Y2 + (X - X2) * (Y4 - Y2) / (X4 - X2)
End Function
Private Sub Form_Click()
PI = 4 * Atn(1)
X1 = 1
Y1 = 1
X2 = 1
Y2 = 9
Line (X1, Y1)-(X2, Y2)
AlfaG = 60
BetaG = 70
AlfaR = AlfaG * PI / 180
BetaR = BetaG * PI / 180
X3 = X1 + 20 * Sin(AlfaR)
Y3 = Y1 + 20 * Cos(AlfaR)
Line (X1, Y1)-(X3, Y3)
X4 = X2 + 20 * Sin(BetaR)
Y4 = Y2 - 20 * Cos(BetaR)
Line (X2, Y2)-(X4, Y4)
X = 0
Y = Functie2(X, X2, Y2, X4, Y4) - Functie1(X, X1, Y1, X3, Y3)
Do While Y > 0
X = X + 0.1
Y = Functie2(X, X2, Y2, X4, Y4) - Functie1(X, X1, Y1, X3, Y3)
Loop
Text3.Text = Str$(X)
Text4.Text = Str$(Functie2(X, X2, Y2, X4, Y4))
End Sub
Private Sub Form_Load()
Scale (0, 10)-(15, 0)
End Sub
Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
Text1.Text = X
Text2.Text = Y
End Sub
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
Text1.Text = X
Text2.Text = Y
End Sub
Private Sub Form_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
Text1.Text = X
Text2.Text = Y
End Sub
Evenimentele (event) sunt actiuni recunoscute de obiecte (controale), (de exemplu, executarea unui click, apasarea unei taste sau o actiune declansata de sistem), pentru care exista cod de raspuns (cod asociat), care va fi executat automat la activarea evenimentului respectiv.
Evenimentele legate de mouse sunt:
- Click() - Recunoaste daca un buton (indiferent care) al mouse-ului a fost apasat si eliberat (indiferent de timpul consumat intre momentul apasarii si cel al eliberarii butonului), dar ca o singura actiune - un click. Nu are parametrii.
- DblClick() - Recunoaste daca un anumit buton al mouse-ului a fost apasat si eliberat de doua ori intr-un interval de timp care nu depaseste o anumita valoare. Nu are parametrii.
- MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) - Apare cand utilizatorul apasa unul dintre butoanele mouse-ului.
- MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single) - Apare cand utilizatorul elibereaza unul dintre butoanele mouse-ului.
- MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) - Apare cand utilizatorul deplaseaza pointer-ul mouse-ului deasupra unui obiect.
Evenimentele MouseDown, MouseUp, MouseMove utilizeaza aceiasi parametri: Button As Integer, Shift As Integer, X As Single, Y As Single. Aceste evenimente functioneaza ca o functie, care returneaza valorile Button, Shift, X si Y.
Parametrul Button este o variabila de tip intreg, prin care evenimentele precizeaza care buton al mouse-ului a fost apasat. Variabila Button este de tip intreg (Integer), mai exact este un camp de biti (o valoare in care fiecare bit reprezinta o stare sau o conditie). Cei mai putin semnificativi biti ai numarului reprezinta butoanele din stanga, dreapta si mijloc, conform figurii urmatoare:
Butonul din stanga
Butonul din dreapta
Butonul din mijloc
|
M |
R |
L |
Nefolositi
Fig. 12.27. Parametrul Button al evenimentelor mouse-ului.
Valoarea implicita a fiecarui bit este 0 (False). Daca nu este apasat nici un buton, valoarea binara a celor trei biti este 000 (0 - in zecimal). Daca este apasat butonul din stanga (L - Left), valoarea binara, sau masca, se modifica in 001 (1 - in zecimal). Valoarea bitului pentru butonul din stanga se schimba din 0 (False) in 1 (True).
Relatia intre masca si butoane este data in tabelul urmator:
Valoare binara |
Valoare zecimala |
Semnificatie |
A fost apasat butonul din stanga. |
||
A fost apasat butonul din dreapta. |
||
A fost apasat butonul din mijloc. |
Evenimentele mouse-ului sunt capabile sa identifice si situatia in care au fost apasate mai multe butoane simultan. De exemplu daca s-au apasat butoanele stanga si dreapta simultan, atunci variabila button returneaza valoarea . Indicele B sau Z precizeaza baza de numeratie (B pentru Binar si Z pentru Zecimal). Relatia completa intre masca si butoane este data in tabelul urmator:
Valoare binara |
Valoare zecimala |
Semnificatie |
Nici un buton nu a fost apasat. |
||
A fost apasat butonul din stanga. |
||
A fost apasat butonul din dreapta. |
||
Au fost apasate butoanele din stanga si din dreapta. |
||
A fost apasat butonul din mijloc. |
||
Au fost apasate butoanele din stanga si din mijloc. |
||
Au fost apasate butoanele din dreapta si din mijloc. |
||
Toate cele trei butoane au fost apasate. |
Apasarea fiecarui buton activeaza catre un eveniment MouseDown si MouseUp. Deci daca se apasa doua butoane se activeaza doua evenimente (cate unul pentru fiecare buton) si fiecare eveniment separat returneaza cate o variabila Button. Cu alte cuvinte, MouseDown si MouseUp recunosc doar apasarea unui singur buton la un moment dat.
Evenimentul MouseMove insa poate fi folosit pentru a testa daca au fost apasate doua butoane sau toate trei.
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
ButtonTest = Button And 7
Select Case ButtonTest
Case 1
Print 'Ati apasat butonul stang.'
Case 2
Print 'Ati apasat butonul drept.'
Case 3
Print 'Ati apasat butonul stang si drept.'
Case 4
Print 'Ati apasat butonul din mijloc.'
Case 5
Print 'Ati apasat butonul stang si din mijloc.'
Case 6
Print 'Ati apasat butonul drept si din mijloc.'
Case 7
Print 'Ati apasat butonul toate trei butoanele.'
End Select
End Sub
Tastele de tip SHIFT sunt: Tastele SHIHT, CTRL si ALT. Evenimentele de mouse si de tastatura folosesc argumentul Shift pentru a determina daca a fost apasata o tasta de tip shift si in ce combinatie. Daca tasta SHIFT este apasata, argumentul shift este egal cu 1; daca tasta CTRL este apasata, shift este 2; daca tasta ALT este apasata, shift este 4. Pentru a determina combinatiile acestor taste se face suma valorilor lor. De exemplu, daca tastele SHIFT si ALT sunt apasate, shift are valoarea 5 (1 + 4).
Ultimii trei biti cel mai putini semnificativi ai lui shift corespund starii tastelor SHIFT, CTRL si ALT, conform figurii urmatoare:
Tasta SHIFT
Tasta CTRL
Tasta ALT
|
A |
C |
S |
Nefolositi
Fig. 12.28. Parametrul Shift al evenimentelor mouse-ului.
Valoare binara |
Valoare zecimala |
Semnificatie |
Nici o tasta de tip Shift nu este apasata. |
||
Tasta SHIFT este apasata. |
||
Tast CTRL este apasata. |
||
Tastele SHIFT si CTRL sunt apasate. |
||
Tasta ALT este apasata. |
||
Tastele SHIFT si ALT sunt apasate. |
||
Tastele CTRL si ALT sunt apasate. |
||
Toate cele trei taste sunt apasate. |
Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
ShiftTest = Shift And 7
Select Case ShiftTest
Case 1
Print 'Ati apasat tasta Shift.'
Case 2
Print 'Ati apasat tasta Ctrl.'
Case 3
Print 'Ati apasat tastele Shift si Ctrl.'
Case 4
Print 'Ati apasat tasta Alt.'
Case 5
Print 'Ati apasat tastele Shift si Alt.'
Case 6
Print 'Ati apasat tastele Ctrl si Alt.'
Case 7
Print 'Ati apasat butonul toate tastel.'
End Select
End Sub
Fig. 12.29. Butoanele programului de desenare.
Dim Linie, Drept, Cerc, Creion, Guma
Dim VX, VY
Private Sub cmdCreion_Click()
Linie = 0
Drept = 0
Cerc = 0
Creion = 1
Guma = 0
frmPlanseta.FillStyle = 0
frmPlanseta.FillColor = RGB(0, 0, 0)
End Sub
Private Sub cmdGuma_Click()
Linie = 0
Drept = 0
Cerc = 0
Creion = 0
Guma = 1
frmPlanseta.FillStyle = 0
frmPlanseta.FillColor = RGB(255, 255, 255)
frmPlanseta.DrawMode = 13
End Sub
Private Sub cmdLinie_Click()
Linie = 1
Drept = 0
Cerc = 0
Creion = 0
Guma = 0
frmPlanseta.FillStyle = 1
End Sub
Private Sub cmdDreptunghi_Click()
Linie = 0
Drept = 1
Cerc = 0
Creion = 0
Guma = 0
frmPlanseta.FillStyle = 1
End Sub
Private Sub cmdCerc_Click()
Linie = 0
Drept = 0
Cerc = 1
Creion = 0
Guma = 0
frmPlanseta.FillStyle = 1
frmPlanseta.FillColor = RGB(0, 0, 0)
frmPlanseta.DrawMode = 13
End Sub
Private Sub cmdSterge_Click()
Cls
End Sub
Private Sub cmdTerminare_Click()
End
End Sub
Private Sub Form_Load()
frmPlanseta.WindowState = 2 'Maximized
frmPlanseta.BackColor = RGB(255, 255, 255)
End Sub
Private Sub form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Button = 1 Then
VX = X
VY = Y
End If
End Sub
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Creion = 1 And Button = 1 Then
Circle (X, Y), 50
End If
If Guma = 1 And Button = 1 Then
Circle (X, Y), 50, RGB(255, 255, 255)
End If
End Sub
Private Sub form_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
Dim Raza As Single
If Button = 1 Then
If Linie = 1 Then
Line (VX, VY)-(X, Y)
End If
If Drept = 1 Then
Line (VX, VY)-(X, Y), , B
End If
If Cerc = 1 Then
Raza = Sqr((VX - X) ^ 2 + (VY - Y) ^ 2)
Circle (VX, VY), Raza
End If
End If
If Button = 2 Then
If Linie = 1 Then
Line (VX, VY)-(X, Y)
End If
If Drept = 1 Then
Line (VX, VY)-(X, Y), , B
End If
If Cerc = 1 Then
Raza = Sqr((VX - X) ^ 2 + (VY - Y) ^ 2)
Circle (VX, VY), Raza
End If
End If
End Sub
Casetele lista (list boxes) si casetele combinate (combo) prezinta o lista de alternative pentru utilizator. Implicit, alternativele sunt afisate vertical intr-o singura coloana sau mai multe. Daca numarul elementelor depaseste spatiul de afisare din lista, sunt atasate automat bare de defilare, utilizatorul putand sa deruleze continutul listei.
Pentru crearea unei casete lista se foloseste obiectul ListBox, iar pentru crearea unei casete combo se foloseste obiectul ComboBox. Casetele combo combina facilitatile unei casete text cu cele ale unei casete lista, permitand utilizatorului efectuarea unei selectii fie prin tastarea textului in caseta combo, fie prin selectarea elementului dorit din lista.
Visual Basic pune la dispozitia programatorilor trei tipuri de casete combo:
- Casete combo drop-down (proprietatea Style = 0);
- Casete combo simple (proprietatea Style = 1);
- Casete lista drop-down (proprietata Style = 2).
Pentru a adaga elemente intr-o lista combo se foloseste metoda AddItem.
caseta.AddItem element[,index]
unde:
- caseta reprezinta numele casetei combo;
- element reprezinta elementul care va fi adagat listei;
- index specifica pozitia unde va fi inserat noul element (0 reprezinta prima pozitie. Daca index lipseste, noul element va fi inserat la sfarsitul listei.) Lista va fi sortata daca proprietatea Sorted este setata la True.
Pentru a inlatura un element dintr-o lista se foloseste metoda RemoveItem, iar pentru a inlatura toate elementele unei liste se foloseste metoda Clear.
caseta.RemoveItem index
caseta.Clear
C. Obtinerea valorii selectiei curente
Pentru a obtine valoarea selectiei curente se foloseste proprietatea Text.
Valoare = caseta.Text
Un element al unei liste poate fi accesat prin intermediul proprietatii List().
Valoare = caseta.List(i)
Proprietatea ListIndex furnizeaza pozitia elementului selectat intr-o lista. ListIndex = 0, reprezinta pozitia primului element din lista. Valoarea ListIndex = -1, este situatia cand nici un element nu este selectat.
Pentru a obtine numarul de elemente dintr-o caseta lista sau caseta combo se foloseste proprietatea ListCount.
n = caseta.ListCount
In practica este necesar de multe ori sa fie efectuate foarte rapid si usor, cu posibilitati de corectii si recalculare diferite calcule statistice. Astfel de calcule sunt de exemplu: sume de n, sume de n patrat, medii aritmetice, medii geometrice, medii armonice, momente de ordinul k, dispersii, abateri medii patratice. In programul care urmeaza se calculeaza numai cateva din aceste valori, suficient pentru a demonstra posibilitatile unui astfel de program.
Dim n, Sum, Sumpatr As Single
Private Sub cmdCalculeaza_Click()
n = Caseta.ListCount
Text1.Text = n
Sum = 0
Sumpatr = 0
For i = 0 To n - 1
Sum = Sum + Caseta.List(i)
Sumpatr = Sumpatr + (Caseta.List(i)) ^ 2
Next i
Text2.Text = Sum
Text3.Text = Sum / n
Text4.Text = Sumpatr
End Sub
Private Sub cmdIntroducere_Click()
Caseta.AddItem Val(Numar.Text)
Numar.Text = ''
End Sub
Private Sub cmdSterge_Click()
Caseta.RemoveItem Caseta.ListIndex
End Sub
Private Sub cmdTerminare_Click()
End
End Sub
Fig. 12.30. Interfata programului de calcul statistic.
Copyright © 2024 - Toate drepturile rezervate