Sunteți pe pagina 1din 49

Introducere n Informatic

Capitolul 12. Limbajul VISUAL BASIC


12.1. Mediul i limbajul de programare VISUAL BASIC 12.1.1. Introducere Limbajul de programare Visual Basic are ca punct de pornire limbajul BASIC, dezvoltat n anul 1962 la Dartmounth College n Statele Unite ale Americii. n anul 1991 apare prima versiune de Visual Basic, Visual Basic 1.0, destinat lansrii de aplicaii n Windows 3. n anul 1992 este lansat Visual Basic 2.0, iar n anul 1993 apare pe pia Visual Basic 3.0 n dou versiuni: Standard i Profesional. Aceast versiune conine o serie de mbuntiri fa de versiunile precedente, fiind incluse componente nativa pentru gestiunea bazelor de date Access 1.0, 1.1 i 2.0 (motorul JET, Controlul DATA, suport ODBC pentru alte SGBDuri). Sunt incluse de asemenea controale pe 16 biti ( VBX). Visual Basic 4.0 este lansat n anul 1995 n trei versiunii: Standard, Professional i Enterprise. Sunt incluse controale pe 32 biti (OCX), iar pentru pstrarea compatibilitii cu versiunea precedent de Visual Basic sunt incluse i controlare VBX pe 16 bii. n 1996 este lansat versiunea 5.0 din Visual Basic pe 32 de bii, iar n 1998 apare Visual Basic 6.0 . 12.1.2 Modul de lucru bazat pe evenimente Se impun astfel cteva precizri n privina funcionrii mediului Windows, datorit faptului c Visual Basic este un mediu de dezvoltare a aplicaiilor sub Windows. Astfel o versiune simplificat a funcionrii mediului Windows implic trei concepte cheie: ferestre, evenimente i mesaje. Fereastra poate fi privit ca o zon dreptunghiular mpreun cu marginile sale. Exist mai multe tipuri de ferestre: o fereastr de tip Explorer n Windows 95, o fereastr document n cadrul editorului de texte sau o caset de dialog. Evenimentele pot aprea datorit aciunilor utilizatorilor (un click de mouse, apsarea unei taste), aciunii unei alte ferestre sau datorit controlului prin program. Ori de cte ori survine un eveniment, acesta genereaz un mesaj care este trimis sistemului de operare. Sistemul de operare proceseaz mesajul i-l transmite celorlalte ferestre. Fiecare fereastr poate atunci s execute aciunea corespunztoare, care trateaz acel tip de mesaj, bazndu-se pe instruciunile proprii de lucru.

241

Introducere n Informatic

n aplicaiile procedurale, aplicaia nsi decide care poriuni din cod se execut la un moment dat i n ce ordine. Execuia pornete de la prima linie de cod pn la ultima i apeleaz procedurile pe msur ce este nevoie de ele. ntr-o aplicaie bazat pe evenimente, codul nu urmrete o aplicaie predeterminat (de la prima linie de cod pn la ultima), ci execut diversele proceduri i linii de cod ca rspuns la evenimente. Evenimentele pot fi declanate de aciunile utilizatorilor, de aplicaia nsi sau de mesaje ale sistemului sau altor aplicaii. Secvena n care apar aceste evenimente determin secvena n care se execut codul, ceea ce nseamn c de fiecare dat cnd aplicaia se execut, el va urma o alt cale. Astfel prin modelul de lucru bazat pe evenimente, datorit faptului c nu se tie dinainte secvena de apariia a evenimentelor, se fac anumite presupuneri cu privire la acestea i ca urmare anumite controale (butoane de comand, casete cu text etc.) vor fi dup caz dezactivate sau activate, restrngnd astfel aria erorilor pe care le poate genera utilizatorul n ne cunotin de cauz. 12.1.3 Elemente ale mediului de lucru Visual Basic 6.0 Interfaa mediului integrat de dezvoltare la pornirea pentru prima dat este:

Fig. 12.1. Mediul Visual Basic

242

Introducere n Informatic

Procesul de dezvoltare a aplicaiilor tradiionale poate fi mprit n trei etape distincte: scrierea, compilarea i testarea codului. Mediul Visual Basic abordeaz interactiv dezvoltarea codului, ne fcnd o distincie net ntre cele trei etape. Astfel Visual Basic interpreteaz codul pe msur ce este introdus de la tastatur, evideniind orice greeal sintactic i semantic. De asemenea, Visual Basic compileaz parial codul, pe msur ce acesta este introdus. Mediul de lucru Visual Basic este numit mediu integrat de dezvoltare (IDE), deoarece el integreaz numeroase funcii diferite cum ar fi proiectarea, editarea de text, compilarea i depanarea n cadrul unui mediu comun.

Fig. 12.2. Elementele mediului Visual Basic Astfel mediul de programare Visual Basic este format din urmtoarele elemente: 1. Fereastra ToolBox Furnizeaz o serie de instrumente folosite n timpul realizrii unei aplicaii n Visual Basic, pentru a plasa controalele pe formular. Pe lng configuraia implicit, se mai pot aduga controale selectnd AddTab din meniul contextual i adugnd controale la seciunea rezultat. Putem astfel

243

Introducere n Informatic

enumera ca exemple de controale: Controlul Label, Controlul TextBox, Controlul Data, Controlul Frame, Controlul Command etc.

2. Bara cu instrumente Aceast bar furnizeaz acces rapid la comenzile des folosite n mediul de programare. Dac se execut un click pe un buton din bara de instrumente se va lansa n execuie operaia reprezentat de acel buton. Bara cu instrumente standard este afiat n mod implicit la intrarea n mediul de programare, dar ea poate fi particularizat de ctre utilizator prin adugarea sau tergerea de butoane cu ajutorul comenzi ToolBars din meniul View. 3. Fereastra Project Explorer Aceast fereastr afieaz elementele (formulare, module) din cadrul proiectului curent. Un proiect este o colecie de fiiere care formeaz o aplicaie. Exist urmtoarele tipuri de fiiere: - Forme (.frm) - Cod (.bas) - Clas (.cls) - Componente (.vbx, .ocx) - Resurse i Rapoarte

244

Introducere n Informatic

4. Fereastra Properties Afieaz valorile proprietilor pentru formularul sau controlul selectat. O proprietate este o caracteristic a unui obiect, aa cum sunt dimensiunea, culoarea sau fontul. La proiectare, se pot modifica proprietile controlului sau formularului prin setarea valorii corespunztoare din aceast fereastr. Se activeaz cu tasta F4 sau din meniu View sub meniul PropertiesWindow. 5. Utilitarul Object Browser Utilitarul Object Browser afieaz valorile proprietilor pentru a fi utilizate n cadrul proiectului. Ofer de asemenea, o cale simpl de a naviga prin codul aplicaiei sau a formularului. Se pot examina obiecte din Visual Basic i din alte aplicaii, i se pot vedea metodele i proprietile disponibile pentru aceste obiecte, putndu-se copia de asemenea coduri de proceduri ntre aplicaii. 6. Fereastra Form Designer Ocup partea central i cea mai mare a suprafeei mediului de lucru Visual Basic. Fereastra se poate personaliza pentru a proiecta interfaa aplicaiei. Se poate aduga pe suprafaa ei diferite tipuri de controale, grafic i imagini pentru a crea o interfaa cu utilizatorul ct mai

245

Introducere n Informatic

