Documente noi - cercetari, esee, comentariu, compunere, document
Documente categorii

Module si proceduri

Module si proceduri

Module

Modulul este un obiect care contine cod care, in functie de nivelul de vizibilitate, poate fi utilizat in aplicatia dumneavoastra. Un modul poate contine:

  • Declaratii Sunt instructiuni folosite pentru declararea variabilelor, constantelor, tipurilor definite de utilizator si procedurilor externe. Sectiunea Declaration a unui modul este separata sectiunea de proceduri, iar declaratiile din aceasta sectiune se aplica tuturor procedurilor din modul. Variabilele si constantele pot fi definite si in interiorul unei proceduri, caz in care ele se aplica doar procedurii in care ele au fost declarate.
  • Proceduri eveniment Sunt procedurile de tip Sub asociate unui eveniment al obiectului. Ele se executa ca raspuns la producerea evenimentului respectiv. Procedurile eveniment sunt intotdeauna stocate cu un formular sau raport in modulul formularului sau raportului.
  • Proceduri generale Ele sunt procedurile ce nu sunt direct asociate unui obiect sau eveniment. Procedurile generale pot fi incluse intr-un modul standard sau modul al clasei. Procedurile generale pot fi de doua tipuri: proceduri Sub (proceduri ce nu returneaza o valoare) si proceduri Function (proceduri ce returneaza o valoare).

Visual Basic pune la dispozitia programatorului trei tipuri de module: module ale formularului, module de cod (numite si module standard) si module de clasa. In toate cele trei tipuri de module pot exista proceduri ce pot fi utilizate, in functie de nivelul lor de vizibilitate, in interiorul aplicatiei.



In momentul in care unui control de pe un formular ii asociati codul ce se va executa ca raspuns la un eveniment al acelui control, dumneavoastra creati modulul de formular. Modulul de formular contine toate blocurile de cod (procedurile) pe care le asociati unor evenimente ale controalelor de pe formular sau ale formularului insasi. In mod prestabilit, la definire, procedurile formularului au asociat cuvantul Private; deci ele sunt vizibile numai in formularul in care au fost declarate. Daca vreti ca anumite proceduri din modulul de formular sa poata fi utilizate si in afara formularului, trebuie sa eliminati cuvantul Private din antetul procedurii.

Modulele clasa contin o definire formala a unei clase care va fi instantiata ca obiect. Se poate spune ca o clasa se comporta ca un sablon pe baza caruia pe timpul executiei se creaza noi obiecte. Clasa defineste proprietatile unui obiect si metodele utilizate pentru a controla functionalitatea acestuia. Deci in modulul clasa se vor gasi procedurile care determina comportarea obiectului.

Modulele de cod, pe care in continuare le vom numi module standard, contin declaratii de variabile si proceduri ce pot fi utilizate in toate celelalte module ale unui proiect.

Un proiect Visual Basic poate fi lansat in executie in doua moduri: printr-un formular de lansare sau printr-o procedura de lansare. Procedura de lansare trebuie sa se afle in modul standard si sa fie numita Main. In mod prestabilit, lansarea in executie a proiectului se realizeaza printr-un formular de lansare. Pentru a stabili modul de lansare in executie a proiectului se folosesc controalele casetei de dialog Project Properties (vezi figura 1). Caseta de dialog Project Properties se afiseaza selectand optiunea Project1 Properties din meniul Project. In lista derulanta Startup Object se va selecta optiunea Sub Main pentru ca lansarea proiectului sa se faca printr-o procedura generala. De regula formularul de lansare este primul formular al proiectului dumneavoastra. Nu este obligatoriu ca aplicatia sa inceapa cu primul formular al proiectului. Numele formularului ce se va utiliza drept formular de lansare se va selecta din lista derulanta Startup Object.

Text Box: 
Figura 1. Caseta de dialog Project Properties.


Pentru a crea un modul standard se selecteaza optiunea Add Module din meniul Project. In caseta de dialog Add Module (vezi figura 2) se executa clic pe butonul Open. Se deschide fereastra de editare a modulului (vezi figura 3), putandu-se astfel introduce declaratiile si procedurile modulului standard.

