|
LUCRAREA DE LABORATOR
Obiecte: colectii, proprietati, metode si evenimente.
Elaborarea unui modul de clasa atasat unui formular raport.
1. Cu ajutorul generatorului de formulare generati un formular pentru tabelul Facturi din baza de date Gestoc.
Ulterior, in modul Design sa atasam evenimetului On Enter al casetei de text valoarea o procedura care, daca valoarea facturii este mai mare de 10.000.000, sa scrie valoarea cu rosu, ca sa ne atraga atentia utilizatorului.
Un exemplu de procedura ar fi acesta: Cuprins laborator 2
Private sub valoare_enter() Obiecte
VALOARE.ForeColor = 8388608 Metode
If VALOARE > 10000000 Then Proprietati
VALOARE.ForeColor = 8388863 Evenimente
' valorile pentru Fore Color se pot lua cu Copy din fereastra Module de clasa
de proprietati inainte de a intra in Code Builder.
End If
End Sub
Iesiti din fereastra Code Builder-ului apoi din fereastra Designer-ului si rulati formularul sa vedeti cum functioneaza procedura introdusa. Pentru aceasta navigati de la un articol la altul (de la o factura la alta) si vedeti daca se schimba culoarea valorii la vreuna din facturi.
2. Scrieti si salvati un modul standard care sa contina o procedura care stie doar sa scrie expresia 'Factura respinsa'
De exemplu:
Sub RESPINSA()
MsgBox 'FACTURA RESPINSA!'
End Sub
3. Stiind ca o factura este respinsa, indiferent daca este mai veche de 30/03.2000 sau daca are valoarea mai mare 10.000.000 lei sa atasam evenimetului On Entry al casetei de text Data urmatoarea subrutina
RESPINSA
End If
End Sub
Evident subrutina Respinsa va trebui apelata si de evenimetul On Entry al casetei de text valoare, cand valoarea va depasi 10.000.000, astfel ca acum subrutina initiala va arata astfel:
Private sub valoare_enter()
VALOARE.ForeColor = 8388608
If VALOARE > 10000000 Then
RESPINSA
End If
End Sub
Sa observam ca o procedura dintr-un modul standard este accesibila tuturor obiectelor si tuturor evenimentelor. Bineinteles ca poate fi apelata si de alta procedura dintr-un alt modul standard.
Procedurile din modulul de clasa de mai sus, puteau fi atasate si altor evenimente, dar On Entry se pare cel mai rezonabil pentru scopul ce ni l-am propus.
Testati procedurile introduse, navigand prin tabelul Facturi cu ajutorul formularului cu acelasi nume.
1. Sa folosim corect obiectele, proprietatile, metodele si evenimentele.
Obiectele pot fi
de baza (tabele, formulare, interogari, rapoarte, macrouri, module, bare de meniu (Commandbars), etc.) ;
de control (caste de taxt, etichete, combox, liste, butoane de c-da, butoane radio, casete de validare, pagini, etc.) ;
DAO (data access objects) : recordsets, querydefs, tabledefs, databases, etc. (in total exista 17 obiecte DAO)
In codul scris in Visual Basic un obiect trebuie mai intai identificat si apoi putem folosi una din metodele sale sau putem schimba una din proprietatile sale.
Exista colectii (colllection) de obiecte si chiar exista posibilitatea de a ne referi la unul din elementele colectiei. Referirea se poate face prin numar sau prin nume. De exemplu colectia de formulare se numeste Forms. Ne putem referi la un formular, de exemplu Forms(1) - primul formular deschis, sau la toate formularele. Exemplu
Sub inchidform ()
forms(1).Close
End Sub
Sau:
Sub inchideform ()
Forms('Facturi').close
Sau:
Sub InchidToate()
Forms.Close
' aceasta procedura inchide toate formularele deschise in prezent
End Sub
Sa retinem ca in Visual Basic un apostrof inseamna ca urmeaza un comentariu
O metoda este o actiune pe care un obiect o poate indeplini. La baza unei metode sta tot o procedura (publica), care spre deosebire de procedurile legate de evenimete, nu se ruleaza la declansarea unui eveniment ci la apelul explicit al metodei respective, apel care se face prin program. De exemplu obiectul combobox este prevazut cu o metoda numita Add, cu care se pot adauga noi optiuni pe lista de optiuni a unui combobox. O astfel de optiune va fi nominalizata prin apelul metodei. De exemplu
Sub AdaugOptiuni(OptNoua As String)
Combo1.Add OptNoua
O proprietate este un atribut al unui obiect prin care se defineste o caracteristica a obiectului cum ar fi dimensiunea, culoarea, pozitia pe ecran, daca este vizibil, sau nu, etc. Pentru a schimba caracteristicile unui obiect trebuie sa schimbam valorile proprietatilor sale. Proprietatile trebuie precedate de numele obiectului si de un punct. Noua valoare va urma dupa semnul egal ce urmeaza dupa proprietate. De exemplu:
Sub SchimbNume(NumeNou)
End Sub Cuprins laborator 2
Procedura de mai sus permite schimbarea numelui obiectului Facturi cu un nume nou atribuit prin intermediul parametrului NumeNou.
Nu toate proprietatile se pot schimba. In Help se specifica pentru fiecare proprietate daca ea poate fi schimbata (read-write), poate fi numai citita (read-only) sau numai scrisa (write-only).
Procedura urmatoare (o subrutina) foloseste o caseta de mesaje (MsgBox) pentru a afisa titlul ce apare pe formularul activ in acest moment:
Sub ScrieNumeForm()
NumeForm=Screen.ActiveForm.Caption
End Sub
2. Module de clasa
Aceste module pot fi vazute numai din Form sau Report Designer, dand clic pe View/ Code, sau urmand calea pe care trebuie sa mergem pentru a edita sau modifica o procedura asociata unui obiect de pe formular sau raport.
Aceasta presupune ca fiecare procedura din modulele de clasa sa fie atasata de un obiect si de un eveniment din viata obiectului de care vrem sa atasam procedura.
Evenimentul este o actiune recunoscuta de un obiect (cum ar fi un clic de mouse), pentru care se poate prevedea un cod (procedura) cu care obiectul sa raspunda in caz ca acea actiune se produce. Evenimentele se pot produce ca rezultat al actiunii utilizatorului, dar ele pot fi declansate si prin program sau chiar de sistem (calculator).
Evenimentelor li se asociaza macrouri sau module astfel:
Avand formularul sau raportul deschis in mod Designe, vom selecta obiectul caruia vrem sa-i atasam o procedura si apoi din pagina Events a ferestrei Properties vom selecta evenimentul care va declasa procedura. Daca langa un nume de eveniment din pagina Event, apare expresia [Event Procedure], inseamna ca exista o procedura asociata evenimentului respectiv. Daca dorim sa vizualizam procedura de clasa astfel descoperita, selectam procedura si dam clic pe butonul cu trei puncte care apare alaturi. Putem da clic pe butonul cu trei puncte chiar si atunci cand langa numele evenimentului nu apare expresia [Event Procedure]. In acest caz va apare o fereastra cu trei optinuni: Expression, Macros sau Code. Vom alege Code si Access ne deschide fereastra Code Builder, care seamana cu cea care se foloseste pentru crearea modulelor standard, prezentata mai jos.
Daca obiectului si evenimentului pe care le-am selectat nu le-a fost creata mai inainte nici o procedura, acum cand vom intra in fereastra Code Builder vom gasi numele ei (antetul) gata scris. Acesta se compune din numele obiectului separat cu o linioara de numele evenimentului si de o paranteza deschisa si una inchisa.