plcut. Fiecare formular existent n aplicaie are propria fereastr de tip Designer. 7. Fereastra Code Editor Este folosit ca editor de texte pentru a introduce codul aplicaiei. Fiecare formular sau modul de cod din cadrul aplicaiei are propria fereastr de editare a codului. n cadrul ferestrei se pot declara variabile, funcii proceduri i evenimente asociate obiectelor. 8. Fereastra Form Layout Fereastra Form Layout este o fereastr pentru aspectul formularului, permind poziionarea formularelor n cadrul aplicaiei, folosindu-se o mic reprezentare pe ecran. Se poate observa astfel aspectul formularului la diferite rezoluii ale ecranului precum i poziionarea acestuia pe ecran. 9. Utilitarul Menu Editor Cu ajutorul acestui utilitar se pot edita meniuri. tiut fiind faptul c n orice aplicaie de sub Windows, meniurile sunt o parte esenial, care nu lipsete n nici o aplicaie simpl sau complex, necesitatea unui editor de meniuri ntr-un mediu complex de programare precum Visual Basic este stringent. Cu ajutorul acestui editor se pot crea meniuri, sub meniuri, meniuri popup, controale de meniuri i submeniuri i se pot stabili scurtturi pentru opiunile de meniu.

246

Introducere n Informatic

Utilizarea editorului fiind foarte simpl este accesibil oricrui utilizator al mediului Visual Basic. Editorul de meniuri se pornete din meniul Tools\MenuEditor. 12.1.4 Tipuri de interfee pentru dezvoltarea aplicaiilor n mediul integrat de programare Visual Basic sunt disponibile dou stiluri diferite pentru interfa: interfa pentru un singur document (SDI) i interfa multidocument (MDI). Alegnd interfaa pentru un singur document (SDI) toate formularele aplicaiei create n mediul de dezvoltare Visual Basic pot fi mutate dup dorin pe ecran, ele rmnnd deasupra celorlalte formulare. Nu este posibil deschiderea simultan a dou ferestre i comutarea ntre ele . Cu alte cuvinte, se poate lucra doar cu un singur formular. Pentru a lucra cu altul, nu este posibil micorarea acestuia i ncrcarea celuilalt formular. Dac se alege interfaa MDI, toate formularele aplicaiei sunt coninute ntr-o unic fereastr-printe. O aplicaie MDI permite utilizatorului afiarea mai multor documente n acelai timp, fiecare document fiind afiat n propria fereastr. Fiecare fereastr individual este limitat ca spaiu la zona ferestrei printe. La minimizarea programului, toate ferestrele document sunt i ele minimizate, doar pictograma ferestrei printe fiind ceea care apare pe bara de taskuri. Un formular copil este un formular obinuit care are valoare proprietii MDIChild egal cu True. Aplicaia poate include numeroase formulare MDI copil, similare sau diferite. Atunci cnd un formular copil este minimizat, pictograma sa apare n spaiul de lucru al formularului MDI printe i nu pe bara de taskuri. 12.1.5 Structura unui proiect n Visual Basic Fiierul proiect este o list a tuturor celorlalte fiiere i obiecte asociate proiectului, precum i cu informaiile despre opiunile de mediu fixate de ctre utilizator. Aceste informaii sunt actualizate de fiecare dat cnd este salvat proiectul. Toate fiierele i proiectele pot fi partajate i de alte proiecte. O list a tuturor fiierelor din proiect este cuprins n cadrul ferestre Project Explorer. ntr-un proiect pot fi incluse urmtoarele tipuri de fiiere i obiecte: a. Module formular Modulele formular (cu extensia .frm) conin descrieri textuale ale formularului i controalelor sale, inclusiv valorile atribuite proprietilor. Ele pot conine de asemenea declaraii de constante, variabile i proceduri

247

Introducere n Informatic

externe, toate la nivelul formularului, proceduri eveniment i proceduri generale. b. Module clas Modulele clas, au extensia .cls sunt analoage modulelor formular, doar c nu posed o interfa vizibil cu utilizatorul. Modulele clas pot fi folosite pentru a crea propriile obiecte, inclusiv codul pentru metode i proprieti. c. Module standard Modulele standard (extensie .bas) cuprind declaraii de tipuri, constante, variabile, proceduri externe, toate fiind sau publice sau la nivelul modulului, i proceduri publice. d. Fiiere de resurse Fiierele de resurse conin (extensie .res) conin imagini bitmap, iruri de caractere, precum i alte date pe care le putei schimba fr a mai modifica i codul. Un proiect nu poate cuprinde dect un fiier de resurse. e. Documente ActiveX Documentele ActiveX (extensie .dob) seamn cu formularele, numai c pot fi afiate ntr-un browser de Internet, precum Internet Explorer. COMPONENTE n plus fa de fiiere i module, la proiect mai pot fi adugate i alte tipuri de componente: 1. Controale ActiveX Controalele ActiveX au extensia .ocx i sunt controale opionale care pot fi adugate la caseta cu instrumente i folosite n cadrul formularelor. Se pot crea propriile controale folosind ediiile Professional i Enterprise de Visual Basic. 2. Obiecte inserabile Obiectele inserabile, cum ar fi de exemplu obiectul Microsoft Excel Worksheet, sunt componente care pot fi folosite la construirea unor soluii integrate, care poate conine date n diverse formate, precum foi de calcul tabelar, imagini bitmap, create fiecare de aplicaii diferite.

248

Introducere n Informatic

3. Referine Se pot aduga referine la componente ActiveX externe care ar putea fi folosite de aplicaie. Se pot atribui referine folosind caseta de dialog References, la care se poate ajunge din meniul Project\References. 4. Controale standard Controalele standard sunt furnizate de Visual Basic. Ele sunt incluse ntotdeauna n caseta cu instrumente, spre deosebire de controalele ActiveX i obiectele inserabile, care pot fi adugate sau eliminate la caseta cu instrumente. 12.1.6 Baze de date n Visual Basic n pachetul Visual Basic 6.0 este inclus motorul pentru baze de date Microsoft Jet, care ofer posibilitatea de a accede la mai multe categorii de baze de date cum ar fi: baze de date Microsoft Access, baze de date dBASE, baze de date FoxPro, baze de date Paradox, baze de date Btrieve, precum i orice categorie de baz de date care include suport pentru standardul ODBC (Open Database Connectivity). Pentru lucrul cu bazele de date, Visual Basic disupune de dou tehnici principale: controlul Data i obiectele de acces la date. 12.1.6.1 Accesul la baze de date folosind controlul Data Obiectul control Data din Visual Basic mpreun cu alte controale asociate datelor asigur parcurgerea nregistrrilor ntr-o baz de date compatibil. Pentru a se asigura legtura dintre controlul Data i baza de date, trebuie stabilite dou proprieti ale acestuia : DatabaseName (numele bazei de date), specific baza de date la care va fi conectat controlul, i RecordSource (surs nregistrri), care desemneaz tabelul din cadrul bazei de date. Controlul Data pe lng faptul c asigur legtura ntre formular i baza de date, mai pune la dispoziia utilizatorului instrumente pentru navigarea n baza de date. Astfel butoanele Next Record (nregistrarea urmtoare) i Previous Record (nregistrarea anterioar) determin deplasarea prin baza de date cu cte o nregistrarea. Butoanele First Record (prima nregistrare) i Last Record (ultima nregistrare) determin o deplasare direct la nceputul sau la sfritul bazei de date.

249

Introducere n Informatic

12.1.6.2. Accesul la bazele de date folosind obiectele de acces la date (DAO) Cu toate c, controlul Data permite accesul la bazele de date fr a scrie nici o linie de cod, el prezint limite semnificative. Astfel nu se pot folosi indexuri cu controale asociate i nu se pot face referiri la setul de nregistrri al controlului Data, dac formularul aferent controlului Data nu este ncrcat.