Text Box: 
Figura 2. Caseta de dialog Add Module.


Pentru a vedea cum se lanseaza in executie o aplicatie Visual Basic folosind o procedura de lansare vom introduce in modulul standard urmatorul cod:

Public Const vbStyle As Byte = vbOKOnly + vbExclamation + vbApplicationModal

Public varConfirm

' Procedura de lansare in executie a aplicatiei

Sub Main()

Dim n As Byte

' Se introduce valoarea a carui factorial se va determina

n = InputBox('Introduceti valoarea lui n:')

varConfirm = MsgBox('n!=' & Str(factorial(n)), vbStyle, 'Atentie')

End Sub

Public Function factorial(ByVal k As Byte) As Long

' Functie recursiva pentru calculul factorialului unui numar

If k = 1 Then

factorial = 1

Else

factorial = k * factorial(k - 1)

End If

End Function


Procedura de lansare se va folosi ori de cate ori este necesara stabilirea unor caracteristici de lucru specifice sistemului de calcul pe care se va rula aplicatia.

Proceduri generale

In Visual Basic exista doua tipuri de proceduri generale: subrutine (numite foarte des si proceduri) si functii.



In mod prestabilit, procedurile si functiile definite in modul standard sunt publice, adica ele pot fi folosite si din celelalte module ale proiectului. Daca se doreste definirea unei functii sau proceduri care sa nu poata fi apelata din afara modului standard, ea trebuie sa fie declarata ca fiind locala folosind cuvantul Private.

Proceduri subrutine

Procedura subrutina este o unitate de cod care realizeaza o anumita actiune in cadrul unui program si care nu returneaza nici o valoare explicita. Definirea unei proceduri subrutina se realizeaza folosind urmatoarea sintaxa:

[Private | Public] Sub <nume> <lista_parametrii> ' antetul subrutinei

.

<instructiuni>

[Exit Sub]

<instructiuni>

End Sub                                              ' linia finala a subrutinei

unde:

<nume> - este numele procedurii subrutina; trebuie sa respecte regulile de denumire a variabilelor.

<lista_parametrii> - specificatori de nume si tip separati prin virgule. Nu este obligatoriu ca o subrutina sa aiba parametrii, dar daca are, ei trebuie sa corespunda ca numar, tip si ordine cu argumentele transmise la apelare.

<instructiuni> - secventa de instructiuni prin care se descrie actiunea ce o va realiza subrutina.

Exit Sub - instructiune ce forteaza iesirea din subrutina.

Pentru a crea o procedura subrutina in editorul de cod ,se plaseaza cursorul pe o linie noua, se tasteaza antetul subrutinei (cuvantul Sub urmat de numele subrutinei) si apoi se apasa tasta Enter. Imediat, editorul plaseaza si linia finala a subrutinei (End Sub), iar cursorul se va pozitiona pe o linie noua, intre linia antetului si linia finala a subrutinei, putand astfel incepe tastarea codului dorit.

Apelarea unei proceduri se face prin precizarea numelui, precedat in mod optional de cuvantul Call, urmat de lista argumentelor, daca are.

Nota Desi cuvintele argumente si parametrii[1] sunt de cele mai multe ori folosite unul in locul celuilalt, exista insa o deosebire intre ele. Argumentul este o variabila sau o expresie care se va transfera procedurii apelate. Parametrul este un specificator de nume si tip care apare intre parantezele din antetul de definire a procedurii.

Proceduri functii

O procedura functie (sau pur si simplu functie) este o procedura care intr-un program realizeaza o anumita sarcina si returneaza o valoare. Deoarece, functia returneaza o valoare, ea poate fi utilizata ca parte a unei expresii mai complexe, adica ca un operand. Sintaxa de definire a unei functii este urmatoarea:

[Private | Public] Function <nume> <lista_parametrii> <tip> ' antetul functiei

.

<instructiuni>

[Exit Function]

<instructiuni>

End Function                                     ' linia finala a functiei

unde:

<nume> - este numele functiei; trebuie sa respecte regulile de denumire a variabilelor.

<lista_parametrii> - specificatori de nume si tip separati prin virgule. Nu este obligatoriu ca o functie sa aiba parametrii, dar daca are, ei trebuie sa corespunda ca numar, tip si ordine cu argumentele transmise la apelare.

