Home - Rasfoiesc.com
Educatie Sanatate Inginerie Business Familie Hobby Legal
Doar rabdarea si perseverenta in invatare aduce rezultate bune.stiinta, numere naturale, teoreme, multimi, calcule, ecuatii, sisteme




Biologie Chimie Didactica Fizica Geografie Informatica
Istorie Literatura Matematica Psihologie

Informatica


Index » educatie » Informatica
» Metode si tehnici de programare in Visual Basic


Metode si tehnici de programare in Visual Basic


Metode si tehnici de programare in Visual Basic

În acest capitol veti invata cum sa cititi si sa scrieti fisiere pe disc utilizand un program Visual Basic, sa concepeti programe cu mai multe formulare, sa concepeti programe cu meniuri precum si depanarea programelor.

Lucrul cu fisiere

În practica aplicatiilor pe calculator, introducerea datelor de la tastatura si afisarea rezultatelor pe ecran, se intalneste intr-un numar limitat de cazuri, cand programele au putine date de intrare sau sunt simple. Un program face parte, de regula, dintr-un pachet de programe si foloseste date de la alt program iar rezultatele obtinute vor fi date de intrare pentru alt program. Aceasta "comunicare' intre programe se face prin intermediul fisierelor, care se constituie in depozit de date de intrare/iesire(I/O).

Fisierele pot memora informatii din cele mai diverse - imagini, texte, date numerice etc.



Orice fisier, inainte de a avea acces la el , trebuie deschis cu instructiunea Open. De fapt, orice acces la un fisier presupune efectuarea urmatoarelor operatii:

Deschiderea fisierului;

Accesul la el (scriere, citire, adaugare);

Închiderea fisierului.

Aceste operatii vor trebui sa apara in programele pe care le veti scrie.

Deschiderea fisierelor

Înainte de a putea efectua operatii de intrare/iesire asupra unui fisier, acesta trebuie deschis cu comanda Open. Aceasta comanda se utilizeaza pentru alocarea unei memorii rezervate operatiilor de intrare/iesire asupra fisierului si pentru specificarea modului de acces la fisier.

Exista trei variante de acces la fisier si anume:

Acces binar;

Acces secvential;

Acces aleatoriu.

Iata sintaxa simplificata a comenzii Open:

Open cale For mode As #NumarFisier.

Cale este o expresie alfanumerica ce specifica numele si localizarea fisierului ce va fi deschis, care poate include si o unitate de disc si o structura de directoare. Exemplu: "c:MocianVB6coef.dat". Daca fisierul indicat nu exista, acesta poate fi creat in unul din modurile Append, Binary, Output sau Random. Daca fisierul exista deja si se deschide in mod Output, el va fi suprascris, deci trebuie avut grija ca sa fie deschis in modul Append, pentru a face adaugari.

Mode este unul din cele cinci cuvinte cheie ale limbajului Visual Basic care specifica modul in care va fi deschis un fisier. Astfel, pentru modul de acces secvential se vor folosi cuvintele cheie Append, Input si Output. Pentru modul de acces binar sau aleator se vor utiliza cuvintele cheie Binary, respectiv Random.

Numar Fisier este un numar intreg cuprins in intervalul 1-511. Nu uitati ca acest numar este precedat de simbolul "#".

Iata un exemplu concret de deschidere al unui fisier cu acces secvential:

Open "c:MocianLucruVB6ex1.txt" For Input As #1.

Cand se termina citirea sau scrierea unui fisier acesta trebuie inchis cu comanda Close.

Iata sintaxa acestei comenzii: Close Lista numarului fisierelor.

Parametrul Lista numarului fisierelor poate fi reprezentat de unul sau mai multe numere separate prin virgula. Daca se omite acest parametru, vor fi inchise toate fisierele deschise la un moment dat. Iata cateva exemple de folosire a comenzi Close.

Close #1

Close #1, #2, #20

Close

În primul caz se inchide numai fisierul asociat numarului #1, in al doilea se inchid trei fisiere, iar in al treilea se inchid toate fisierele deschise.

Scrierea datelor in fisiere cu acces secvential

Scrierea in fisiere se face cu ajutorul instructiunii Write, dupa ce acestea au fost deschise in prealabil in unul din modurile Output sau Append. Formatul instructiunii este:

Write #nr.fisier, lista expresii

sau mai concret:

Write #1, x1, x2, y1, y2

unde:

#1 - este numarul asociat la deschiderea fisierului, numit si specificator de fisier.

x1, x2, y1, y2 - este lista de date care va fi scrisa in fisier.

Cand se specifica datele trebuie sa tinem cont de urmatoarele:

  • mai multe valori se scriu in lista separate prin virgula;
  • textele se scriu intre ghilimele;
  • data si ora trebuie specificate in format:

#dd-mm-yy hh:mm:ss#;

  • valorile logice se vor specifica in urmatorul format:

#True#

#False#

O linie dintr-un fisier poarta numele de articol sau inregistrare.