Fig. 12.10. Exemplu de Controlul Data Visual Basic pune i motorul Microsoft Jet care asigur utilizatorului un set variabil de obiecte de acces la date, care ofer acestuia un control complet asupra bazei de date, asigurnd faciliti de manipulare a datelor mult superioare controlului Data. DAO pune la dispoziia utilizatorului obiectul Recordset, iar pentru inseria, actualizarea i tergerea nregistrrilor disponibile, acelai obiect Recordset mpreun cu metoda Execute. nainte de a folosi DAO este necesar s fie deschis o baz de date n spaiul de lucru prestabilit. Aceasta se face prin apelarea metodei OpenDatabase. 12.1.7 Rapoarte n Visual Basic 6.0 n Visual Basic 6 exist dou metode de dezvoltare a rapoartelor. Astfel rapoartele pot fi create n cadrul mediului de dezvoltare Visual Basic folosind Micosoft Data Report sau prin intermediul versiunii Crystal Reports incluse n Visual Basic, prin accesul la fiierul RPT al aplicaiei Crystal Reports prin intermediul controlului ActiveX Crystal Reports.

250

Introducere n Informatic

DBEngine Spaii de lucru Baze de date Definiii tabele Cmpuri Indexuri Definiii interogri Parametri Cmpuri Seturi de nregistrri Cmpuri Relaii Cmpuri Containere Documente
Fig. 12.11. Ierarhia obiectelor DAO Astfel folosind Microsoft Data Reports se poate aduga un raport direct ntr-un proiect Visual Basic. Raportul poate fi proiectat, salvat i compilat ca un proiect de o manier similar unui formular sau unei clase. Cu Microsoft Data Reports, un raport poate fi afiat pe ecran n forma unei ferestre Print Preview. Din aceast fereastr utilizatorul poate tipri raportul la imprimant sau poate fi exportat ntr-un fiier fr nici un fel de intervenie din partea utilizatorului, folosind linii de program Visual Basic. Aplicaia Crystal Reports este inclus n Visual Basic 6. Ea include Crystal Reports Designer, un control ActiveX i bibliotecile de rulare necesare. Aplicaia Crystal Reports funcioneaz ca proces separat de

Utilizator Grupur

Grupuri Utilizatori

251

Introducere n Informatic

Visual Basic i pstreaz definiia raportului ntr-un fiier separat, cu extensia RPT. 12.1.8 Visual Data Manager Visual Data Manager este o aplicaie care poate funciona independent de mediul Visual Basic, dar care este inclus n mediul Visual Basic. Cu ajutorul acestei aplicaii se pot crea baze de date n diverse formate (Access, FoxPro, dBase etc), se pot deschide baze de date. Visual Data Manager dei nu include facilitile din Access permite totui crearea de baze de date, de tabele, de indeci, precum i introduceri de date n tabele. Visual Data Manager se acceseaz din meniul Add-Ins submeniul Visual Data Manager.

Fig. 12.12. Fereastra Visual Data Manager

12.2. Exemple de aplicaii simple n VISUAL BASIC


12.2.1. Prima aplicaie Visual Basic S presupunem c vrem s realizm aplicaia apl.vbp care s conin un singur formular, numit apl.frm (figura 12.13.).

Fig. 12.13. Fereastra Project (Proiectul1) a primei aplicaii apl.vbp

252

Introducere n Informatic

Formularul acestei aplicaii trebuie s conin: n bara de titlu numele Prima aplicaie n Visual Basic, dou casete de text una coninnd un text pe dou linii i alta coninnd tipul procesorului i sistemul de operare (cnd nu-i selectat nimic s fie consemnat cazul), butoane radio pentru setarea procesorului si sistemului de operare, casete check pentru afiarea textului bold i italic, o list cu oraele judeului Alba i o list derulant cu municipiile aceluiai jude, confirmarea se face printr-un buton de afiare (Fig.12.14.).

Fig.12.14. Formatul iniial al Formularului apl.frm

Fig.12.15. Formularul dup selectarea opiunii bold, a procesorului i a sistemului de operare

253

Introducere n Informatic

Alegerea opiunii Bold, a procesorului i a sistemului de operare si confirmarea opiunilor alese prin efectuarea unui click pe butonul Afieaz va afia figura 12.15. n acest ultim caz, dac vom efectua un click pe butonul cu sgeat al listei derulante de municipii vom ajunge la afiarea ferestrei din figura 12.16. Efectul cumulativ al caracterelor bold i italic este prezentat n figura 12.17.

Fig.12.16. Formularul cu lista derulant

Fig. 12.17. Efectul cumulativ al opiunilor Bold i Italic

254

Introducere n Informatic

Sursa aplicaiei este:


Dim a$ Dim b$ Private Sub cmd1_Click() Txt1.FontName = "MS Sans Serif" Txt1.Text = " Aici sunt doua linii" _ & vbCrLf & "intr-o caseta de dialog" If Chk1.Value = 1 Then i = 1 If Chk2.Value = 1 Then i = 2 If Chk1.Value = 1 And Chk2.Value = 1 Then i = 3 Select Case i Case 0 Txt1.FontName = "MS Sans Txt1.Font.Bold = False Txt1.Font.Italic = False Lst1.FontName = "MS Sans Lst1.Font.Bold = False Lst1.Font.Italic = False Cmb1.FontName = "MS Sans Cmb1.Font.Bold = False Cmb1.Font.Italic = False Txt2.FontName = "MS Sans Txt2.Font.Bold = False Txt2.Font.Italic = False Case 1 Txt1.FontItalic = False Txt1.FontBold = True Txt2.FontItalic = False Txt2.FontBold = True Cmb1.FontItalic = False Cmb1.FontBold = True Lst1.FontItalic = False Lst1.FontBold = True Case 2 Txt1.FontBold = False Txt1.FontItalic = True Txt2.FontBold = False Txt2.FontItalic = True Lst1.FontBold = False Lst1.FontItalic = True Cmb1.FontBold = False Cmb1.FontItalic = True Case 3

Serif" Serif" Serif" Serif"

255

Introducere n Informatic Txt1.Font.Bold = Txt1.Font.Italic Txt2.Font.Bold = Txt2.Font.Italic Lst1.Font.Bold = Lst1.Font.Italic Cmb1.Font.Bold = Cmb1.Font.Italic End Select End Sub True = True True = True True = True True = True

Private Sub cmdClose_Click() End End Sub Private Sub Form_Load() a$ = "Procesor:neselectat" b$ = "Sistem de operare:neselectat" Txt1.Text = "" Txt2.Text = "" Lst1.AddItem "Abrud" Lst1.AddItem "Cmpeni" Lst1.AddItem "Cugir" Lst1.AddItem "Ocna Mure" Lst1.AddItem "Teiu" Lst1.AddItem "Zlatna" Cmb1.AddItem "Alba Iulia" Cmb1.AddItem "Aiud" Cmb1.AddItem "Blaj" Cmb1.AddItem "Sebes" Txt2.Text = a$ & vbCrLf & b$ End Sub Private Sub Opt1_Click() a$ = "Procesor :486" Txt2.Text = a$ & vbCrLf & b$ End Sub Private Sub Opt2_Click() a$ = "Procesor :Pentium" Txt2.Text = a$ & vbCrLf & b$ End Sub Private Sub Opt3_Click() a$ = "Procesor :Pentium PRO" Txt2.Text = a$ & vbCrLf & b$ End Sub

