Biologie | Chimie | Didactica | Fizica | Geografie | Informatica | |
Istorie | Literatura | Matematica | Psihologie |
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.
Close #1, #2, #20
Î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:
#dd-mm-yy hh:mm:ss#;
#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
Controlul CommonDialog contine mai multe tipuri de casete de dialog, dupa cum urmeaza:
Î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:
Metodele casetei de dialog CommonDialog sunt urmatoarele:
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:
Aceste controale se pot combina astfel:
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.
Copyright © 2024 - Toate drepturile rezervate