Pentru a separa liniile intre ele se foloseste combinatia de caractere speciale <CR> + <LF> cunoscuta si sub numele de retur de car, nume mostenit, probabil, de la masina de scris.

Iata o secventa de program care scrie intr-un fisier coeficientii si solutiile ecuatiei de gradul II:

Open "C:MocianCursVBecuatia2.dat" For Output As #1

Write #1, a, b, c, x1, x2

Close #1

Observatie importanta! Pentru scrierea in fisiere se poate folosi si instructiunea Print #n, unde n este specificatorul de fisier. Aceasta instructiune realizeaza o scriere formatata, iar fiecare articol din fisier este considerat ca o singura variabila de tip String (si nu o lista de variabile ca la instructiunea Write), iar textele scrise nu se incadreaza in ghilimele.

Utilizarea acestei instructiuni pentru scrierea in fisier nu este recomandata din cauza ca la citirea ulterioara a sirului de caractere, acesta trebuie prelucrat folosind manipulari destul de complicate pentru a separa expresiile initiale.

Citirea datelor din fisiere cu acces secvential

Instructiunea Input este destinata preluarii datelor dintr-un fisier si atribuirii lor unor variabile. Sintaxa instructiunii este:

Input #n, lista de expresii

Lista de expresii are aceeasi semnificatie ca si la instructiunea Write, considerata opusa lui Input. Sunt valabile precizarile referitoare la specificarea tipurilor de date. Pentru citirea datelor pe care le-am scris in fisier putin mai inainte, vom avea urmatoarea secventa de cod:

Open "C:MocianCursVBecuatia2.dat" For Input As #1

Input #1, a, b, c, x1, x2

Close #1

Pentru o citire corecta, inregistrarea trebuie sa aiba aceeasi structura ca si lista de variabile din instructiunea Input, altfel vom primi un mesaj de eroare. Fiecarei variabile i se va atribui valoarea aflata intre doua virgule.

Un fisier are mai multe articole, iar instructiunea Input citeste un singur articol. Pentru a citi toate articolele unui fisier trebuie sa ne gandim la plasarea lui Input intr-o structura repetitiva. Iesirea din bucla trebuie sa se faca atunci cand s-a ajuns la sfarsitul fisierului, adica atunci cand s-au citit toate articolele. Pentru a testa sfarsitul fisierului se utilizeaza functia Eof(), care returneaza una din valorile True sau False dupa cum suntem la sfarsitul fisierului sau nu.

Sintaxa functiei este: Eof(1), daca fisierul a fost deschis cu #1.

Observatie importanta! Citirea fisierelor in Visual Basic se poate face si cu instructiunea Line Input, considerata perechea lui Print, prezentata putin mai inainte. Spre deosebire de Input, instructiunea Line Input creaza o singura variabila de tip String cu continutul intregului articol, fara combinatia <CR> + <LF> (care corespunde unui Enter intr-un text obisnuit), care este ignorata.

Pentru fisierele cu acces binar sau aleator, perechea de instructiuni de scriere si citire este Put si Get. Acest mod de acces la fisiere este folosit de programatorii avansati si cu experienta deoarece necesita intelegerea unor concepte mai complicate. Oricum, pentru cei ce doresc performanta, exista multe carti de programare in Visual Basic de unde se pot documenta. O sursa valoroasa de informare este si folosirea Help -ului din Visual Basic.

Exemple practice de folosire a fisierelor

Exemplele de folosire a fisierelor in proiectele Visual Basic sunt nenumarate. Cele prezentate aici sunt cazuri pe care le veti folosi in practica.

Exemplul nr.1 Vom scrie o aplicatie care scrie intr-un fisier cu acces secvential notele unor studenti. Datele vor fi introduse de la tastatura.

Interfata este urmatoarea:

Fig. 15.1. Interfata ex.1

 

Interfata contine numai 2 butoane de comanda. Cand lansam programul ni se cer pe rand numele, prenumele si nota obisnuita, care vor fi scrise in fisierul note.dat.

Ciclul DO WHILE face ca introducerea datelor sa se repete pana cand se apasa direct Enter fara sa scriem nimic la introducerea unui nume.

Observatie !!! Trebuie avut grija sa creati in prealabil structura de directoare in care se va salva fisierul deschis, altfel veti primi un mesaj de eroare.

Codul sursa al aplicatiei este urmatorul:

Private Sub cmdExit_Click()

End

End Sub

Private Sub cmdScrie_Click()

Open 'C:MocianScoalaCursVBnote.dat' For Output As #1

nume = InputBox('Numele= ')

Do While nume <> ''

prenume = InputBox('Prenumele= ')

nota = InputBox('Nota= ')

Write #1, nume, prenume, nota

nume = InputBox('Numele= ')

Loop

Close #1

End Sub

Rezultatul introducerii acestor date intr-un fisier este prezentat mai jos:

Fig. 15.2. Fisier cu date

 