256

Introducere n Informatic

Private Sub Opt4_Click() b$ = "Sistem de operare:Windows 95" Txt2.Text = a$ & vbCrLf & b$ End Sub Private Sub Opt5_Click() b$ = "Sistem de operare:Windows 98" Txt2.Text = a$ & vbCrLf & b$ End Sub Private Sub Opt6_Click() b$ = "Sistem de operare:Windows NT" Txt2.Text = a$ & vbCrLf & b$ End Sub

Observaii: 1. Pentru verificarea csuei bifate, se folosete proprietatea Value a csuei (checked boxes). Codul pentru acesta a fost scris n evenimentul click al butonului Afiare, iar n acest caz din momentul n care se apas pe acest buton se va face att verificarea, ct i modificrile fonturilor. Acest lucru se poate face chiar i n cazul realizrii evenimentului click al fiecrei csue n parte, lucru care va modifica fonturile imediat ce va fi selectat csua, dar nu se poate face verificarea cazului n care ambele csue au fost bifate, deci nu exist posibilitatea de a modifica fonturile n Bold i Italic simultan. 2. Pentru schimbarea fonturilor textelor ce vor aprea n csuele text din aceasta form s-a folosit structura Select Case (se putea folosi chiar i structura If..Then..Else) n acelai eveniment click al butonului Afieaz, deoarece aveam obinute i valorile proprietii Value al butoanelor Checked, unde n funcie de csua selectat, setrile pentru fonturile textului vor fi modificate (cu ajutorul proprietii Font, proprietate modificat n cod). 3. S-a iniializat proprietatea Font a csuelor de tip text cu fontul "MS Sans Serif" n momentul n care se apas pe butonul Afieaz, iar ulterior s-a schimbat proprietatea n funcie de opiunea butoanelor bifate. Dac nu se face iniializarea nainte, atunci dup ce se fac anumite selecii ale butoanelor se vor afia, iar ulterior dorim s deselectm ambele butoane, acest lucru nu se va mai afia textul ca fiind de tip normal deoarece nu va avea la ce valoare s se ntoarc (valoarea proprietii Font va fi valoarea ultimei selecii a butoanelor).

257

Introducere n Informatic

4. Pentru afiarea n csua Txt2 a tipului de procesor i a sistemului de operare selectat, una dintre posibiliti ar fi declararea a dou variabilele de tip string (ir de caractere) a$ i b$, n zona declaraiilor de variabile n cod, ele urmnd s ia valori n funcie de selecia fcut n zona frame (cadru) prin intermediul butoanelor radio (selectarea tipului de procesor- variabila a$, respectiv selectarea sistemului de operare- variabila b$), iar la apsarea butonului Afieaz s apar n csua de text Txt2 att tipul procesorului ct i sistemul de operare. Un inconvenient ar fi fost ca nainte ct i dup ce s-a fcut selectarea, csua de text nu va conine nimic pn ce nu va fi apsat butonul Afieaz. Acest inconvenient a fost nlturat deoarece afiarea n csua de text se fcea atunci cnd exist evenimentul Mouse move (micarea mouse-lui), eveniment care declana afiarea n csua text Txt2 a irurilor a$ i b$ (afiare pe dou rnduri). Dar nici aceast modificare nu este optim, deoarece dac se selecteaz una din opiuni (adic se selecteaz un buton radio), iar mouse-ul nu se mic, textul nu va fi afiat (pn cnd se mic mouse-ul). Aa c, versiunea final va modifica textul din csua Txt2 n momentul cnd exist evenimentul click pe unul dintre butoanele radio, eveniment care va modifica i valoarea variabilelor a$ i b$. 12.2.2. Aplicaia Visual Tutorial 2000 n capitolul 8, subcapitolul 8.1. care trata lucrul n spaii grafice, unde am introdus principalele noiuni de lucru cu sistemul de operare Windows, am promis c vom da sursele aplicaiei Visual Tutorial 2000 mpreun cu structura Project i denumirea formularelor utilizate. O facem acum pe post de al doilea exemplu. Sursa aplicaiei VISUAL TUTORIAL 2000 este:
Option Explicit Const VBPath = "file://c:\Visual Tutorial 2000\" Private Sub mnuMeniuri_Click() End Sub Private Sub mnuAsistentaDespre_Click() frmDespre.Show End Sub Private Sub mnuAsistentaDocument_Click() frmDoc.Show

258

Introducere n Informatic End Sub Private Sub mnuAsistentaHTML_Click() Shell("C:\Program Files\Internet Explorer\Iexplore.exe") End Sub

Private Sub mnuBareOrizontale_Click() frmBareOrizontale.Show End Sub Private Sub mnuBareVerticale_Click() frmBareVerticale.Show End Sub Private Sub mnuButoaneOptiune_Click()

259

Introducere n Informatic frmButoaneOptiuni.Show End Sub Private Sub mnuButoaneOrizontale_Click() frmButoaneOrizontale.Show End Sub Private Sub mnuButoaneValidare_Click() frmButoaneValidare.Show End Sub Private Sub mnuButoaneVerticale_Click() frmButoaneVerticale.Show End Sub Private Sub mnuCaseteDialogConditie_Click() frmDialog.Show End Sub Private Sub mnuCaseteDialogDespre_Click() frmAbout.Show End Sub Private Sub mnuCaseteDialogLogin_Click() frmLogin.Show End Sub Private Sub mnuCaseteDialogOptiuni_Click() frmOptions.Show End Sub Private Sub mnuCasteListeCombinate_Click() frmListaCombinata.Show End Sub Private Sub mnuCasteListeElemente_Click() frmListaElemente.Show End Sub Private Sub mnuCasteListeFisiere_Click() frmListaFisiereDirectoare.Show End Sub Private Sub mnuDragDrop_Click() End Sub Private Sub mnuGraficaFonturi_Click() frmListaFisiereText.Show End Sub

260

Introducere n Informatic Private Sub mnuGraficaVizualizare_Click() frmImagini.Show End Sub Private Sub mnuIesire_Click() frmIesire.Show End Sub Private Sub mnuMeniu_Click() frmMeniu.Show End Sub Private Sub mnuSlider_Click() frmSlider.Show End Sub

12.2.3. Alte aplicaii A. nc puin teorie Folosirea casetelor de dialog predefinite InputBox Folosirea funciei InputBox genereaz afiarea unei casete de dialog care solicit utilizatorului introducerea unui ir sau Variant. Sintaxa funciei este: InputBox[$](prompt[,[titlu][,[implicit][,xpos,ypos]]]), unde: - prompt este o expresie ir de caractere care afieaz un mesaj n caset. - titlu este o expresie ir de caractere afiat n bara de titlu a casetei de dialog; dac este omis, caseta de dialog nu va avea titlu. - implicit este o expresie ir de caractere afiat n caseta text ca rspuns implicit dac utilizatorul nu furnizeaz alt rspuns. - xpos i ypos sunt expresii numerice i specific, n twips, (1 twip = 1 / 1440 inch = 1 / 567 centimetri) distana orizontal a marginii stngi a casetei de dialog fa de marginea stng a ecranului, respectiv distana vertical fa de marginea superioar a ecranului. Folosirea casetelor de dialog predefinite MsgBox Instruciunea MsgBox este folosit pentru a afia scurte mesaje referitoare la anumite erori care au intervenit la rularea aplicaiei, avertismente sau alerte. Sintaxa funciei MsgBox este: MsgBox (mesaj[, [tip][, titlu]]), unde: - mesaj este o expresie ir de caractere care va fi afiat n caseta de dialog.