<instructiuni> - secventa de instructiuni prin care sunt descrise operatiile ce le va executa functia.

<tip> - indica tipul valorii returnate de functie.

Exit Function - instructiune ce forteaza iesirea din functie.

In corpul functiei trebuie sa existe o instructiune de atribuire, de forma:

<nume> = <expresie>

unde <expresie> este o expresie numerica sau sir de caractere, care atribuie numelui functiei valoarea pe care o va returna aceasta.

Crearea unei functii se face la fel ca si crearea unei proceduri subrutina. Pentru a apela o functie, intr-o expresie se tasteaza numele functiei urmat de lista parametrilor inclusa intre paranteze. Parantezele trebuie sa fie si atunci cand functia nu are parametrii.



Transmiterea valorilor procedurilor apelate

Pentru a asigura un grad mai mare de generlitate, functiile si/sau procedurile pot contine in antetul de definire o lista de parametrii. In momentul apelarii unei functii si/sau proceduri se transmit, daca este necesar, argumentele (parametrii actuali). Intre cele doua liste trebuie sa existe o corespondenta pozitionala, de tip si numar. Parametrii actuali (argumentele) pot diferi ca nume de parametrii formali.

Transmiterea valorilor din programul apelant in programul apelat (procedura/functie) se poate realiza fie prin valoare, fie prin referinta. In mod prestabilit, in Visual Basic transmiterea parametrilor actuali se face prin referinta, deci procedurii/functiei i se transmite adresa zonei de memorie corespunzatoare parametrului actual. Din acest motiv, orice modificare efectuata asupra parametrilor formali in procedura/functie se va reflecta si in parametrii actuali corespunzatori din programul apelant. Pentru ca modificarile efectuate asupra parametrilor formali sa nu se reflecte in valorile parametrilor actuali, este necesar ca parametrii formali sa fie declarati folosind cuvantul ByVal (vezi definirea functie Factorial de la pagina 2); adica transmiterea sa se realizeze prin valoare.

In aceste conditii specificatorul de nume si tip al unui parametru formal din antetul de definire a unei proceduri/functii trebuie sa fie de forma:

[ByRef | ByVal] <nume> As <tip>

unde:

ByRef - indica transmiterea parametrilor prin referinte. Este modul prestabilit; deci acest cuvant poate lipsi.

ByVal - indica transmiterea parametrilor prin valoare.

<nume> - numele parametrului formal;

<tip>        - tipul parametrului formal.

Proceduri eveniment

Prelucrarea datelor in aplicatiile Visual Basic este dirijata, in principiu, prin evenimente. Fiecare obiect ce poate fi inclus intr-o aplicatie Visual Basic are mai multe evenimente asociate, iar utilizatorul are posibilitatea ca prin intermediul unei secvente de instructiuni sa precizeze operatiile ce se vor executa la producerea evenimentului respectiv. Spre exemplu, la deschiderea unui formular se produce evenimentul Load. Acestui eveniment i se poate asocia un cod prin care sa se indice operatiile ce se vor executa atunci cand se deschide formularul respectiv (initializarea unor variabile, deschiderea unor fisiere etc.). Cand se executa clic pe un buton de comanda se produce evenimentul Click; acestuia i se poate asocia un cod prin care sa se specifice ce se va executa atunci cand utilizatorul executa clic pe butonul de comanda respectiv (terminarea aplicatiei, deschiderea unui alt formular etc.).

Fiecare obiect are propriile sale evenimente, care pot fi diferite de la un obiect la altul. Spre exemplu, formularul are un eveniment Unload (se produce la inchiderea formularului) si nu are evenimentul Change care exista la o caseta de text (se produce la modificarea valorii din control).

Codul atasat unui eveniment se introduce intr-o procedura, numita procedura eveniment, a carei sintaxa este urmatoarea:

Private Sub <obiect> <eveniment> [<parametru>]

.

<instructiuni>

[Exit Sub]

<instructiuni>

End Sub

unde:

<obiect>    - numele obiectului caruia i se asociaza o procedura eveniment.

<eveniment>          - numele evenimentului;