Exemplul nr. 2. Aceasta aplicatie citeste datele din fisierul pe care l-ati creat in exemplul nr.1 si le scrie in forma aplicatiei. Interfata va avea tot 2 butoane de comanda, unul pentru lansare si unul pentru iesire. Dupa lansarea aplicatiei interfata va arata ca in figura 15.3.

Fig. 15.3. Rezultatul citirii din fisier

 

Codul sursa pentru acest exemplu este:

Private Sub cmdCiteste_Click()

Open 'C:Mocian_ScoalaCursVBnote.dat' For Input As #1

Do Until EOF(1)

Input #1, nume, prenume, nota

Form1.Print nume, prenume, nota 'Afisarea datelor

Loop

Close #1

End Sub

Private Sub cmdExit_Click()

End

End Sub

Din acest exemplu se observa cum a fost pusa conditia pentru a detecta sfarsitul de fisier EOF, care merita retinuta pentru ca veti mai avea nevoie de ea. De asemenea, se vede cum se scrie pe o interfata, tehnica folosita mai ales pentru teste.

Exemplul nr. 3. Acest exemplu il vom folosi pentru a citi informatii din 2 fisiere pentru a completa un ListBox si un ComboBox, respectiv pentru a scrie informatii intr-un al 3-lea fisier. Primele doua fisiere se vor crea cu utilitarul Notepad si vor avea structurile de mai jos:

List1.txt: Nume1 Prenume1

Nume2 Prenume2

. . .

Nume n Prenume n

Combo1.txt: Nota1

Nota2

. . .

Nota n

Al 3-lea fisier va avea numele Rez.dat si o structura definita prin program, de forma: Nume Prenume Nota, fiecare inregistrare fiind formata din selectiile care se vor face din ListBox si ComboBox.

Interfata:

Fig. 15.4. Interfata ex.3

 

Interfata contine, dupa cum se vede, 6 obiecte dupa cum urmeaza: 2 etichete, 2 butoane de comanda, o caseta cu lista si o caseta combinata. Proprietatile fiecaruia le veti stabili singuri.

Cum functioneaza aplicatia? Mai intai asigurati-va ca fisierele "c:TempNumeleDvList1.txt" si "c:TempNumeleDvCombo1.txt" au fost completate in Notepad. Nu uitati sa selectati un nume de student si o nota, apoi apasati butonul "Executa".

Dupa ce ati apasat butonul "Executa", in fisierul "c:TempNumeleDvRez.txt", va apare combinatia pe care ati selectat-o. Deoarece fisierul e deschis in modul Append, toate inregistrarile se vor adauga la sfarsit.

Codul sursa:

Private Sub cmdExit_Click()

End

End Sub

Private Sub cmdExecuta_Click()

Open 'c:TempPopescuRez.dat' For Append As #1

x = lstNume.ListIndex

y = cboNota.ListIndex

xx = lstNume.List(x)

yy = cboNota.List(y)

Var = xx & ' ' & yy

Print #1, Var

Close #1

End Sub

Private Sub Form_Load()

'Deschiderea fisierelor

Open 'c:TempPopescuList1.txt' For Input As #2

Open 'c:TempPopescuCombo1.txt' For Input As #3

'Incarc ListBox-ul

Do While Not EOF(2) 'EOF - sfirsit de fisier

Line Input #2, x

lstNume.AddItem x

Loop

'Incarc ComboBox-ul

Do While Not EOF(3)

Line Input #3, x

cboNota.AddItem x

Loop

Close #2, #3

End Sub

Cateva comentarii cred ca se impun parcurgand codul sursa:

Observati conditia Not EOF (2) de la ciclul Do Loop. Aceasta conditie se traduce astfel: "atata timp cat nu este sfarsitul fisierului". Aceasta conditie contine functia EOF() care are ca parametru numarul asociat deschiderii unui fisier. Retineti aceasta conditie pentru ca o veti folosi de multe ori in aplicatiile pe care o sa le faceti;

Observati ca ListBox-ul si ComboBox-ul se incarca in procedura Form_Load() care se lanseaza automat la deschiderea formei.

Observati, de asemenea, asemanarea accesului la articolele din ListBox si ComboBox.

Aici s-a putut folosi instructiunea Line Input deoarece aveam nevoie de intreaga inregistrare.

Modalitati de gestionare a fisierelor

În exemplele prezentate pana acum, numele fisierelor se stabileau prin program, unde se indica si calea spre acel fisier. Aceasta practica nu este adecvata aplicatiilor profesionale, ea se foloseste mai mult in scop didactic pentru a intelege mecanismele lucrului cu fisiere (deschidere, scriere, citire, inchidere). Un fisier folosit intr-o aplicatie trebuie sa fie intr-un anumit loc, foarte exact determinat. Daca se sterge fisierul sau un director, programul va da o eroare.

Pentru a evita aceasta strictete legata de numele si locul fisierelor, ar fi bine ca numele si locatia unui fisier implicat in aplicatie sa fie date de utilizator. În acest scop, limbajul Visual Basic pune la dispozitia programatorilor instrumente foarte puternice, care vor fi prezentate in cele ce urmeaza