261

Introducere n Informatic

titlu este o expresie ir de caractere care va fi afiat n bara de titlu a casetei de dialog. tip este o expresie numeric opional reprezentnd suma valorilor care specific numrul i tipul butoanelor care vor fi afiate, stilul pictogramei afiate, butonul implicit i modalitatea casetei. B. Calculul funciei SIN(X)

Un program foarte simplu pentru calculul funciei SIN(X) este urmtorul: Se creeaz o form. Aceasta se creeaz automat n momentul n care se n Visual Basic se cere deschiderea unui nou proiect (n meniu se alege opiunea File -> New Project). Apoi n fereastra New Project se alege Standard.EXE i se face click pe butonul OK.

Fig. 12.18. Fereastra de deschiderea a unui proiect nou n Visual Basic. Pe ecran se va deschide un proiect nou care va conine o form. Se va efectua un click dreapta n form pentru deschiderea unui meniu contextual. Din meniul contextual se alege opiunea View Code, pentru vizualizarea ferestrei de introducere a codului. n partea de sus a ferestrei sunt afiate dou liste: lista de obiecte din proiect i pentru fiecare obiect, lista din dreapta conine toate evenimentele care se pot ataa obiectului respectiv. Din prima list se alege obiectul Form, iar din a doua evenimentul click. n fereastr vor fi afiate prima i ultima linie din procedura ataat evenimentului click pe forma numit Form.

262

Introducere n Informatic

Fig. 12.19. Scrierea codului pentru evenimentul click pe obiectul Form. ntre cele dou linii din fereastr se scrie codul:
Dim Raspuns, ValImpl, Mesaj, Titlu 'Declarare variabile Mesaj="Argumentulfunctiei trigonometrice" 'Setare prompt Titlu = "Functii trigonometrice" 'Setare titlu ValImpl = 0 'Valoare implicita Raspuns=InputBox(Mesaj,Titlu,ValImpl)'Citirea mesajului Pi = 4 * Atn(1) Raspuns = Raspuns * Pi / 200 Rezultat = Sin(Raspuns) 'Calcul MsgBox (Rezultat), , "SIN (X)" End

Trebuie precizat c Visual Basic folosete ca unitate de msur pentru unghiuri tot radianul ca i produsul Excel. Pentru programul nostru se consider c valoarea unghiului este dat n grade centesimale (un semicerc are Pi radiani sau 200 grade centesimale). Programul se lanseaz n execuie alegnd din meniu opiunea: Run -> Start. C. Funcii matematice i derivate Val Function - Returneaz valoarea numeric a unui ir de caractere. Abs Function - Returneaz valoarea absolut a unui numr. Atn Function - Returneaz arctangenta unui numr (n radiani). Cos Function - Returneaz funcia cos (unghiul este dat n radiani). Exp Function - Returneaz e (baza logaritmului natural) la puterea argumentului. Constanta e este aproximativ 2,718282. Functia Exp este complementul aciunii funciei Log, fiind numit i antilogaritm. Log Function - Returneaz logaritmul natural dintr-un numr. Logaritm n baza n poate fi calculat pentru orice numr x prin divizarea logaritmului natural al lui x prin logaritmul natural din n: Log ( X ) Log n ( X ) = Log ( n ) Ecuaia 12.1. Formula de transformare a bazei logaritmilor.

263

Introducere n Informatic

Rnd Function - returneaz un numr aleator ntre 0 i 1. Sgn Function - Returneaz un ntreg indicnd semnul numrului, dup cum urmeaz:

1, pt. X < 0 Sgn( X ) = 0, pt. X = 0 1, pt. X > 0


Ecuaia 12.2. Funcia Signum. Sin Function - Returneaz funcia sin (unghiul este dat n radiani). Sqr Function - Returneaz funcia radical. Tan Function - Returneaz funcia tangent (unghiul este dat n radiani). Pentru calculul celorlalte funcii trigonometrice trebuie folosite formule de transformare cunoscute din matematic. D. Program cu trei butoane Visual Basic este un limbaj care folosete tehnici moderne de programare ca Programare Orientat pe Obiecte i Programare Condus de Evenimente. Un program simplu n Visual Basic presupune parcurgerea a trei pai: - realizarea interfeei (crearea obiectelor); - stabilirea proprietilor obiectelor; - scrierea codului. Pentru a exemplifica aceti pai realizm urmtorul program. Program este o form cu trei etichete, dou linii i trei butoane. Fiecare buton la executarea evenimentului click asupra lui afieaz cte un mesaj. Interfaa programului va arta astfel:

264

Introducere n Informatic

Fig. 12.20. Interfaa programului cu trei butoane.


Nr. crt. 1. 2. 3. 4. 5. 6. 7. 8. 9.

Tip obiect
Form Label Label Label Line Line CommandButton CommandButton CommandButton

Nume obiect
Formular Label1 Label1 Label1 Line1 Line2 Buton1 Buton1 Buton1

Proprietate
Caption Caption Caption Caption

Valoare proprietate
Trei butoane Prima aplicaie Universitatea Decembrie 1918" Alba Iulia

"1

Caption Caption Caption

Primul Buton Al doilea Buton Al treilea Buton

Tabelul 12.1. Obiectele i proprietile programului cu trei butoane. Codul programului cu trei butoane:
Private Sub Buton1_Click() MsgBox ("A fost apsat Primul Buton"), , "Raspuns" End End Sub Private Sub Buton2_Click() MsgBox ("A fost apsat Al doilea Buton"), , "Raspuns" End End Sub Private Sub Buton3_Click() MsgBox ("A fost apsat Al treilea Buton"), , "Raspuns" End End Sub

La executarea evenimentului click fiecare buton rspunde prin afiarea unui mesaj (MsgBox). E. Calculul sumei a n numere Se dau n numere Ai . S se calculeze suma: S =
n

A
i =1

Pentru rezolvarea problemei parcurgem urmtorii pa i: - stabilirea algoritmului; - ntocmirea schemei logice; - scrierea programului ntr-un limbaj oarecare (de exemplu n pseudocod). E.1. Stabilirea algoritmului S=0 S = S + Ai , pentru i {1, 2, ... n}

265

Introducere n Informatic

266

Introducere n Informatic

Program structurat n pseudocod


Cite te n Pentru i = 1 la n Cite te Ai Sf r it Pentru S = 0 Pentru i = 1 la n S = S + Ai Sf r it Pentru Tip re te S

F. Ecuaia de gradul 1 - Program VB Interfaa

Fig. 12.21. Interfaa programului Ecuaia de gradul 1.

267

Introducere n Informatic

Obiecte i proprieti Nr. crt.


1. 2. 3. 4. 5. 6. 7. 8. 9. 10.

Tip obiect
Form Label Label Label Label TextBox TextBox TextBox CommandBu tton CommandBu tton

Nume obiect
Formular EticTitlu EticA EticB EticSolutie ValA ValB ValX ButonRezolv are ButonRezolv are

Proprie tate
Caption Caption Caption Caption Caption Text Text Text Caption Caption

Valoare proprietate
Ecuatia de gradul I Rezolvarea ecuatiei de gradul I: A * X + B = 0 Valoarea lui A Valoarea lui B Solutia ecuatiei ("") ("") ("") Rezolvare ecuatie ButonTerminare

Tabelul 12.2. Obiectele i proprietile programului Ecuaiei de gradul 1.