<parametru>         - parametrul formal pus la dispozitie de procedura de tratare a evenimentului. Spre exemplu, formularul are un eveniment numit MouseMove, care se produce atunci cand se deplaseaza mouse-ul. Procedura atasata acestui eveniment are patru parametri formali prin care se poate indica butonul actionat, deplasarea, si pozitia.

Private Sub Form_MouseMove(Button As Integer, Shift As Integer, _

X As Single, Y As Single)

<instructiuni>        - specifica operatiile ce se vor executa.

Spre exemplu, presupunand ca pe un formular exista un buton de comanda numit cmdQuit care va fi folosit pentru a indica terminarea aplicatiei, acestuia trebuie sa i se ataseze o procedura evnimentului Click, care in forma ei cea mai simpla va contine cel putin instructiunea End:

Private Sub cmdQuit_Click()

End ' Inchiderea aplicatiei

End Sub

Fiecare tip de obiect ce se poate utiliza intr-o aplicatie are un eveniment prestabilit. Spre exemplu, formularul are ca eveniment prestabilit evenimentul Load, butonul de comanda are evenimentul Click, caseta de text are evenimentul Change etc.



Toate procedurile atasate evenimentelor unui formular si cele atasate evenimentelor controalelor existente pe acel formular se stocheaza in modul atasat formularului respectiv (modulul de formular).

Pentru a atasa o procedura evenimentului prestabilit al unui obiect se executa urmatoarele operatii:

  1. In fereastra de proiectare se executa dublu clic pe obiectul respectiv. Spre exemplu, pentru a atasa o procedura evenimentului Load al formularului se executa dublu clic pe formularul respectiv. Pe ecran se va deschide fereastra de editare a modului de formular (vezi figura 4).



  1. Dupa introducerea codului dorit se inchide, daca este necesar, fereastra de editare.

Redeschiderea fereastrei de editare a modulului de formular, pentru corectarea unor procedurii existente, pentru introducerea de noi proceduri eveniment sau pentru introducerea de proceduri generale se realizeaza selectand optiunea Code din meniul View.

Lista derulanta Object se utilizeaza pentru selectarea obiectului caruia vrem sa-i atasam o procedura eveniment, iar lista derulanta Procedure permite selectarea evenimentului dorit.

Procedurile generale se introduc in modulul de formular la fel ca si in modulul standard.

Urmatorul modul de formular este atasat unui formular care are trei casete de text, un grup de patru butoane de optiuni. Aplicatia realizata pe baza acestui formular (vezi figura 5) permite introducerea a doua valori, afisarea rezultatului operatiei selectate si terminarea aplicatiei.

Option Explicit

Dim strMsg As String

Dim varAfisare

Const bytStyle As Byte = vbOKOnly + vbExclamation + vbApplicationModal

Private Sub cmdQuit_Click()

End ' Inchiderea aplicatiei

End Sub

Private Sub optAdd_Click()                     ' Adunarea valorilor casetelor de text

txtC = Val(txtA) + Val(txtB)

End Sub

Private Sub optAdd_GotFocus()

' Deoarece optiunea Adunare este selectata in mod prestabilit,

' a fost necesara includerea acestei proceduri pentru ca atunci cand

' controlul primeste focus-ul sa afiseze rezultatul adunarii

If optAdd Then

txtC = Val(txtA) + Val(txtB)

End If

End Sub

Private Sub optDivide_Click()                 ' Impartirea valorilor casetelor de text

If txtB = 0 Then

strMsg = 'Nu se poate imparti prin zero!'

varAfisare = MsgBox(strMsg, bytStyle, 'ATENTIE!')

Exit Sub

End If

txtC = Val(txtA) / Val(txtB)

End Sub

Private Sub optMultiply_Click()             ' Inmultirea valorilor casetelor de text

txtC = Val(txtA) * Val(txtB)

End Sub

Private Sub optSubtr_Click()                   ' Impartirea valorilor casetelor de text

txtC = Val(txtA) - Val(txtB)

End Sub

Text Box: 
Figura 5. Formularul proiectului Optiuni.



[1] In literatura de specialitate argumentul mai este denumit si parametru actual, iar parametrul este denumit parametru formal.