Pentru a scrie sau citi un fisier se pot folosi niste obiecte speciale numite FileSave si FileOpen care sunt casete de dialog standard. Aceste obiecte (se mai numesc si controale), fiind mai rar folosite nu se gasesc intre obiectele din Toolbox, asa ca va trebui sa facem cateva manevre pentru a le aduce aici.

Parcurgeti urmatorii pasi:

1. Dati comanda Project - Components , care va deschide caseta de dialog din figura 15.5.



Fig. 15.5. Caseta de dialog pentru adaugarea componentelor

 


  1. Bifati componenta Microsoft Common Dialog Control 6.0, apoi apasati OK. Caseta se inchide iar in Toolbox va apare iconita unui nou obiect, CommonDialog.
  2. Acest nou obiect, poate fi inserat acum ca oricare alt obiect din Toolbox.

Controlul CommonDialog contine mai multe tipuri de casete de dialog, dupa cum urmeaza:

    1. Open/SaveAs - pentru deschiderea/salvarea fisierelor;
    2. Color - pentru alegerea culorilor;
    3. Font - pentru alegerea fonturilor;
    4. Print - pentru alegerea imprimantelor;
    5. Help - pentru legaturi cu fisiere de tip help.

În functie de tipul casetei de dialog ales se vor defini proprietatile acesteia, asa cum se vede in figura 15.6.


Fig. 15.6. Stabilirea proprietatilor

 


Astfel, pentru tipul Open/SaveAs proprietatile casetei de dialog CommonDialog sunt cele aratate in figura 15.6, avand semnificatiile:

  • DialogTitle - titlul casetei de dialog
  • FileName - Returneaza / Seteaza calea si numele fisierului
  • InitDir - Returneaza / Seteaza directorul care contine fisierul
  • Filter - Returneaza / Seteaza filtrele care sunt afisate in caseta Type List
  • DefaultExt - Returneaza / Seteaza extensia implicita la salvarea fisierului

Metodele casetei de dialog CommonDialog sunt urmatoarele:

  • ShowOpen
  • ShowSave
  • ShowColor
  • ShowFont
  • ShowPrinter
  • ShowHelp

Cum se procedeaza cand dorim sa ne gestionam fisierele cu ajutorul controlului CommonDialog, veti putea urmari in exemplul urmator.

Aplicatie de gestionare a fisierelor

Ne propunem sa cream o aplicatie care salveaza in diferite fisiere notele studentilor la o anumita disciplina. Este evident ca fiecare grupa va fi salvata intr-un fisier cu numele grupei. Pentru aceasta vom folosi controlul CommonDialog cu metoda ShowSaveAs. Ne vom folosi, de asemenea, de un cod sursa pe care l-am mai utilizat in aceasta lectie (ex. 1).

Interfata este data in figura 15.7.

Fig. 15.7. Interfata

 

Controlul CmmonDialog, cu numele cdg1

 


Construirea interfetei se face dupa metoda cunoscuta, desenand pe rand obiectele. Noutatea consta in punerea pe interfata a controlului CommonDialog, care se va vedea numai in Design Mod, adica numai in faza de proiectare nu si la executie.

Iata codul:

Private Sub cmdFisNote_Click()

cdg1.ShowSave 'Aici se vizualizeaza commonDialog pentru salvarefisiere

x = cdg1.FileName 'Extrag numele fisierului ales din caseta de dialog

Open x For Output As #1

nume = InputBox('Numele= ')

'Ciclu de introducere a datelor

Do While nume <> '' 'Ciclul se opreste cand nu se da ENTER, fara valoare

prenume = InputBox('Prenumele= ')

nota = InputBox('Nota= ')

Write #1, nume, prenume, nota

nume = InputBox('Numele= ')

Loop

Close #1

End Sub

Private Sub cmdExit_Click

End

End Sub

Cum functioneaza programul? Dupa ce am construit interfata si am scris codul aferent, se lanseaza programul in executie. Pe forma apar numai cele 2 butoane de comanda, iconita controlului CommonDialog nu se vede. Apasand butonul "Creaza fisier cu note" se va deschide caseta de dialog de unde putem alege numele fisierului in care se vor scrie datele introduse.

Dupa ce am ales numele fara extensie al fisierului, se va deschide o caseta InputBox pentru introducerea pe rand a datelor cerute (Nume, Prenume, Nota). Cand vrem sa terminam ciclul dam un click pe butonul OK fara sa introducem vreun nume.

Urmariti fisierele pe care le-ati creat, deschizandu-le cu Notepad.

Folosirea controalelor intrinseci pentru accesul la fisiere

În cazurile in care controalele standard FileOpen si FileSave nu ofera un nivel acceptabil de flexibilitate, Visual Basic ne pune la dispozitie trei controale pentru lucrul cu fisiere:

  • DriveListBox - care afiseaza lista unitatilor de disc disponibile in sistem
  • DirListBox - care afiseaza lista subdirectoarelor dintr-un anumit director
  • FileListBox - care afiseaza lista fisierelor dintr-un anumit director