Codul:
'Rezolvarea ecuatiei de gradul I ' Toate variabilele sunt de tipul Variant Dim a, b, x Private Sub ButonRezolvare_Click() If Val(ValA.Text) = 0 Then ValX.Text = "" MsgBox "Ecuatie imposibila" Exit Sub End If a = Val(ValA.Text) b = Val(ValB.Text) x = -b / a ValX.Text = x End Sub Private Sub ButonTerminare_Click() End End Sub Private Sub ValA_GotFocus() ValA.Text = "" End Sub Private Sub ValB_GotFocus() ValB.Text = "" End Sub Private Sub ValX_GotFocus() If Val(ValA.Text) = 0 Then

268

Introducere n Informatic ValX.Text = "" MsgBox "Ecuatie imposibila" Exit Sub End If a = Val(ValA.Text) b = Val(ValB.Text) x = -b / a ValX.Text = x End Sub

G. Rezolvarea ecuaiei de gradul II G1.Algoritm Ecuaia este de forma: A X 2 + B X + C = 0 . Se d valoarea parametrului A. A = 0 Ecuaia nu este de gradul II. Se d valoarea parametrilor B i C. Delta = B 2 4 A C Delta < 0 Ecuaia are rdcini complex conjugate. Nu vom dezvolta mai mult aceast ramur. B Delta = 0 X 1 = X 2 = 2 A B B2 4 AC B + B2 4 AC Delta > 0 X 1 = , X2 = 2 A 2 A G2. Codul n Pseudocod
Citete A Dac A = 0 Atunci Afieaz "Ecuaia nu este de gradul 2" Altfel Citete B Citete C Delta = B * B - 4 * A * C Dac Delta > 0 Atunci X1 = (-B + Radical(Delta)) / (2 * A) X2 = (-B - Radical(Delta)) / (2 * A) Afieaz " X1 = " + Str$(X1) + " i X2 = " + Str$(X2) Sfrit Dac Dac Delta = 0 Atunci Afieaz " X1 = X2 = " + Str$(-B / (2 * A)) Sfrit Dac Dac Delta < 0 Atunci Afieaz "Ecuaia are rdcini complex conjugate." Sfrit Dac

269

Introducere n Informatic Sfrit Dac

G.3. Comentarii Instruciunile:


Afieaz " X1 = " + Str$(X1) + " i X2 = " + Str$(X2) Afieaz " X1 = X2 = " + Str$(-B / (2 * A))

folosesc urmtoarele convenii (valabile n Visual Basic): Constantele de tip text (ir, string n VB) sunt ncadrate ntre ghilimele (""); Simbolul + este operatorul de concatenare pentru iruri; Str$(X) convertete valoarea lui X n ir de caractere. H. Interfaa

Fig. 12.22. Interfaa programului ecuaiei de gradul 2. Deci instruciunea:


Afieaz " X1 = " + Str$(X1) + " i X2 = " + Str$(X2)

va afia 4 valori de tip text: Textul: X1 = Valoarea variabilei X1 convertit n text Textul: i X2 = Valoarea variabilei X2 convertit n text

270

Introducere n Informatic

ntregul text fiind afiat pe un singur rnd. i instruciunea:


Afieaz " X1 = X2 = " + Str$(-B / (2 * A))

va afia dou valori de tip text: Textul: X1 = X2 = Valoarea rezultat din calculul +B / (2 * A), convertit n text ntregul text fiind afiat pe un singur rnd. I. Obiecte i proprieti Nr. Tip obiect crt.
1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. Form Label Label Label Label Label TextBox TextBox TextBox TextBox CommandButton CommandButton

Nume obiect
Formular EticTitlu EtichetaA EtichetaB EtichetaC EtichetaX ValoareA ValoareB ValoareC ValoareX ButonCalculeaza ButonTerminare

Proprietat e
Caption Caption Caption Caption Caption Caption Text Text Text Text Caption Caption

Valoare proprietate
Ecuatia de gradul 2 Rezolvarea ecuatiei de gradul 2 Valoarea parametrului A Valoarea parametrului B Valoarea parametrului C Rezultat ("") ("") ("") ("") Calculeaza Terminare

Tabelul 12.3. Proprietile obiectelor programului ecuaiei de gradul 2. J. Codul n Visual Basic
Private Sub ButonCalculeaza_Click() A = Val(ValoareA.Text) If A = 0 Then ValoareX.Text = "Ecuatia nu este de gradul 2" Else B = Val(ValoareB.Text) C = Val(ValoareC.Text) Delta = B * B - 4 * A * C If Delta > 0 Then X1 = (-B + Sqr(Delta)) / (2 * A) X2 = (-B - Sqr(Delta)) / (2 * A) ValoareX.Text="X1=" + Str$(X1) + " si X2 = " + Str$(X2) End If

271

Introducere n Informatic If Delta = 0 Then ValoareX.Text = " X1 = X2 = " + Str$(-B / (2 * A)) End If If Delta < 0 Then ValoareX.Text="Ecuatia are radacini complex conjugate." End If End If End Sub Private Sub ButonTerminare_Click() End End Sub Private Sub ValoareA_Click() ValoareA.Text = "" End Sub Private Sub ValoareB_Click() ValoareB.Text = "" End Sub Private Sub ValoareC_Click() ValoareC.Text = "" End Sub Private Sub ValoareX_Click() ValoareX.Text = "" End Sub

K. Comentarii Procedura:
Private Sub ValoareA_Click() ValoareA.Text = "" End Sub

care se lanseaz la evenimentul Click pe obiectul ValoareA (un obiect de tip TextBox), va atribui valorii (valoare este proprietatea Text a lui TextBox, se scrie TextBox.Text) lui ValoareA, valoarea "", adic o constant text de lungime 0. Procedura este identic pentru ValoareA, ValoareB, ValoareC i ValoareX, pentru iniializarea textului afiat nainte de introducerea datelor. Deci pentru introducere se recomand s se efectueze click pe fiecare TextBox (ValoareA, ValoareB i ValoareC) i dup fiecare click s se introduc valoarea parametrului corespunztor. 12.2.4. Aplicaia: Rezolvarea ecuaiilor prin metoda reprezentrii Metoda presupune ca printr-un procedeu oarecare (geometric, fizic etc.) am stabilit c n intervalul ( X 1, X 2 ) exista o rdcin Xr . Problema care se pune este s realizm un program pe calculator care s gseasc o rdcin Xi , care s aproximeze suficient de bine pe Xr . Altfel spus,

272

Introducere n Informatic

stabilindu-se un

S presupunem f ( X ) = COS ( X ) X . Pentru a gsi un interval n care se gsete o rdcin pornim de la urmtoarea ecuaie: COX ( X ) = X , care este echivalent cu ecuaia f ( X ) = COS ( X ) X = 0 . Trasm graficul celor dou funcii:

f ( Xr ) f ( Xi ) < .

, suficient

de mic, s se gseasc un Xi , astfel nct

y = f 2 ( X ) = COS ( X )

1
/2
(0,0 )

y = f1 ( X ) = X

Soluia ecuaiei: COS(X) - X =soluiei 0 Fig. 12.23. Determinarea intervalului ecuaiei: COS(X) - X = 0
grafic, faptul c ecuaia Y ( X ) = f ( X ) = COS ( X ) X = 0 , are o singur rdcin Xr , n intervalul ( 0, / 2 ) . n afara acestui interval, ecuaia nu mai are alte soluii. Programul realizat trebuie s gseasc o soluie aproximativ Xi , astfel nct f ( Xr ) f ( Xi ) < . A. Codul VB:
Dim X1, X2, Xi As Single Dim Y1, Y2, Yi As Single Dim PAS, EPSILON, PI As Single Function Functie(X) Functie = Cos(X) - X End Function Private Sub ButonCalcul_Click() PI = 4 * Atn(1) X1 = Val(VX1.Text) * PI / 200 X2 = Val(VX2.Text) * PI / 200 PAS = Val(VPAS.Text) * PI / 200

Se

observ

pe

273

Introducere n Informatic EPSILON = Val(VEpsilon.Text) * PI / 200 Y1 = Functie(X1) Xi = X1 Yi = Functie(Xi) Do While PAS > EPSILON Do While Y1 * Yi > 0 Xi = Xi + PAS Yi = Functie(Xi) Loop Xi = Xi - PAS PAS = PAS / 10 Yi = Functie(Xi) Loop Xi = Xi * 200 / PI PAS = PAS * 200 / PI VRezultat.Text = " Xi = " + Str$(Xi) + " si PAS = " + Str$(PAS) End Sub Private Sub ButonTerminare_Click() End End Sub Private Sub VX1_Click() VX1.Text = "" End Sub Private Sub VX2_Click() VX2.Text = "" End Sub Private Sub VPAS_Click() VPAS.Text = "" End Sub Private Sub VEpsilon_Click() VEpsilon.Text = "" End Sub

B. Observaii: - n seciunea General sunt declarate variabilele i funcia Cos(X) - X.


Dim X1, X2, Xi As Single Dim Y1, Y2, Yi As Single Dim PAS, EPSILON, PI As Single Function Functie(X) Functie = Cos(X) - X End Function

- Valorile X1, X2, PAS i EPSILON sunt citite din proprietile Text ale obiectelor TextBox, convertite n radiani:
X1 = Val(VX1.Text) * PI / 200 X2 = Val(VX2.Text) * PI / 200

274

Introducere n Informatic PAS = Val(VPAS.Text) * PI / 200 EPSILON = Val(VEpsilon.Text) * PI / 200

- Rezultatul Xi i PAS sunt afiate n grade centesimale:


Xi = Xi * 200 / PI PAS = PAS * 200 / PI

B. Interfaa

Fig. 12.24. Interfaa programului Metoda reprezentrii. Nr. Tip obiect crt.
1. 2. 3. 4. 5. 6. Form Label Label Label Label Label

Nume obiect
Formular EtichetaTitlu EtichetaX1 EtichetaX2 EtichetaPAS EtichetaEpsilon

Proprietat e
Caption Caption Caption Caption Caption Caption

Valoare proprietate
Rezolvarea ecuaiilor Metoda reprezentarii Valoarea lui X1 Valoarea lui X2 Valoarea pasului Precizia Epsilon

275

Introducere n Informatic 7. 8. 9. 10. 11. 12. 13. 14. Label TextBox TextBox TextBox TextBox TextBox CommandButton CommandButton EtichetaRezultat VX1 VX2 VPAS VEpsilon VRezultat ButonCalcul ButonTerminare Caption Text Text Text Text Text Caption Caption Rezultat "" "" "" "" "" Calculeaza Terminare

12.3. Program pentru trasarea funciei SIN(X)


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 setat pe 2 - Maximized. 12.3.1. Program de triangulaie Programul triangulaie rezolv o problem de calcul a distanei prin triangulaie. Se cunoate o latur a unui triunghi i unghiurile formate de celelalte laturi cu latura cunoscut. Latura cunoscut este dat prin coordonatele punctelor P1 (1,1) i P2 (1,9). Unghiurile sunt: Alfa = 60 i Beta = 70 . Scalarea se face la evenimentul Load (ncrcare) al formei pe coordonatele: Scale (0, 10)-(15, 0)

276

Introducere n Informatic

(0,10) P2 (1,9)

(15,10) P3 (X3,Y3)

P5 (X5,Y5)

60 0
P1 (1, 1) O (0, 0)
Fig. 12.25. Problema de triangulaie. Lungimile segmentelor P1P3 i P2P4 se iau 20 (uniti). - Determinarea coordonatelor punctelor: X 1 = 1 , Y1 = 1 X 2 = 1, Y2 = 9 X 3 = X 1 + 20 * SIN ( Alfa ) , Y 3 = Y 1 + 20 * COS ( Alfa ) X 4 = X 2 + 20 * SIN ( Beta ) , Y 4 = Y 2 20 * COS ( Beta ) - Determinarea ecuaiilor celor dou drepte: Y Y1 Y 3 Y1 = X X1 X 3 X1 Y 3 Y1 f 1( X ) = Y = Y 1 + ( X X 1) * X 3 X1 Y4 Y2 f 2( X ) = Y = Y 2 + ( X X 2 ) * X4 X2 - Punctul de intersecie se obine din condiia:

P4 (X4, Y4)

(15, 0)

f ( X ) = f 2 ( X ) f1 ( X ) = 0

- La evenimentul click pe form programul calculeaz punctul de intersecie al celor dou laturi (afieaz coordonatele X i Y n dou TextBox n partea de sus a ecranului) i deseneaz cele dou segmente P1 P3 i P2 P4. - n partea de jos a ecranului, n dou TextBox la evenimentele mouse-ului (MouseDown, MouseMove i MouseUp) se afieaz

277

Introducere n Informatic

coordonatele mouse-ului. n momentul n care indicatorul mouse-ului se afl pe punctul de intersecie al celor dou drepte informaiile afiate n cele dou TextBox din partea de sus a formei (cele calculate) trebuie s fie egale cu cele afiate n partea de jos a ecranului (coordonatele mouse-ului). A. Crearea interfeei programului de triangulaie

Fig. 12.26. Interfaa programului de triangulaie. B. Codul programului de triangulaie


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, Functie1 = Y1 + (X - X1) End Function Function Functie2(X, X2, Y2, Functie2 = Y2 + (X - X2) End Function Private Sub Form_Click() PI = 4 * Atn(1) X1 = 1

X3, Y3) * (Y3 - Y1) / (X3 - X1) X4, Y4) * (Y4 - Y2) / (X4 - X2)

278

Introducere n Informatic 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

12.3.2. Evenimentele mouse-ului

279

Introducere n Informatic

Evenimentele (event) sunt aciuni recunoscute de obiecte (controale), (de exemplu, executarea unui click, apsarea unei taste sau o aciune declanat de sistem), pentru care exist cod de rspuns (cod asociat), care va fi executat automat la activarea evenimentului respectiv. Evenimentele legate de mouse sunt: - Click() - Recunoate dac un buton (indiferent care) al mouse-ului a fost apsat i eliberat (indiferent de timpul consumat ntre momentul apsrii i cel al eliberrii butonului), dar ca o singur aciune - un click. Nu are parametrii. - DblClick() - Recunoate dac un anumit buton al mouse-ului a fost apsat i eliberat de dou ori ntr-un interval de timp care nu depete o anumit valoare. Nu are parametrii. - MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) - Apare cnd utilizatorul apas unul dintre butoanele mouse-ului. - MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single) - Apare cnd utilizatorul elibereaz unul dintre butoanele mouseului. - MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) - Apare cnd utilizatorul deplaseaz pointer-ul mouse-ului deasupra unui obiect. Evenimentele MouseDown, MouseUp, MouseMove utilizeaz aceiai parametri: Button As Integer, Shift As Integer, X As Single, Y As Single. Aceste evenimente funcioneaz ca o funcie, care returneaz valorile Button, Shift, X i Y. Parametrul Button este o variabil de tip ntreg, prin care evenimentele precizeaz care buton al mouse-ului a fost apsat. Variabila Button este de tip ntreg (Integer), mai exact este un cmp de bii (o valoare n care fiecare bit reprezint o stare sau o condiie). Cei mai puin semnificativi bii ai numrului reprezint butoanele din stnga, dreapta i mijloc, conform figurii urmtoare: Butonul din stnga Butonul din dreapta Butonul din mijloc 0 0 Nefolosii Fig. 12.27. Parametrul Button al evenimentelor mouse-ului. Valoarea implicit a fiecrui bit este 0 (False). Dac nu este apsat nici un buton, valoarea binar a celor trei bii este 000 (0 - n zecimal). Dac este apsat butonul din stnga (L - Left), valoarea binar, sau masca, se 0 0 M R L