Aceste controale se pot combina astfel:

  • La proiectare, pentru controlul FileListBox se poate stabili un filtru pentru afisarea fisierelor, prin proprietatea Pattern, care selecteaza pentru afisare numai fisierele cu o anumita extensie (de exemplu txt - vezi exemplul care urmeaza);
  • La executie proprietatea Path a controlului DirListBox se sincronizeaza cu proprietatea Drive a controlului DriveListBox, iar proprietatea Path a controlului FileListBox, cu proprietatea Path a contolului DirListBox, adica:

Dir1.Path = Drive1.Drive

File1.Path = Dir1.Path

La executie, numele cu extensie a fisierului ales din controlul FileListBox se obtine din proprietatea FileName, adica:

numef = File1.FileName

Un exemplu practic ne va lamuri asupra multor aspecte legate de controalele amintite. Astfel, ne propunem sa afisam continutul unor fisiere de tip text. Aceste fisiere pot fi de exemplu cele create pentru evidenta notelor studentilor, despre care s-a discutat putin mai inainte. Afisarea se va face direct pe forma.

Interfata este prezentata in figura 15.8. Este aratat si ToolBox-ul si localizarea controalelor noi folosite.

Fig. 15.8. Interfata cu noile obiecte

 


 


 


 


Se pot remarca cele trei noi obiecte desenate pe interfata si anume:

1 - DriveListBox cu numele Drive1

2 - DirListBox cu numele Dir1

3 - FileListBox cu numele File1 si proprietatea Pattern setata la valoarea "*.txt"

Rezultatul afisarii continutului fisierului Tcm1.txt este prezentat in figura 15.9.

Fig. 15.9. Rezultatul afisarii

 

Afisarea continutului fisierului s-a facut pe forma, dar ea se poate face si in alte controale cum ar fi ListBox-ul sau alt control care poate fi descoperit de cititor, folosind Help-ul.

Codul sursa al acestei aplicatii este:

Private Sub Drive1_Change()

Dir1.Path = Drive1.Drive 'Sincronizare

End Sub

Private Sub Dir1_Change()

File1.Path = Dir1.Path 'Sincronizare

End Sub

Private Sub cmdAfiseaza_Click()

'Aflam calea si numele fisierului

x = File1.Path & '' & File1.FileName

Open x For Input As #1 'Deschid fisierul

'Citesc din fisier linie cu linie pina la capat

Do Until EOF(1)

Line Input #1, a

'Form2.Show

'Form2.Print a



Close #1

End Sub

Private Sub cmdExit_Click()

End

End Sub

Acest exemplu contine multe informatii valoroase care ar putea fi folosite in propriile aplicatii. Printre comentarii exista 'Form2.Show si 'Form2.Print a care nu sunt altceva decat intentia de a folosi pentru afisare o alta forma. Încercati sa abordati si aceasta problema, eventual cereti ajutor de la profesor.

Aplicatii cu mai multe formulare

În acest paragraf veti invata cum sa construiti aplicatii cu mai multe formulare, adica aplicatii concrete asa cum se gasesc ele in realitate.

Aplicatiile de pana acum constau dintr-o singura forma pe care se puneau obiectele. Aceste aplicatii sunt simple, rostul lor este sa ne obisnuim cu programarea in Visual Basic.

E greu sa ne imaginam o aplicatie cat de cat serioasa care sa aiba numai o forma. Lucrul cu mai multe forme implica o disciplina severa, o gestionare atenta a intregului proiect.

Inserarea unor noi forme

Atunci cand privim mediul de programare Visual Basic, apare prima forma a aplicatiei, cea implicita, avand numele implicit Form1. Pe aceasta forma incepem sa asezam obiectele aplicatiei, din care nu va lipsi unul sau mai multe butoane de comanda.

Daca pe o forma avem multe obiecte si aceasta devine foarte incarcata este cazul sa ne gandim la o solutie de a o imparti in mai multe forme. Aici rolul experientei isi spune cuvantul. Mai intai trebuie sa schitam pe hartie, cam ce face aplicatia apoi sa incercam sa proiectam formele necesare.

În principiu, se gandeste o forma principala numita, de regula frmMain care are urmatoarele atributii:

Porneste aplicatia

Deschide alte forme

Închide aplicatia.

Toate formele aplicatiei vor directa programul spre frmMain, atunci cand sunt inchise. Din forma principala se poate merge intr-o alta forma sau se poate inchide aplicatia.

Pentru a insera o noua forma folosim comanda Project - AddForm, care va primi numele implicit Form2, sau alt indice care urmeaza la rand. În urma acestei comenzi va apare o forma goala la fel ca la deschiderea proiectului. În fereastra Project Explorer va apare si numele noii forme.

Proprietatile obiectului Form

Fiind un obiect ca toate celelalte, obiectul Form are proprietati care pot fi schimbate in functie de necesitati. În continuare vor fi descrise principalele proprietati ale acestui obiect.

Name - nelipsita proprietate a tuturor obiectelor, care da numele lui, avand prefixul frm.

Caption - ceea ce apare in bara de titlu a formei.

Font - returneaza fontul folosit

Height, Width - determina inaltimea, respectiv latimea formei

Min Button, Max Button - determina daca forma are buton de minimizare, respectiv maximizare

Moveable - determina daca forma poate fi miscata pe ecran

Visible - determina daca forma este vizibila sau nu. Atunci cand vrem sa facem invizibila o forma vom scrie in cod: frmNume.Visible = False

Aceste proprietati vor deveni foarte familiare pe masura ce se va aduna experienta in programarea VB.

Folosirea variabilelor locale si globale

Fiecare forma are in spatele ei proceduri si functii legate de obiectele apartinatoare formei. De asemenea, exista asa numitele module standard care contin proceduri si functii care nu sunt legate de o forma. Toate aceste proceduri folosesc variabile care pot fi locale sau globale. Într-o lectie anterioara s-a vorbit despre aceste variabile dar ele vor fi intelese cu adevarat abia acum.

Declararea variabilelor se face cu instructiunea Dim. Dupa locul in care se gaseste aceasta instructiune vom determina valabilitatea variabilei declarate. Daca la inceputul modulului formei, sectiunea numita General include instructiunea Option Explicit aceasta obliga declararea in prealabil a tuturor variabilelor folosite. Daca aceasta instructiune lipseste, toate variabilele vor fi declarate variant, ceea ce duce la un consum mai mare de memorie.

Daca variabila este declarata in interiorul unei proceduri, ea se numeste variabila locala, adica exista numai in interiorul acelei proceduri:

Private Sub Nume_procedura()

Dim x1 As Integer 'x1 este variabila locala

.

.

End Sub

Variabila x1 va dispare dupa ce iesim din procedura, deci nu va mai putea fi folosita in alte proceduri.

Pentru ca variabilele sa poata fi utilizate in toate procedurile unui modul, instructiunea Dim va fi plasata in sectiunea "General", asa cum se vede in secventa urmatoare:

Option Explicit

Dim raza As Double

Dim aria As Double

Const PI As Double = 3.1416

Sub Calcul()

aria = PI * raza ^ 2

'

'

End Sub

Sub evaluare()

Dim taxateren As Double

If aria > 500 Then

taxateren = 10000

Else

taxateren = 0

End If

End Sub

Variabilele raza si aria sunt variabile care nu-si pierd valoarea cand se termina procedura in care sunt utilizate. Ele se numesc variabile globale de modul. Ele pot fi folosite in oricare procedura a modulului respectiv.

Daca in locul instructiunii Dim se utilizeaza Public, toate modulele-standard si toate form-urile aplicatiei vor putea lucra cu variabilele astfel declarate. Acestea se numesc variabile globale de aplicatie, pentru ca sunt valabile in orice procedura sau forma a aplicatiei. Aceste variabile nu se pot declara intr-o procedura Sub End Sub.

Este foarte important sa gandim bine, care sa fie variabile locale si care variabile globale. Nu trebuie abuzat de folosirea variabilelor globale care pot consuma inutil memorie. Daca o variabila locala si una globala au acelasi nume nu este nici un conflict, deoarece variabila locala este mai "puternica" fara sa afecteze variabila globala care ramane la aceeasi valoare.

Exemplu practic de aplicatie cu mai multe form-uri

Acest exemplu isi propune rezolvarea ecuatiei de gradul II, avand mai multe metode de introducere a datelor initiale (coeficientii a, b si c), cum ar fi:

Introducerea coeficientilor de la tastatura, din textBox-uri.

Introducerea coeficientilor din comboBox-uri.

Introducerea coeficientilor din listBox-uri.

Introducerea coeficientilor din fisier.

Pentru fiecare metoda de introducere este nevoie de o alta interfata, in cazul nostru de 4 forme plus una care se deschide prima si care ne da posibilitatea de a le deschide pe celelalte, numita in general frmMain.

Mai intai trebuie sa ne gandim cum vor arata formele, pentru aceasta vom face schite pe hartie si o schema de functionare a aplicatiei. În final trebuie sa obtinem ceva asemanator cu ce se vede in figura 15.10.

frmTastatura

 

frmCombo

 


Fig.15.10. Cele 5

form-uri ale

aplicatiei

 

frmMain

 

frmList

 

frmFisier

 

Cand porneste aplicatia trebuie sa se activeze form-ul frmMain. De aici, in functie de optiunea aleasa, se pot activa oricare din cele 4 form-uri (frmTastatura, frmCombo, frmList, frmFisier). Se observa ca fiecare din form-urile satelit contin obiectele corespunzatoare metodei alese.

Cum se procedeaza?

Mai intai se creeaza frmMain ca si pana acum, cand aveam numai o forma. Pentru crearea celorlalte se procedeaza astfel:

Iata numele obiectelor de pe fiecare forma:

frmMain - fraInput

fraRez

optTast



optCombo

optList

optFisier

chkBold

chkItalic

chkFisier

cmdOK

cmdExit

frmTastatura - 7 etichete, a, b, c, x1, x2, si cele cu text din partea de sus, respectiv din partea de jos a formei care se numeste lblFisier care se va folosi si in cod.

txtA

txtB

txtC

txtX1

txtX2

cmdRez

cmdExit

frmCombo - 6 etichete, a, b, c, x1, x2, respectiv textul din partea de jos care are numele lblFisier

cboA

cboB

cboC

txtX1

txtX2

cmdRez

cmdExit

frmList - la fel ca si frmCombo unde comboBox se inlocuieste cu listBox

frmFisier - 4 etichete, 2 textBox-uri si 2 butoane de comanda.

!! Atentie mare la denumirile obiectelor de pe fiecare forma.

Dupa ce s-au definitivat toate form-urile urmeaza scrierea codului asociat fiecareia. Pentru aceasta, afisam pe rand fiecare forma si incepem scrierea codului. Pentru fiecare buton de comanda de pe fiecare forma se va scrie cate o procedura.

În continuare se va prezent codul sursa pentru fiecare forma.

Procedurile din formularul frmMain

Private Sub cmdExit_Click()

End

End Sub

Private Sub cmdOK_Click()

If optTast = True Then

frmTastatura.Visible = True

frmMain.Visible = False

ElseIf optCombo = True Then

frmCombo.Visible = True

frmMain.Visible = False

ElseIf optList = True Then

frmList.Visible = True

frmMain.Visible = False

Else

frmFisier.Visible = True

frmMain.Visible = False

End If

End Sub

Procedurile apartinind formei frmTastatura

Private Sub cmdExit_Click() 'Revenire la forma principala

frmTastatura.Visible = False

frmMain.Visible = True

End Sub

Private Sub cmdRez_Click()

'Reseteaza Bold si Italic dintr-o eventuala setare anterioara

lblFisier.Visible = False

txtX1.FontBold = False

txtX2.FontBold = False

txtX1.FontItalic = False

txtX2.FontItalic = False

'Citeste coeficientii a,b,c din TextBox-uri

a = Val(txtA.Text)

b = Val(txtB.Text)

c = Val(txtC.Text)

'Rezolva ecuatia de gr II

d = b * b - 4 * a * c

If d >= 0 Then

X1 = (-b + Sqr(d)) / (2 * a)

X2 = (-b - Sqr(d)) / (2 * a)

'Solutiile se scriu in TextBox -uri

txtX1 = X1

txtX2 = X2

'Solutiile se scriu si in fisierul radacini

Open 'c:MocianAplicatiiVBradacini.txt'For Output As #1

Write #1, X1

Write #1, X2

Close #1

'Daca e cazul se face vizibila scrierea in fisier

If frmMain.chkFisier = 1 Then

lblFisier.Visible = True

End If

'Daca e activat Bold, scriu solutiile cu Bold

If frmMain.chkBold = 1 Then

txtX1.FontBold = True

txtX2.FontBold = True

End If

'Daca e activat Italic, scriu solutiile cu Italic

If frmMain.chkItalic = 1 Then

txtX1.FontItalic = True

txtX2.FontItalic = True

End If

Else: MsgBox ('Radacini imaginare')

End If

End Sub

Procedurile formei frmCombo

'De remarcat procedura Form_Load care incarca ComboBox -urile

Private Sub cmdExit_Click() 'Vizualizez forma principala

frmCombo.Visible = False

frmMain.Visible = True

End Sub

Private Sub cmdRez_Click()

'Resetez eventualele setari anterioare

lblFisier.Visible = False

txtX1.FontBold = False

txtX2.FontBold = False

txtX1.FontItalic = False

txtX2.FontItalic = False

'Citesc valorile coeficientilor din ComboBox

aa = cboA.ListIndex

a = Val(cboA.List(aa))

bb = cboB.ListIndex

b = Val(cboB.List(bb))

cc = cboC.ListIndex

c = Val(cboC.List(cc))

'Rezolv ecuatia de gr. II

d = b * b - 4 * a * c

If d >= 0 Then

X1 = (-b + Sqr(d)) / (2 * a)

X2 = (-b - Sqr(d)) / (2 * a)

'Scriu solutiile in TextBox -uri

txtX1 = X1

txtX2 = X2

'Scriu solutiile si in fisier

Open 'c:MocianAplicatiiVBradacini.txt'For Output As #2

Write #2, X1

Write #2, X2

Close #2

'Daca e cazul fac vizibila scrierea in fisier

If frmMain.chkFisier = 1 Then

lblFisier.Visible = True

End If

'Daca e activat Bold, scriu solutiile cu Bold

If frmMain.chkBold = 1 Then

txtX1.FontBold = True

txtX2.FontBold = True

End If

'Daca e activat Italic, scriu solutiile cu Italic