280

Introducere n Informatic

modific n 001 (1 - n zecimal). Valoarea bitului pentru butonul din stnga se schimb din 0 (False) n 1 (True). Relaia ntre masc i butoane este dat n tabelul urmtor:
Valoare binar 001 010 100 Valoare zecimal 1 2 4 Semnificaie A fost apsat butonul din stnga. A fost apsat butonul din dreapta. A fost apsat butonul din mijloc.

Evenimentele mouse-ului sunt capabile s identifice i situaia n care au fost apsate mai multe butoane simultan. De exemplu dac s-au apsat butoanele stnga i dreapta simultan, atunci variabila button returneaz valoarea ( 011) B = ( 3) Z . Indicele B sau Z precizeaz baza de numeraie (B pentru Binar i Z pentru Zecimal). Relaia complet ntre masc i butoane este dat n tabelul urmtor:
Valoare binar 000 001 010 011 100 101 110 111 Valoare zecimal 0 1 2 3 4 5 6 7 Semnificaie Nici un buton nu a fost apsat. A fost apsat butonul din stnga. A fost apsat butonul din dreapta. Au fost apsate butoanele din stnga i din dreapta. A fost apsat butonul din mijloc. Au fost apsate butoanele din stnga i din mijloc. Au fost apsate butoanele din dreapta i din mijloc. Toate cele trei butoane au fost apsate.

Apsarea fiecrui buton activeaz ctre un eveniment MouseDown i MouseUp. Deci dac se apas dou butoane se activeaz dou evenimente (cte unul pentru fiecare buton) i fiecare eveniment separat returneaz cte o variabil Button. Cu alte cuvinte, MouseDown i MouseUp recunosc doar apsarea unui singur buton la un moment dat. Evenimentul MouseMove ns poate fi folosit pentru a testa dac au fost apsate dou 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."

281

Introducere n Informatic 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

A. Detectarea strilor tastelor de tip SHIFT Tastele de tip SHIFT sunt: Tastele SHIHT, CTRL i ALT. Evenimentele de mouse i de tastatur folosesc argumentul Shift pentru a determina dac a fost apsat o tast de tip shift i n ce combinaie. Dac tasta SHIFT este apsat, argumentul shift este egal cu 1; dac tasta CTRL este apsat, shift este 2; dac tasta ALT este apsat, shift este 4. Pentru a determina combinaiile acestor taste se face suma valorilor lor. De exemplu, dac tastele SHIFT i ALT sunt apsate, shift are valoarea 5 (1 + 4). Ultimii trei bii cel mai puini semnificativi ai lui shift corespund strii tastelor SHIFT, CTRL i ALT, conform figurii urmtoare: Tasta SHIFT Tasta CTRL Tasta ALT 0 0 0 0 A C S

Nefolosii Fig. 12.28. Parametrul Shift al evenimentelor mouse-ului.


Valoare binar 000 001 010 011 100 101 Valoare zecimal 0 1 2 3 4 5 Semnificaie Nici o tasta de tip Shift nu este apsat. Tasta SHIFT este apsat. Tast CTRL este apsat. Tastele SHIFT i CTRL sunt apsate. Tasta ALT este apsat. Tastele SHIFT i ALT sunt apsate.

282

Introducere n Informatic 110 111 6 7 Tastele CTRL i ALT sunt apsate. Toate cele trei taste sunt apsate.

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

12.3.3. Program de desenare A. Crearea interfeei programului de desenare

Fig. 12.29. Butoanele programului de desenare. B. Codul programului de desenare

283

Introducere n Informatic 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

284

Introducere n Informatic 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

285

Introducere n Informatic End If If Cerc = 1 Then Raza = Sqr((VX - X) ^ 2 + (VY - Y) ^ 2) Circle (VX, VY), Raza End If End If End Sub

12.3.4. Folosirea casetelor list i a casetelor combinate (combo) Casetele list (list boxes) i casetele combinate (combo) prezint o list de alternative pentru utilizator. Implicit, alternativele sunt afiate vertical ntr-o singur coloan sau mai multe. Dac numrul elementelor depete spaiul de afiare din list, sunt ataate automat bare de defilare, utilizatorul putnd s deruleze coninutul listei. Pentru crearea unei casete list se folosete obiectul ListBox, iar pentru crearea unei casete combo se folosete obiectul ComboBox. Casetele combo combin facilitile unei casete text cu cele ale unei casete list, permind utilizatorului efectuarea unei selecii fie prin tastarea textului n caseta combo, fie prin selectarea elementului dorit din list. Visual Basic pune la dispoziia programatorilor trei tipuri de casete combo: - Casete combo drop-down (proprietatea Style = 0); - Casete combo simple (proprietatea Style = 1); - Casete list drop-down (proprietata Style = 2). A. Adgarea de elemente n list Pentru a adga elemente ntr-o list combo se folosete metoda AddItem. caset.AddItem element[,index] unde: - caset reprezint numele casetei combo; - element reprezint elementul care va fi adgat listei; - index specific poziia unde va fi inserat noul element (0 reprezint prima poziie. Dac index lipsete, noul element va fi inserat la sfritul listei.) Lista va fi sortat dac proprietatea Sorted este setat la True. B. nlturarea elementelor dintr-o list Pentru a nltura un element dintr-o list se folosete metoda RemoveItem, iar pentru a nltura toate elementele unei liste se folosete metoda Clear. caset.RemoveItem index

286

Introducere n Informatic

caset.Clear C. Obinerea valorii seleciei curente Pentru a obine valoarea seleciei curente se folosete proprietatea Text. Valoare = caset.Text D. Obinerea valorii unui element i dintr-o list Un element al unei liste poate fi accesat prin intermediul proprietii List(). Valoare = caset.List(i) E. Determinarea poziiei unui element ntr-o list Proprietatea ListIndex furnizeaz poziia elementului selectat ntr-o list. ListIndex = 0, reprezint poziia primului element din list. Valoarea ListIndex = -1, este situaia cnd nici un element nu este selectat. F. Obinerea numrului de elemente Pentru a obine numrul de elemente dintr-o caset list sau caset combo se folosete proprietatea ListCount. n = caset.ListCount 12.3.5. Program Calculator Statistic n practic este necesar de multe ori s fie efectuate foarte rapid i uor, cu posibiliti de corecii i recalculare diferite calcule statistice. Astfel de calcule sunt de exemplu: sume de n, sume de n ptrat, medii aritmetice, medii geometrice, medii armonice, momente de ordinul k, dispersii, abateri medii ptratice. n programul care urmeaz se calculeaz numai cteva din aceste valori, suficient pentru a demonstra posibilitile unui astfel de program. A. Codul programului Calculator Statistic
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

287

Introducere n Informatic 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

B. Interfaa grafic a programului Calculator Statistic

Fig. 12.30. Interfaa programului de calcul statistic.

288

Introducere n Informatic

289

S-ar putea să vă placă și