If frmMain.chkItalic = 1 Then

txtX1.FontItalic = True

txtX2.FontItalic = True

End If

Else: MsgBox ('Radacini imaginare')

End If

End Sub

Private Sub Form_Load()

cboA.AddItem '1'

cboA.AddItem '2'

cboA.AddItem '3'

cboA.AddItem '4'

cboA.AddItem '5'

cboB.AddItem '1'

cboB.AddItem '2'

cboB.AddItem '3'

cboB.AddItem '4'

cboB.AddItem '5'

cboC.AddItem '1'

cboC.AddItem '2'

cboC.AddItem '3'

cboC.AddItem '4'

cboC.AddItem '5'

End Sub

Procedurile formei frmList sunt aproape identice cu cele ale formei frmCombo asa ca nu vor mai fi listate. Scrierea acestor proceduri va fi un bun prilej pentru a va demonstra ca ati inteles bine programarea in Visual Basic.

Procedurile formei frmFisier

'Citirea coef se face din fisierul 'abc.txt'

Private Sub cmdExit_Click() 'Fac vizibila forma principala

frmFisier.Visible = False

frmMain.Visible = True

End Sub

Private Sub cmdRez_Click()

'Resetez eventualele setari anterioare

lblFisier.Visible = False

txtX1.FontBold = False

txtX2.FontBold = False

txtX1.FontItalic = False

txtX2.FontItalic = False

'Citesc coeficientii din fisier

Open 'c:MocianAplicatiiVBabc.txt' For Input As #1

Line Input #1, aa

Line Input #1, bb

Line Input #1, cc

a = Val(aa)

b = Val(bb)

c = Val(cc)

'Rezolv ecuatia de gr. II

d = b * b - 4 * a * c

If d >= 0 Then

X1 = (-b + Sqr(d)) / (2 * a)

X2 = (-b - Sqr(d)) / (2 * a)

'Scriu solutiile in TextBox -uri

txtX1 = X1

txtX2 = X2

'Scriu solutiile si in fisier

Open 'c:MocianAplicatiiVBradacini.txt'For Output As #2

Write #2, X1

Write #2, X2

Close #2

'Daca e cazul fac vizibila scrierea in fisier

If frmMain.chkFisier = 1 Then

lblFisier.Visible = True

End If

'Daca e activat Bold, scriu solutiile cu Bold

If frmMain.chkBold = 1 Then

txtX1.FontBold = True

txtX2.FontBold = True

End If

'Daca e activat Italic, scriu solutiile cu Italic

If frmMain.chkItalic = 1 Then

txtX1.FontItalic = True

txtX2.FontItalic = True

End If

Else: MsgBox ('Radacini imaginare')

End If

Close #1

End Sub

Pentru o buna intelegere a codului sursa, acesta a fost comentat (randurile cu font italic cu apostrof in fata). Se poate observa, de asemenea, cum se folosesc anumite proprietati ale obiectelor intr-un caz concret, cum ar fi ascunderea unei etichete atunci cand nu e nevoie de ea. Anuntul cu scrierea in fisier a radacinilor trebuie sa apara numai daca a fost setata aceasta optiune in frmMain.

Se observa ca totdeauna se scriu solutiile in fisier, dar nu totdeauna suntem anuntati de acest lucru. Încercati sa modificati programul pentru ca scrierea in fisier sa nu se faca decat atunci cand optam pentru aceasta.

Aplicatia prezentata poate fi o sursa de documentare pentru incepatori, avand in vedere ca ea contine obiectele de baza ale limbajului Visual Basic, cum sunt butoanele de comanda, casetele de text, casetele cu lista, casetele combinate, etichetele, cadrele(frame), butoanele de optiune si casetele de control. Codul fiind comentat intelegerea lui este foarte usoara. Orice program ati scrie, puteti lua de aici diferite tehnici (cum ar fi scrierea si citirea din fisiere). Unele abordari sau tehnici le puteti perfectiona, acest lucru va fi foarte apreciat de profesor.







Politica de confidentialitate





Copyright © 2024 - Toate drepturile rezervate

Informatica


Access
Adobe photoshop
Autocad
Baze de date
C
Calculatoare
Corel draw
Excel
Foxpro
Html
Internet
Java
Linux
Mathcad
Matlab
Outlook
Pascal
Php
Powerpoint
Retele calculatoare
Sql
Windows
Word


CONCEPTE DE BAZA ALE TEHNOLOGIEI INFORMATIEI
Convertorul analog numeric
PROIECT PBD - Site cu baze de date despre filme
Efectul Stroop. Implicatii ale cuvintelor tabu in Efectul Stroop.
CALCUL TABELAR
Controlul accesului
PROTEJAREA DATELOR TRANSFERATE
Subiectul - Examen sisteme informatice
PROIECT DE DIPLOMA - Aplicatie software pentru gestiunea resurselor umane
PROIECT SISTEME PENTRU PRELUCRARI GRAFICE - CHICKEN INVADERS




termeni
contact

adauga