You are on page 1of 166

Bogdan Ptru (coordonator) Andreea Schmidt Anca Ioana Capr Mirela Vrnav Claudiu Cuneac Ctlin Ciocoiu Ionel

onel Butucaru

PROGRAMAREA CALCULATOARELOR ELECTRONICE. NDRUMAR PENTRU LABORATOR

EduSoft 2005

Redactor: Iulian Marius FURDU

Descrierea CIP a Bibliotecii Naionale a Romniei


Programarea calculatoarelor electronice : ndrumar pentru laborator / coord.: Bogdan Ptru ; Andreea Schmidt, Anca Ioana Capra, .... - Bacu : EduSoft, 2005 Bibliogr. ISBN 973-87496-1-1 I. Ptru, Bogdan (coord.) II. Schmidt, Andreea III. Capra, Anca Ioana 004.42

Copyright 2005 Editura EduSoft Toate drepturile asupra prezentei ediii sunt rezervate Editurii EduSoft. Reproducerea parial sau integral a coninutului, prin orice mijloc, fr acordul scris al Editurii EduSoft este interzis i se va pedepsi conform legislaiei n vigoare.

Editura EduSoft 600065 Bacu, str. 9 Mai, nr. 82, sc. C, ap. 13 E-mail: contact@edusoft.ro, Web: www.edusoft.ro

ISBN 973-87496-1-1

Bogdan Ptru (coordonator) Andreea Schmidt Anca Ioana Capr Mirela Vrnav Claudiu Cuneac Ctlin Ciocoiu Ionel Butucaru

PROGRAMAREA CALCULATOARELOR ELECTRONICE


ndrumar pentru laborator
- culegere de programe n Visual Basic -

EduSoft 2005
3

Bogdan Ptru Bogdan a absolvit Facultatea de Informatica din Universitatea "Al. I. Cuza" Iai n 1994. Este lector drd. la Universitatea din Bacau, Catedra de Matematic-FizicInformatic, unde ine cursuri de Programarea calculatoarelor electronice, Sisteme expert de gestiune i Sisteme informatice de asistare a deciziei la studenii de la contabilitate i informatic de gestiune. A publicat 11 cri (9 la Editura Teora), a publicat peste 25 articole tiinifice de specialitate i este coautor al unei invenii brevetate OSIM i a unui contract de cercetare CNCSIS. Este pasionat de informatic, pictur i familia sa. Adresa e-mail: bogdan@ub.ro Andreea Schmidt Andreea a absolvit Colegiul National Gh.Vranceanu, profilul matematicainformatica, intensiv engleza. In prezent este studenta la Universitatea din Bacau, specializarea Contabilitate si Informatica de Gestiune, anul II. Este pasionata de sport, literatura si nu in ultimul rand de informatica. Poate fi contactat la adresa andreea_schmidt@yahoo.com Anca Ioana Capra Dupa patru ani de matematica-informatica (intensiv engleza) la Colegiului National Vasile Alecsandri,. Anca s-a gandit sa-si ontinue studiile la specializarea Contabilitate si Informatica de Gestiune, fiind studenta la Universitatea din Bacau,. Este pasionata de informatica, muzica, animale, inot si calatorii. Poate fi contactat la adresa anca_3107@yahoo.com

Mirela Elena Varnav Mirela isi continua studiile incepute la Colegiului Economic Ion Ghica, profil finante-contabilitate. Acum este studenta la Universitatea din Bacau, specializarea Contabilitate si Informatica de Gestiune anul II. Pasionata de muzica, dans, informatica si calatorii, adora sa faca plaja si sa manance in fata televizorului si a calculatorului. Cand nu sta la TV, o puteti gasi prin e-mail la adresa mirela_varnav@yahoo.com Claudiu Dan Cuneac Absolvent al Colegiului Economic Ion Ghica, profil matematica-informatica. Acum este student al Universitatii Bacau, Facultatea de Stiinte Economice, sectia Contabilitate si Informatica de gestiune. Pentru informatii suplimentare il gasiti pe Claudiu la cursuri sau prin e-mail la adresa cauneacclaudiu@yahoo.co.uk

Ciocoiu Catalin Catalin este absolvent al Colegiului Teoretic Henri Coanda, sectia matematicainformatica. In prezent este student la Universitatea Bacau, Facultatea de Stiinte Economice, sectia Contabilitate si Informatica de Gestiune. Este pasionat de informatica si tot ce este nou in domeniul IT&C. Adresa de e-mail este: ciocoiu_catalin@k.ro

Ionel Butucaru Iubeste viata, karate-ul, natura, stiintele exacte si jocurile PC. Ionel a terminat liceul Dumitru Mangeron la matematica-fizica. In prezent este student la Univesitatea din Bacau, la Contabilitate si Informatica de Gestiune. Un campion neintrecut la mancare, dar totusi reuseste sa se mentina in forma. Adresa sa de e-mail este: ionutz84_sos@yahoo.com. 4

Cuprins
Mrturisire 6 7 35

Introducere in Visual Basic prin exemple (Bogdan)

1. Programe simple cu butoane de comanda i casete de text (Andreea, Ctlin) 2. Programe simple (Mirela, Ionu, Ctlin) 38

3. Programe cu liste, casete de validare, butoane de opiune i tabele (Anca, Andreea) 4. Programe diverse (Anca, Ctlin, Ionu) 117 136

70

5. Programe cu elemente avansate ale mediului Visual Basic (Claudiu) 6. O aplicaie concret, pas cu pas (Andreea) Bibliografie 166 152

Mrturisire

Am nceput aceast carte ca pe o glum. n stilul vorbelor pe care le arunc de multe ori la curs, ca s-i ncurajez pe studenii mei s lucreze (sau alteori ca s-i sperii puin!), am spus la una dintre ntlnirile mele cu studenii anului II Contabilitate i Informatic de Gestiune, 2005: "Nu vrei s m ajutai s scriem o culegere de aplicaii n Visual Basic? Cine m ajut va lua 10 la examen.". Nu (cred c) era prima dat cnd lansasem o asemenea invitaie studenilor mei, dar de fiecare dat se ntmpla la fel: nimeni nu era interesat, din diverse motive: fie c nu doreau pur i simplu s ia 10, fie c nu doreau s munceasc, fie c nu credeau c sunt ei n stare s realizeze aa ceva (mai ales c de abia ncepusem s predau materia respectiv), fie c nu credeau c m voi ine de cuvnt, fie c nu le repetam sau nu le spuneam ntr-un mod convingtor acest lucru. Nu tiu dac eu nsumi credeam c pot face o carte mpreun cu studenii mei. Mrturisesc faptul c nu credeam c se poate aa ceva n Universitatea Bacu. Dar iat c n anul II CIG din 2005 am avut surpriza s ntlnesc tineri ambiioi, condui de dorina de a lua 10 (nu tiu), sau de pasiunea pentru ceea ce se ntrezarea a fi programarea n Visual Basic (a vrea s fie aa). Cu ei am realizat aceast culegere de probleme. Ea va servi, n primul rnd, colegilor lor, nu puini la numr, care au picat examenul i care au timp la dispoziie o var ntreag s o studieze. Ar putea fi considerat un gest frumos din partea celor mai buni, pentru cei mai puini buni. De fapt, aceast culegere e scris de ei. Eu nu am fcut dect s o tehnoredactez, s mai corectez pe ici pe colo i, firete, s coordonez acest colectiv tnr. Aa c, dai-mi voie s m numesc coordonator al crii (n fond asta ar trebui s fie un profesor, nu-i aa?). n rest, autorii au 19-20 ani i sunt tineri ca i voi, cndva "lupttori" cu programarea n Visual Basic i poart nume obinuite: Andreea, Anca, Mirela, Ctlin, Claudiu i Ionel. Dar v asigur c sunt nite tineri care mi-au fcut o impresie bun neobinuit!

Bogdan Ptru,
martie 2005

Introducere in Visual Basic prin exemple (Bogdan)


1. Pornirea mediului de programare Visual Basic 5
Se poate face n mai multe moduri, de exemplu: 1. Dublu-click pe iconia corespunztoare, dac exist o asemenea iconi pe Desktop-ul calculatorului ("masa de lucru") 2. Acionnd butonul Start din partea de stnga joc a ecranului, apoi opiunea Programs, apoi alegnd grupul Microsoft Visual Basic 5 i, n final, Microsoft Visual Basic 5. La pornire vei fi ntmpinat de un ecran precum cel din figura de mai jos i, pentru a crea o aplicaie executabil standard, deocamdat vei alege "Standard exe" i vei aciona butonul Open.

Dup aceasta, Visual Basic va arta ca n figura urmtoare, n care am pus n eviden principalele elemente care ne intereseaz pentru dezvoltarea unor aplicaii simple.

1. Remarcai c suntei n faza de 2. Butoanele de pornire i

3 View Code i View 4 Forma = programul tu 5 Structura proiectului tu

6. Controalele ce vor fi amplasate pe forma ta i vor fi programate de tine

7. Tabelul cu proprietile formei sau ale controalelor de pe ea

Aadar, urmrete cu atenie cele 6 zone din mediul VB5, fiecare avnd importana ei i mai trziu vei nelege mai bine la ce ajut fiecare. Deocamdat i spun c un program (aplicaie sau proiect) VB este compus din una sau mai multe forme. Acestea sunt ferestre ca cele din Windows, aa cum arat i forma ta Form1, din centrul ecranului (vezi zona 4). Deocamdat vom realiza mpreun programe ce vor folosi doar o singur form, dar dac te vei descurca bine vom trece i la programe cu mai multe forme. Structura proiectului tu se prezint n zona 5. Pe forme pot fi amplasate diferite obiecte, precum butoane de comand, casete de text, liste derulante sau tot felul de alte elemente de interfa pe care le-ai ntlnit n mai toate aplicaiile din Windows (vezi zona 6). Vom numi aceste obiecte controale. Ele, ca i forma, dealtfel, pot fi personalizate, stabilind diferite valori pentru proprietile lor, precum culoare, font, poziie (vezi zona 7). Pentru ca ele s acioneze n sensul dorit de tine, va trebui s le atam anumite proceduri sau subrutine, adic mici buci de cod, adic de program, scrise n Visual Basic. Dac vrei s faci trecerea de la vizualizarea interfeei la vizualizarea codului i napoi, va trebui s apei pe butoanele din zona 3. Aplicaia ta este deja funcional, dac o vei porni:vei avea o fereastr simpl, forma Form1, pe care o poi muta, redimensiona i nchide, ca orice fereastr din Windows. Deocamdat eti n faza de proiectare (design), iar de acest lucru i poi da seama n mai multe feluri. n zona 1 apare scris, printre altele, cuvntul "design". Pe de alt parte, Form1 are o serie de puncte pe ea, care nu sunt altceva dect punctele fixe ale unei grile, care te poate ajuta la amplasarea mai exact a controalelor pe form. n plus, n zona 2, butonul Start (ce seamn cu butonul Play de la orice casetofon) este activ, pe cnd celelalte dou nu. Dac vrei s porneti aplicaia, trebuie s acionezi pe butonul Start sau pe tasta F5. Cuvntul "design" din zona 1 va fi nlocuit de cuvntul "run" (deci aplicaia ruleaz), grila de pe Form1 va disprea, iar butonul Start va deveni inactiv, dar se vor activa celelalte dou butoane (ne intereseaz 8

butonul End). Abia acum poi muta sau redimensiona fereastra ta, iar dac vrei s opreti programul, vei apsa pe butonul End din zona 2 sau pe X-ul din colul dreapta-sus al ferestrei Form1.

2. Primul tu program
Ca s realizezi primul tu program n VB care s arate puin altfel, s fie personalizat, i s mai i fac ceva, trebuie s priveti cu atenie tabelul de proprieti din dreapta. Acolo sunt trecute proprietile obiectului curent selectat, n cazul nostru Form1. n stnga tabelului sunt trecute proprietile, n ordine alfabetic, iar n dreapta valorile lor. De exemplu, proprietatea BackColor desemneaz culoarea de fundal a formei, care are valoarea ButtonFace (n general gri) i o poi modifica, de exemplu, n albastru, ales din paleta de culori. O alt proprietate este Caption, care reprezint textul scris n antetul formei. Scrie acolo, n loc de "Form1", textul "Primul meu program". Ai grij s nu confunzi proprietatea Caption cu proprietatea (Name), care apare prima n tabelul de proprieti i desemneaz chiar numele formei tale (Form1). Schimb i proprietatea BorderStyle la valoarea 1-Fixed Single, pentru ca fereastra ta s nu mai poat fi redimensionat n timpul rulrii programului tu. Dac mai amplasezi pe form, prin drag and drop, un buton de comand, dup ce l-ai ales din bara de instrumente din zona 6, el va aprea att cu numele Command1, dar i cu proprietatea Caption avnd valoarea tot Command1. Schimb-o n "Salut". Ai grij ca nu cumva s schimbi proprietatea Caption de la Form1! Pentru a schimba valoarea unei anumite proprieti a unui anumit obiect, trebuie ca mai nainte s selectezi acel obiect, de exemplu printr-un simplu Click pe el. Pornete acum programul tu i, dei dac apei pe butonul Command1 (pe care st scris cuvntul "Salut") nu se ntmpl nimic, oricum arat mai bine!

Hai s facem ca atunci cnd apei pe butonul acesta s apar un mesaj, cu textul "Bun ziua!". Ei bine, ca s determinm calculatorul/programul s se comporte aa, va trebui s tii c atunci cnd acionezi ntr-un fel sau altul (de exemplu prin click de mouse) pe un control sau pe o form, VB nelege c ai produs un anumit eveniment. Un asemenea eveniment se numete Click i se produce atunci cnd tu apei simplu cu mouse-ul pe butonul Command1. Pentru a-l face pe calculator s reacioneze la Click-ul utilizatorului pe butonul Command1, va trebui s scriem o subrutin, numit chiar Command1_Click. Aceasta va fi o bucat de cod n VB ce va conine o secven de instruciuni, prin care se precizeaz ce anume trebuie s execute calculatorul/programul, de fiecare dat cnd se execut Click pe butonul Command1. Subrutina va ncepe cu Private Sub urmat de numele ei (Command1_Click) i se va ncheia cu End Sub. 9

Pentru a o scrie, trebuie ca programul tu s fie oprit. Apoi vei alege din zona 2 primul buton (View Code) i vei face click pe el. Deasupra paginii albe care va aprea stau dou liste (n prima scrie (general), iar n a doua (declarations)). Alege din prima controlul cu pricina, adic butonul de comand Command1, iar n a doua va aprea automat cel mai frecvent eveniment asupra unui buton de comand, adic evenimentul Click (dac vei derula lista, vei observa c sunt mult mai multe evenimente acolo, dar pe tine deocamdat doar Click te intereseaz). Dup aceea scrie acest text, ca n figura de mai jos, apas pe View Object (n zona 2) i vei vedea c butonul reacioneaz la apsarea ta.

La apsarea butonului, vei obine urmtoarea caset de mesaj (denumirea procedurii MsgBox tocmai de acolo vine), n care vbInformation este o constant numeric ce simbolizeaz semnul de informaie din caset. Oprete programul i ncearc i vbExclamation sau vbCritical pentru a vedea efectul.

Dac eti n faza de proiectare i vrei s ajungi mai repede la codul asociat unui anumit obiect, poi s faci dublu-click pe respectivul obiect; de exemplu, dac ai dat View Object i execui dublu-click pe butonul Command1, vei ajunge la subrutina Command1_Click, fr s mai acionezi tu pe View Code (n zona 2).

10

3. Un salut special pentru tine!


Vom ncerca s complicm puin exemplul anterior, astfel nct VB s te salute special pe tine sau pe cineva, al crui nume s fie scris ntr-o caset de text. Hai s amplasm, aadar, sub butonul nostru o caset de text. Privete zona 6 i alege de acolo simbolul care conine un "ab" (TextBox). Deseneaz caseta de text sub butonul Command1 i apoi denumete aceast caset Persoana, modificnd proprietatea (Name) (prima din lista lui Text1). terge apoi coninutul din interiorul casetei de text, care era trecut cu valoarea Text1 la proprietatea Text a acestei casete de text.

Aceast caset de text se numea Text1, acum se

E momentul s tii c dac ai un obiect (form sau control) care se numete X i el are o proprietatea P, pentru a face referin la valoarea proprietii P a obiectului X va trebui s notezi acest lucru, n programul tu, prin X.P. Astfel, proprietatea Caption a butonului Command1 (care are valoarea Salut) se noteaz prin Command1.Caption, iar proprietatea Text a casetei de text Persoana prin Persoana.Text. Textul din interiorul casetei de text Persoana va trebui "adugat" sau, mai bine zis, alipit (concatenat) salutului nostru, din subrutina Command1_Click. Aadar, pentru ca s primim un salut pentru persoana al crei nume va fi scris n caseta Persoana (n timpul funcionrii programului), va trebui s modificm subrutina Command1_Click astfel: Private Sub Command1_Click() MsgBox "Buna ziua "+Persoana.Text+"!", "Salutare" End Sub

vbInformation,

Ce se va obine? Dac porneti programul i scrii n caseta de text Diana, vei obine, la apsarea butonului Command1 un salut special pentru Diana:

11

Aadar, simbolul matematic + nseamn, cnd este vorba despre texte, concatenare, adic alipirea unor texte. Probabil ai observat deja c textele (irurile de caractere) constante (precum "Bun ziua" sau "Salutare") se scriu ntre ghilimele (i nu apostrofuri, ca de exemplu n limbajul Pascal). Dac nu vei introduce nimic n caseta de text, atunci nu te atepta dect la un salut ca cel de mai nainte. Astfel, Persoana.Text va fi considerat irul vid (fr nimic n el) i va avea valoarea notat prin "".

4. Un calculator cu operaii aritmetice


Renun la proiectul vechi i ncepe unul nou. Dac vrei s renuni, apei n meniu File->Remove project i i se va cere s-l salvezi. Va trebui s dai un nume att pentru fiierul ce cuprinde forma ta (interfaa i codul ei) Form1, ct i un nume pentru proiectul n ansamblul su. Primul fiier va avea extensia FRM, iar al doilea VBP. Dac mai trziu vei realiza un fiier ce va conine m forme i n module (cod fr interfee), cnd va trebui s salvezi, vei da nume la m+n+1 fiiere, ultimul fiind nsui proiectul, adic un fiier n care se pstreaz informaii despre structura aplicaiei tale. De data aceasta, te rog s amplasezi pe forma ta trei casete de text (fr text n ele), fie ele Operand1, Operand2 i Rezultat (denumete-le aa modificnd proprietile Name de la fiecare), precum i patru butoane, pe care te rog s le denumeti ButonPlus, ButonMinus, ButonOri i ButonSupra, pentru a avea nume mai sugestive pentru cele patru butoane corespunztoare celor patru operaii aritmetice pe care vrem s le implementm n programul nostru. Modific i proprietile Caption de la fiecare din cele patru butoane, punnd pe ele simbolurile +, -, x i :. Dac i se pare c aceste simboluri sunt prea mici pentru butoanele pe care apar, nu ai dect s te foloseti de proprietatea Font i s le mreti sau s le evideniezi (cu Bold).

12

Ataeaz primului buton, cel pentru adunare (ButonPlus) urmtoarea subrutin, care vrea s adune numrul ce va fi scris n caseta Operand1 cu cel din caseta Operand2 i s pun rezultatul n caseta Rezultat. Private Sub ButonPlus_Click() Rezultat.Text = Operand1.Text + Operand2.Text End Sub Acum pornete programul, introdu un numr n caseta Operand1, un altul n caseta Operand2, apas pe butonul de adunare i... vei constata c numerele nu se adun corect.

Dac observi cu atenie, ele sunt considerate ca nite texte care se "adun" precum textele, adic se concateneaz. Acest lucru este firesc, deoarece Visual Basic interpreteaz coninuturile celor dou casete de text (Operand1 i Operand2) ca fiind texte (iruri de caractere sau date de tip String) i nicidecum numere. Pentru ca totul s mearg aa cum ne-am propus, adic s adugm numere, va trebui ca s convertim aceste texte la valorile numerice corespunztoare, cu alte cuvinte s "scoatem" ghilimelele de la "20" i "45", pentru a obine 20 i 45, deci i suma lor 65 i nu 2045. De "scoaterea" ghilimelelor se ocup funcia Val, iar de "punerea lor" se ocup funcia invers ei, numit Str. Corect ar fi s scriem aa: Rezultat.Text=Str(Val(Operand1.Text)+Val(Operand2.Text)), dar conversia de la valoarea numeric la textul necesar casetei Rezultat se face automat, aadar e suficient s nlocuim subrutina greit de mai sus cu cea corect de mai jos: Private Sub ButonPlus_Click() Rezultat.Text = Val(Operand1.Text) + Val(Operand2.Text) End Sub

13

Acum nu ne rmne dect s realizm i celelalte trei subrutine asemntoare, pentru ButonMinus, ButonOri i ButonSupra: Private Sub ButonMinus_Click() Rezultat.Text = Val(Operand1.Text) - Val(Operand2.Text) End Sub Private Sub ButonOri_Click() Rezultat.Text = Val(Operand1.Text) * Val(Operand2.Text) End Sub Private Sub ButonSupra_Click() Rezultat.Text = Val(Operand1.Text) / Val(Operand2.Text) End Sub Indiferent cum ai notat Caption-urile de pe cele dou butoane pentru nmulire i mprire, cnd va trebui s scriei codul vei folosi * pentru nmulire i / pentru mprire. Totul pare acum OK, dar ncearc s mpari un numr oarecare la 0! Vei obine un mesaj de eroare, apoi apas pe End (i nu pe Debug!). E normal, deoarece nu are sens mprirea la zero. Aadar, trebuie s testm dac nu cumva se ncearc o mprire la zero, iar dac mpritorul ar fi 0 s nu se mai realitzeze mprirea, ci s afim un mesaj de eroare, ntr-o caset de mesaj. Aadar, subrutina corect pentru butonul de mprire ar putea fi urmtoarea: Private Sub ButonSupra_Click() If Val(Operand2.Text) = 0 Then MsgBox "Nu se poate imparti la 0!", vbCritical, "Eroare" Else Rezultat.Text = Val(Operand1.Text) / Val(Operand2.Text) End If End Sub sau, echivalent: Private Sub ButonSupra_Click() If Val(Operand2.Text) <> 0 Then Rezultat.Text = Val(Operand1.Text) / Val(Operand2.Text) Else MsgBox "Nu se poate imparti la 0!", vbCritical, "Eroare" End If End Sub Acum programul nu se va bloca la mprirea la zero:

14

5. Butoane de opiune i cadre


S ncepem un nou proiect, n care vom amplasa patru butoane de opiune (Option Button): Option1, Option2, Option3 i Option4, ale cror Caption-uri vor fi respectiv feminin, masculin, nefumator i fumator. Dac amplasai cele patru butoane de opiune n cadrul formei, vei observa, la rularea programului, c nu putei alege dou din ele simultan, cum ar fi feminin i nefumtor, dar ar fi normal s se poat aa ceva.

Atunci tergei cele patru opiuni i desenai dou cadre (Frame), n care vei grupa cte dou opiunile, iar cadrelor le vei pune Caption-urile "Sex" i respectiv "Fumator?", ca n figura urmtoare. Mai mult, alegei valoarea True pentru proprietatea Value a lui Option1 i a lui Option3, deci pentru "feminin" i "nefumator". De data aceasta, vom putea alege, de exemplu, o femeie nefumtoare.. Mai adaug i un buton de comand Command1 i o caset de text Text1, ca n figura urmtoare:

15

Option

Option Option

Option Command Text1 Ne propunem n continuare s scriem subrutina care atunci cnd executm click pe butonul Command1 (cu Caption="Cel fel de om esti?") s primim rspunsul corespunztor n caseta de texte Text1. De exemplu, pentru situaia din figura anterioar ar trebui s obinem "Esti o femeie nefumatoare.". Nu este greu, dac folosim dou instruciuni IF imbricate (una ntr-alta). De remarcat c primul ELSE va corespunde ultimului IF .a.m.d.! Pentru a referi proprietatea Value pentru opiunile Option1, Option2 .c.l, vom scrie Option1.Value, Option2.Value etc. Acestea pot avea valori boolene, deci pot fi True (adevrat) sau False (fals). Discuia celor patru cazuri se va face mai nti dup sex, iar apoi dup faptul dac persoana respectiv fumeaz sau nu. Private Sub Command1_Click() If Option1.Value = True Then ' este femeie If Option3.Value = False Then Text1.Text = "Esti o femeie nefumatoare." Else Text1.Text = "Esti o femeie fumatoare." End If Else 'este barbat If Option3.Value = False Then Text1.Text = "Esti un barbat nefumator." Else Text1.Text = "Esti un barbat fumator." End If End If End Sub Comentariile sunt scrise cu apostrof n fa i ele sunt ignorate de VB; au doar rolul de a ne face pe noi s urmrim mai bine programul pe care l-am scris. Iat un exemplu din timpul funcionrii acestui program:

16

6. Casete de validare
Urmtorul proiect ne va spune ce pasiuni avem, dup ce noi le vom selecta (bifa) dintr-un ir de patru pasiuni disponibile: literatura, muzica, sportul i excursiile. Acestea vor fi reprezentate de patru casete de validare (Check Box), pe care le vom amplasa pe forma noastr i se vor numi Check1, Check2, Check3, respectiv Check4. S le pstrm denumirile originale i s le stabilim valorile pentru proprietile Caption ca fiind: literatura, muzica, sportul i, respectiv, excursiile. Completeaz forma cu un buton de comand (Command1, avnd Caption-ul "Ce pasiuni ai?"), precum i cu o caset de text Text1, fr text n interiorul ei (Text=""). Caut proprietatea MultiLine pentru caseta de text Text1 i stabilete-i valoarea la True, astfel nct textul va aprea acolo pe mai multe linii (dac va fi cazul).

Cnd vei porni programul, vei constata c poi alege 0, 1, 2, 3 sau chiar toate cele patru pasiuni, ceea ce nu se putea n cazul butoanelor de opiune. O alt deosebire ntre casetele de validare (CheckBox) i butoanele de opiune (OptionButton) este c acestea din urm aveau Value de tip Boolean (cu False i True), pe cnd casetele de validare au Value de tip Integer, cu una din valorile 0 = nemarcat, 1 = marcat, 2 = gri, inactiv. Aadar, dac vrem s spunem, de exemplu, c am marcat (bifat) caseta de validare Check1, vom scrie Check1.Value=1.

17

Vrem ca la apsarea butonului de comand s ne apar n caseta Text1 un text de forma: "Pasiunile tale sunt literatura, sportul,". Sunt prea multe posibiliti de a selecta sau nu cele patru pasiuni (mai precis sunt 16 variante), ca s facem o discuie cu IF-THEN-ELSE, aa c vom folosi patru IF-uri (fr ELSE), pentru a vedea dac fiecare din cele patru casete de validare este bifat sau nu. Daca este, atunci Caption-ul ei va fi lipit unui ir de caractere T, iniial vid. Subrutina va fi: Private Sub Command1_Click() T = "" If Check1.Value = 1 Then T = If Check2.Value = 1 Then T = If Check3.Value = 1 Then T = If Check4.Value = 1 Then T = Text1.Text = "Pasiunile tale End Sub

T + Check1.Caption T + Check2.Caption T + Check3.Caption T + Check4.Caption sunt " + T

+ + + +

", ", ", ",

" " " "

7. Vector de controale
Programul anterior are un mic dezavantaj evident: apar patru instruciuni foarte asemntoare scrise una sub alta, iar dac am avea 20 de pasiuni Check1... Check20, ar trebui s scriem practic o instruciune de 20 de ori, cu mici modificri de numere de la un rnd la altul. Mai firesc ar fi s putem vorbi despre un vector de 4 sau 20 asemenea casete de validare, n loc de 4 sau 20 de casete de validare distincte. Un vector grupeaz date de acelai fel, iar Visual Basic ne permite s grupm chiar i controale de acelai fel (n principiu numerotarea indicilor se face de la zero i se pstreaz n proprietatea Index a fiecrui control din vector, n parte). Cel mai simplu mod de a crea un vector de controale este urmtorul: amplasm primul control i-i dm numele pe care vrem s-l aib vectorul; selectm controlul i l copiem n Clipboard (Edit->Copy) apoi readucem copia sa din Clipboard prin lipire (Edit->Paste) i rspundem afirmativ la ntrebarea dac vrem s crem un vector de controale. n cazul nostru, vom amplasa prima caset de validare, o vom numi Check, iar apoi cu o comand Copy i 3 comenzi Paste vom crea restul elementelor din vector. Prima component a vectorului va 18

fi caseta Check(0) (are Index=0), iar celelalte Check(1), Check(2) i Check(3). La componenta Check(1) vom fi ntrebai aa i vom rspunde prin Yes:

Acum putem s adugm i celelalte controale (butonul Command1 i caseta Text1), iar codul butonului, pentru evenimentul Click, va fi urmtorul, mult mai elegant: Private Sub Command1_Click() T = "" For i = 0 To 3 If Check(i).Value = 1 Then T = T + Check(i).Caption + ", " Next i Text1.Text = "Pasiunile tale sunt " + T End Sub

Check(0) Check(1) Comman Check(2)

Check(3)

Text1

8. Liste i proprieti vectori


Listele (simple) (ListBox), ca i casetele combinate (ComboBox) au att proprieti de tipul celor cu care ne-am obinuit deja, avnd tipuri de date elementare, ct i proprieti de tip vectori. Vom discuta despre acestea mai trziu, cnd vom prezenta un exemplu mai complex. Deocamdat te rog s amplasezi n forma ta o list simpl i s scrii mai multe elemente n ea, fiecare pe un singur rnd. Aceste elemente vor fi nite denumiri de fructe i vor fi scrise n proprietatea List, separate de Ctrl+Enter. La final, vei apsa Enter. Noi am scris urmtoarele valori: mere, pere, portocale, caise, ananas, visine,. cirese, prune, gutui, zmeura, capsuni, piersici, dar lista ne afieaz doar primele care ncap i automat creeaz o bar de derulare, pentru a permite vizualizarea i celorlalte elemente (itemi) din list, n timpul rulrii programului: 19

Observ c fructele apare n ordinea n care au fost introduse de noi, dar poate vrei ca ele s apar n ordine alfabetic. Pentru asta va trebui s modifici proprietatea Sorted a listei, din valoarea False n valoarea True. Fructele vor aprea ordonate alfabetic (cresctor) n timpul rulrii programului. De asemenea, dac vrei s poi alege mai multe fructe simultan, va trebui s schimbi valoarea proprietii MultiSelect, de la 0 la 1 sau 2.

n continuare s facem un mic program care, la acionarea listei prin click (mai precis a unui element din ea, selectat sau nu), s ni se afieze ntr-o caset de text Text1 acel element. Trebuie si spun c exist proprietatea Text pe care o au listele i care pstreaz ntotdeauna ultimul element din list pe care s-a fcut click. Astfel, dac MultiSelect=0, atunci acesta este elementul selectat, dar pentru MultiSelect=1 sau MultiSelect=2, va fi doar ultimul element pe care s-a executat Click, ce poate fi selectat sau deselectat napoi. Iat programul: Private Sub Fructe_Click() Text1.Text = Fructe.Text

20

End Sub Lista Fructe

Acesta este ultimul element pe care s-a executat Click

Caseta de text Text1

n continuare micoreaz puin caseta de texte Text1, apoi amplaseaz ntre list i Text1 un buton de comand Command1, aa cum se vede n figura de mai jos.

terge codul subrutinei List1_Click, apoi ataeaz butonului Command1 i evenimentului Click urmtoarea subrutin: Private Sub Command1_Click() n = 0 For i = 0 To Fructe.ListCount - 1 If Fructe.Selected(i) = True Then n = n + 1 End If Next i Text1.Text = n End Sub Efectul va fi urmtorul: vei selecta mai multe fructe din list, iar cnd vei apsa pe buton, numrul lor va aprea n caseta de text Text1.

21

Hai s-i explic cum funcioneaz aceast subrutin. n primul rnd, trebuie s tii c numrul de elemente dintr-o list (de exemplu din lista Fructe) se stocheaz n proprietatea ListCount. Aceast proprietate nu poate fi accesat n faza proiectrii, din tabelul de proprieti, dar poate fi folosit de programator n cod. Elementele listei se pstreaz n proprietatea List, care este o proprietate de tip vector (de iruri de caractere) i sunt numerotate ncepnd de la 0. Aadar, primul fruct din lista noastr va fi Fructe.List(0), al doilea Fructe.List(1), al treilea Fructe.List(2) .a.m.d, iar cum numrul lor este Fructe.ListCount, ultimul va fi Fructe.List(Fructe.ListCount-1). Similar proprietii List este i proprietatea Selected, care este tot un vector, de valori logice (boolene), Fructe.Selected(i) = True nsemnnd c fructul (elementul) respectiv este selectat, iar Fructe.Selected(i) = False nsemnnd c nu. Subrutina anterioar parcurge cu instruciunea FOR lista Fructe i, de fiecare dat cnd gsete un element selectat, crete cu o unitate variabila n (iniial aceasta fiind 0), iar la final depune valoarea n n caseta de text Text1, n reprezentnd acum cte elemente s-au selectat.

9. Metode pentru liste


Aa cum ai observat mai nainte, listele au tot felul de proprieti, fie c ele sunt simple sau structurate (vectori). Dar att listele, ct i alte obiecte mai simple sau mai complexe mai au i metode. Acestea sunt nite aciuni (proceduri) ataate obiectelor respective, de exemplu metoda Clear a unei liste va elimina din list toate elementele sale (o va "cura"). Astfel, dac vrem ca ca n lista de fructe s nu mai fie nici un fruct, atunci va trebui s scriem Fructe.Clear, care este un apelul metodei Clear pentru lista Fructe. De asemenea, dac amplasm o caset de text Text2 i vrem ca s fie adugat elementul din ea, la click pe un buton Command2, va trebui s scriem subrutina: Private Sub Command2_Click() Fructe.AddItem Text2.Text End Sub S amplasm n forma noastr aceste controale (Command2, Text2), precum i nc o list, numit Salata, i un nou buton de comand numit Command3, ca n figura de mai jos.

22

caseta de text Text2 lista Fructe

Comman noua list Salata

Comman

Text1

Comman

Vrem ca la acionarea butonului Command3, toate elementele care au fost selectate n lista Fructe s fie trecute n lista Salata. Iat codul acestei subrutine: Private Sub Command3_Click() Salata.Clear For i = 0 To Fructe.ListCount - 1 If Fructe.Selected(i) = True Then Salata.AddItem Fructe.List(i) End If Next i End Sub Ea funcioneaz astfel: se parcurge lista Fructe i fiecare element i care este selectat (Fructe.Selected(i) = True) se adaug listei Salata (prin Salata.AddItem Fructe.List(i)). Iat i rezultatul:

23

10. Un joc cu imagini i cronometre


n continuare ne propunem s realizm un joc simplu, n care trebuie s omorm, prin click de mouse, nite mute care apar n cinci zone ale formei noastre (n cele patru coluri i n centru). Mutele apar la un anumit interval de timp, iar dac nu le "strivim", vor disprea dup acelai interval de timp. Dac, ns, vom executa click pe ele, ct timp stau vii pe ecran, le vom omor, vom ctiga un punct i apoi vor disprea. Pentru a implementa un asemenea joc, avem nevoie de urmtoarele noi controale: imagini (Image), pentru a reprezenta mutele, i cronometre (Timer) pentru a ine evidena intervalelor de timp i a apariiei/dispariiei mutelor). De fapt, chiar dac juctorul va avea impresia c apar mai multe mute, noi vom folosi cinci controale de tip Image, n care vom avea fie imaginea unei mute vii, fie a unei mute moarte, fie nimic, cu sensul c n zona respectiv nu a aprut n acel moment nici o musc. De asemenea, vom folosi proprietatea Tag pentru a stoca starea mutelor: 0 = lips, 1 = vie, 2 = moart. Proprietatea Tag este comun tuturor controalelor i este folosit pentru a stoca o informaie suplimentar asociat respectivului control. Vom folosi dou fiiere cu imagini, numite "muscav.jpg" pentru musca vie, respectiv "muscam.jpg" pentru cea moart. Un control de tip Image are o proprietate Picture n care se stocheaz imaginea propriu-zis. Acolo trebuie ncrcat imaginea dintr-un fiier, folosind funcia LoadPicture. Astfel, dac avem o musc de indice Index, vom scrie Musca(Index).Picture = LoadPicture(App.Path+"\muscav.jpg") pentru a ncrca imaginea cu musca vie n Musca(Index). App.Path semnific calea aplicaiei noastre, adic directorul n care am salvat proiectul nostru Visual Basic. S ncepem proiectarea interfeei jocului nostru: mai nti amplasm o imagine n centrul ecranului, pe care o denumim Musca. Controlul de tip Image, respectiv cronometru arat astfel:

Apoi, aa cum am multiplicat casetele de text dintr-o seciune anterioar, vom multiplica imaginea noastr, folosind Copy i Paste, formnd un vector de imagini, celelalte patru componente ale vectorului fiind amplasate n colurile formei. Astfel, prima imagine va avea Index-ul 0, iar celelalte patru vor avea Index-ul 1, 2, 3 i respectiv 4, aa ca n imaginea de mai jos:

Musca(1) Musca(2)

Musca(0)

24 Musca(3) Musca(4)

Apoi vom amplasa un cronometru n dreptul imaginii din centru, l vom denumi Crono i, cu Copy i Paste l vom multiplica de 4 ori, crend un vector. Iat rezultatul:

Crono(1)

Crono(2)

Crono(3)

Crono(0)

Crono(4)

Aceste cronometre sunt un exemplu de controale "invizibile", n sensul c ele funcioneaz fr ca s ni se nfieze n vreun fel anume, de aceea poziia lor nici nu conteaz. Ele vor "disprea" imediat ce vom porni programul. Cronometrele au o singur proprietate important numit Interval. Este intervalul de timp dup care intr n aciune. Dup fiecare Interval milisecunde apare evenimentul Timer asupra cronometrulului i noi trebuie s spunem ce vrem ca s se ntmple la fiecare astfel de "tic" al cronometrului. Firete, dac musca asociat nu este pe ecran, atunci ea va aprea vie, iar dac este (vie sau moart) va disprea. O alt subrutin pe care va trebui s o realizm este asociat mutelor i evenimentului Click, prin care noi ncercm s omorm mutele. Dac facem click pe o musc vie, atunci o omorm, iar dac musca nu este facem click degeaba. Tot degeaba facem click i pe o imagine cu o musc moart, deoarece nu putem omor o musc de dou ori. Vorbim de mute vii i moarte, dar vom avea nevoie de cele dou fiiere n care s le pstrm imaginile lor. Ori le desenm noi, ori face rost de ele ntr-un fel sau altul, sau de imagini similare. Iat imaginile folosite de mine:

muscav.jpg

muscam.jpg

Acum e momentul s scriem codul aplicaiei noastre. n primul rnd trebuie s scriem subrutina Form_Load, care este lansat n execuie la pornirea aplicaiei, adic la ncrcarea formei. Aici vom 25

face iniializrile necesare. La nceput nu este nici o musc pe ecran, iar cronometrele vor avea anumite valori pentru intervale. Private Sub Crono_Timer(Index As Integer) If Musca(Index).Tag = 0 Then 'musca nu este Musca(Index).Tag = 1 'musca va aparea vie ' incarcam si imaginea din fisierul muscav.jpg ' din calea curenta a aplicatiei Musca(Index).Picture = LoadPicture(App.Path "\muscav.jpg") Else Musca(Index).Tag = 0 Musca(Index).Picture = LoadPicture() 'sterge musca End If End Sub

n continuare vom scrie subrutina asociat trecerii intervalului de timp pentru un cronometru. Dei sunt cinci cronometre, vom scrie doar o singur subrutin, care va avea ca argument indicele cronometrului. n aceast subrutin trebuie s descriem faptul c dac musca respectiv nu este pe ecran, atunci ea s apar pe ecran vie, iar dac este pe ecran (vie sau moart) s dispar.

Private Sub Form_Load() Crono(0).Interval = 1200 Crono(1).Interval = 1500 Crono(2).Interval = 2000 Crono(3).Interval = 1800 Crono(4).Interval = 1300 For i = 0 To 4 Musca(i).Tag = 0 Next i ' facem fundalul alb pentru forma Form1.BackColor = RGB(255, 255, 255) End Sub Ultima subrutin va descrie ce se ntmpl cnd se execut click pe o musc. Dac este vie va fi omort, iar dac e deja moart sau nu, nu se va ntmpla nimic. Dac vrem ca s existe un punctaj care s creasc la fiecare musc omort, atunci va trebui s declarm ca fiind global variabila punctaj. La (General)(Declarations) vom scrie: Dim punctaj as Integer. Restul modificrilor le vei face tu! Ar fi bine ca, periodic, punctajul s fie reprezentat ntr-o etichet, iar durata jocului s fie controlat de un alt cronometru. Private Sub Musca_Click(Index As Integer) If Musca(Index).Tag = 1 Then Musca(Index).Tag = 2 Musca(Index).Picture = LoadPicture(App.Path "\muscam.jpg") End If End Sub 26

Un asemenea joc este prezentat n cartea mea "Aplicaii n Visual Basic", aprut la Editura Teora, Bucureti, 1998-2003.

11. Tabele
Un control foarte util n dezvoltarea multor aplicaii este Microsoft Flex Grid. Acest control nu poate fi gsit de la bun nceput n bara de instrumente din partea stng a mediului Visual Basic. El trebuie adugat n felul urmtor: din meniul VB alegi opiunea Project, apoi Components... i vei obine o list de alte componente ce pot fi adugate la Toolbox, pentru proiectul tu. Alege din list Microsoft Flex Grid i bifeaz n dreptul acestei componente, apoi apas pe butonul OK. n Toolbox va aprea simbolul controlului acesta:

Apoi vei putea amplasa un tabel (care iniial va fi denumit MSFlexGrid1, dar noi l vom redenumi T, de la tabel). Iniial are dou rnduri i dou coloane, dar putem modifica proprietile Rows i Cols pentru a modifica numrul de rnduri, respectiv de coloane. Te rog s alegi valoarea 10 pentru Rows i 5 pentru Cols. De fapt, rndurile sunt numerotate ncepnd cu 0 i pn la T.Rows-1, iar coloanele de la 0 la T.Cols-1. Observi c primul rnd i prima coloan sunt gri. Ele sunt, de fapt, fixe, inaccesibile evenimentelor Click sau KeyPress. i numrul de rnduri, respectiv coloane fixe se poate schimba, cu ajutorul proprietilor FixedRows i FixedCols.

27

Proprieti foarte importante sunt Row = rndul curent, Col = coloana curent i Text = textul din celula curent. Dac vrem s punem n celula (csua) de pe rndul 2 i coloana 3 informaia (textul) "ABC" vom scrie urmtoarea secven de trei atribuiri: T.Row = 2 T.Col = 3 T.Text = "ABC" O alt modalitate mult mai simpl va folosi proprietatea TextMatrix, care este o matrice a tuturor textelor din tabel. Astfel, acelai lucru se poate scrie mai simplu: T.TextMatrix(2,3)="ABC". Vei observa c toate rndurile au aceeai nlime i toate coloanele au aceeai lime. Cu RowHeight i ColWidth poi s modifici valorile, aceste proprieti fiind vectori. De exemplu, prin atribuirea T.ColWidth(0) = T.ColWidth(0) / 2 vom njumti grosimea primei coloane. Proprietatea AllowUserResizing are diferite valori ce permit utilizatorului s redimensioneze rndurile/coloanele tabelului. n continuare vom prezenta o mic subrutin care apeleaz la evenimentul KeyPress pentru a scrie n celulele tabelului T. Apoi vom folosi aceast subrutin n cadrul unui program care va calcula mediile unor studeni, a cror nume apar n coloana 1, iar notele la teorie i la practic n coloanele 2 i 3. Private Sub T_KeyPress(KeyAscii As Integer) If (KeyAscii = 8) And (T.Text <> "") Then L = Len(T.Text) T.Text = Left(T.Text, L - 1) Else If KeyAscii >= 32 Then T.Text = T.Text + Chr$(KeyAscii) End If End If End Sub 28

Private Sub Command1_Click() For i = 1 To T.Rows - 1 If T.TextMatrix(i, 1) <> "" x = Val(T.TextMatrix(i, y = Val(T.TextMatrix(i, T.TextMatrix(i, 4) = (x End If Next i End Sub

Then 2)) 3)) + y) / 2

Private Sub Form_Load() T.ColWidth(0) = T.ColWidth(0) / 2 T.ColWidth(1) = T.ColWidth(1) * 2 For i = 1 To T.Rows - 1 T.TextMatrix(i, 0) = i Next i T.TextMatrix(0, 0) = "Nr.crt" T.TextMatrix(0, 1) = "Numele si prenumele" T.TextMatrix(0, 2) = "Nota t." T.TextMatrix(0, 3) = "Nota p." T.TextMatrix(0, 4) = "Media" End Sub Private Sub T_KeyPress(KeyAscii As Integer) If (KeyAscii = 8) And (T.Text <> "") Then L = Len(T.Text) T.Text = Left(T.Text, L - 1) Else If KeyAscii >= 32 Then T.Text = T.Text + Chr$(KeyAscii) End If End If End Sub 29

12. Grafice
Ar fi interesant s putem reprezenta grafic notele i mediile acestor studeni. Pentru aceasta vom folosi un alt control, pe care l adugm n aceeai manier ca i pe FlexGrid. Se numete Microsoft Chart Control i are proprieti asemntoare controlului Ms Flex Grid, numai c, n loc de Col apare Column, n loc de Cols apare ColumnCount, n loc de Rows apare RowCount i n loc de Text apare Data. Firete mai apar i alte proprieti, dar te las s le descoperi singur. Amplaseaz un control Ms Chart n forma ta, alturi de tabelul T, alegnd pentru acesta Columns=3, Rows=9. Denumete graficul G i modific la True valoarea proprietii RandomFill. Apoi amplaseaz butonul Command2 i asociaz-i codul de mai jos, care va reprezenta grafic datele din tabelul T. Din pcate Ms Chart nu are o proprietate de genul lui TextMatrix, aa c va trebui s lucrm cu Row, Column i Data. Dup ce scrii subrutina de mai jos, adaug la subrutina Form_Load linia: Command2_Click.

Private Sub Command2_Click() For i = 1 To T.Rows - 1 For j = 2 To 4 G.Row = i G.Column = j - 1 G.Data = Val(T.TextMatrix(i, j)) Next j Next i End Sub

30

13. Fiiere text - s salvm i s restaurm datele


Cu Open cale + nume fiier For Output as #numr putem crea/deschide pentru scriere un fiier text cu numele i calea precizate, asociindu-i numrul 1. Orice referire la acest fiier se va face prin intermediul numrului 1. Pentru ca s operm simultan cu un al doilea fiier, va trebui s folosim un alt numr ntreg. Pentru a aduga la datele existente altele, va trebui ca fiierul text s se deschid prin: Open cale + nume fiier For Append as #numr. Pentru a deschide fiierul n vederea citirii de date din el se folosete: Open cale + nume fiier For Input as #numr. nchiderea unui fiier deschis pentru citire/scriere/adugare se face prin Close #numr. Scrierea de date se face cu Print #numr, expresiile_de_scris, iar citirea cu Input #numr, variabilele_de_citit (pentru numere) sau cu Line Input #numr, variabilele_de_citit (pentru iruri de caractere).

31

Completnd programul nostru cu cele dou butoane (Command3, Command4), ca n figura de mai sus, i scriind subrutinele de mai jos vom putea salva i restaura datele salvate din fiierul text TABEL.TXT: Private Sub Command3_Click() ' salvarea datelor Open App.Path + "\tabel.txt" For Output As #1 For i = 0 To T.Rows - 1 For j = 0 To T.Cols - 1 Print #1, T.TextMatrix(i, j) Next j Next i Close #1 End Sub Private Sub Command4_Click() ' incarcarea datelor Open App.Path + "\tabel.txt" For Input As #1 For i = 0 To T.Rows - 1 For j = 0 To T.Cols - 1 Line Input #1, s T.TextMatrix(i, j) = s Next j Next i Close #1 End Sub

32

14. Ordonarea datelor din tabel


n sfrit, s adugm aplicaiei noastre nc dou butoane, unul pentru a ordona elevii alfabetic (crector dup nume), iar unul pentru ordonarea descresctoare dup medii a elevilor. Ambele subrutinte vor folosi metoda de ordonare prin selecie direct. Detalii despre metodele de sortare pot fi gsite n cursul meu de Programarea calculatoarelor electronice.

Private Sub Command5_Click() For i = 1 To T.Rows - 2 For j = i + 1 To T.Rows - 1 If T.TextMatrix(i, 1) > T.TextMatrix(j, 1) Then For k = 1 To 4 aux = T.TextMatrix(i, k) T.TextMatrix(i, k) = T.TextMatrix(j, k) T.TextMatrix(j, k) = aux Next k End If Next j Next i End Sub Private Sub Command6_Click() For i = 1 To T.Rows - 2 For j = i + 1 To T.Rows - 1 If T.TextMatrix(i, 4) < T.TextMatrix(j, 4) Then For k = 1 To 4 33

aux = T.TextMatrix(i, k) T.TextMatrix(i, k) = T.TextMatrix(j, k) T.TextMatrix(j, k) = aux Next k End If Next j Next i End Sub

Programul poate fi mbuntit n mai multe moduri: pentru a permite un numr variabil de elevi, pentru a cere utilizatorului numele fiierului n care s se salveze datele sau de unde s se restaureze datele i multe altele.

34

Capitolul 1. Programe simple cu butoane de comand i casete de text (Andreea, Ctalin)


Andreea 1. Realizati un program care sa calculeze,la apasarea butonului "Buton", logaritmul unui numar oarecare scris intr-o casuta de text "Numar". Rezultatul sa se afiseze intr-o alta casuta de text, numita "Rezultat". Rezolvare. Casutele de text se amplaseaza cu ajutorul controlului TextBox din Toolbox, se denumesc la proprietatea Name si se goleste continutul lor de la proprietatea Text din tabelul de proprietati din dreapta. Butoanele se amplaseaza cu ajutorul controlului Command Button din Toolbox, se denumesc la proprietatea Name si se scrie in interiorul lor cu proprietatea Caption. Subrutina care calculeaza logaritmul unui numar este urmatoarea:
Private Sub Buton_Click() Rezultat.Text = Log(Numar.Text) End Sub

2. Realizati un program care sa calculeze, la apasarea butonului "Buton", media aritmetica dintre 2 numere scrise in 2 casute de text numite "a", respectiv "b", iar rezultatul sa se afiseze intr-o alta casuta de text numita "Rezultat". Rezolvare. Casutele de text se amplaseaza cu ajutorul controlului TextBox din Toolbox, se denumesc la proprietatea Name si se goleste continutul lor de la proprietatea Text din tabelul de proprietati din dreapta. Butoanele se amplaseaza cu ajutorul controlului Command Button din Toolbox, se denumesc la proprietatea Name si se scrie in interiorul lor cu proprietatea Caption. Subrutina care calculeaza media aritmetica dintre 2 numere este urmatoarea:
Private Sub Buton_Click() Rezultat.Text = (Val(a.Text) + Val(b.Text)) / 2 End Sub

35

3. Realizati un program care sa calculeze, la apasarea butonului "Buton", media armonica dintre 2 numere scrise in 2 casute de text numite "a", respectiv "b", iar rezultatul sa se afiseze intr-o alta casuta de text numita "Rezultat". Rezolvare. Casutele de text se amplaseaza cu ajutorul controlului TextBox din Toolbox, se denumesc la proprietatea Name si se goleste continutul lor de la proprietatea Text din tabelul de proprietati din dreapta. Butoanele se amplaseaza cu ajutorul controlului Command Button din Toolbox, se denumesc la proprietatea Name si se scrie in interiorul lor cu proprietatea Caption. Subrutina care calculeaza media armonica dintre 2 numere este urmatoarea:
Private Sub Buton_Click() Rezultat.Text = 2 / ((Val(1 / Val(a.Text))) + (Val(1 / Val(b.Text)))) End Sub

4. Realizati un program care sa calculeze, la apasarea butonului "Buton", media patratica dintre 2 numere scrise in 2 casute de text numite "a", respectiv "b", iar rezultatul sa se afiseze intr-o alta casuta de text numita "Rezultat". Rezolvare. Casutele de text se amplaseaza cu ajutorul controlului TextBox din Toolbox, se denumesc la proprietatea Name si se goleste continutul lor de la proprietatea Text din tabelul de proprietati din dreapta. Butoanele se amplaseaza cu ajutorul controlului Command Button din Toolbox, se denumesc la proprietatea Name si se scrie in interiorul lor cu proprietatea Caption. 36

Subrutina care calculeaza media patratica dintre 2 numere este urmatoarea:


Private Sub Buton_Click() Rezultat.Text = Sqr(((Val(a.Text) * Val(a.Text)) + _ (Val(b.Text) * Val(b.Text))) / 2) End Sub

5. Realizati un program care sa calculeze, la apasarea butonului "Buton", media geometrica dintre 2 numere scrise in 2 casute de text numite "a", respectiv "b", iar rezultatul sa se afiseze intr-o alta casuta de text numita "Rezultat". Rezolvare. Casutele de text se amplaseaza cu ajutorul controlului TextBox din Toolbox, se denumesc la proprietatea Name si se goleste continutul lor de la proprietatea Text din tabelul de proprietati din dreapta. Butoanele se amplaseaza cu ajutorul controlului Command Button din Toolbox, se denumesc la proprietatea Name si se scrie in interiorul lor cu proprietatea Caption. Subrutina care calculeaza media geometrica dintre 2 numere este urmatoarea:
Private Sub Buton_Click() Rezultat.Text = Sqr(Val(a.Text) * Val(b.Text)) End Sub

37

Capitolul 2. Programe simple (Mirela, Ionu, Catalin)


Mirela 1. Realizati un program care sa calculeze la banca BCR dobanda la luna, suma depusa+dobanda si comisionul retinut pentru depozit. Rezolvare
Private Sub Command1_Click() Text2.Text = (Text1.Text) * (1.1 / 100) Text3.Text = Val(Text1.Text) + Val(Text2.Text) Text4.Text = (Text1.Text) * (0.05 / 100) End Sub

2. Faceti un program care sa calculeze cat reprezinta un procent dat dintr-o suma data.
Rezolvare:
Private Sub Command1_Click() Text3.Text = Text1.Text * (Text2.Text / 100) End Sub Private Sub Command2_Click() Text3.Text = "" Text2.Text = "" Text1.Text = "" End Sub

38

3. Realizati un program care sub comanda unui buton sa afiseze caracterizarea unei persoane in urma bifarii a doua butoane ce corespund unor caracteristici sumare. Rezolvare:
Private Sub Command1_Click() If (Option1.Value = True) And (Option5.Value = True) Then Text1.Text = "Esti un copil coleric" ElseIf (Option1.Value = True) And (Option6.Value = True) Then Text1.Text = "Esti un copil cu temperament sangvinic." ElseIf (Option1.Value = True) And (Option7.Value = True) Then Text1.Text = "Esti un copil melancolic." ElseIf (Option2.Value = True) And (Option5.Value = True) Then Text1.Text = "Esti un adolescent coleric." ElseIf (Option2.Value = True) And (Option6.Value = True) Then Text1.Text = "Esti un adolescent cu temperament sangvinic." ElseIf (Option2.Value = True) And (Option7.Value = True) Then Text1.Text = "Esti un adolescent melancolic." ElseIf (Option3.Value = True) And (Option5.Value = True) Then Text1.Text = "Esti un (o) tanar(a) cu temperament coleric." ElseIf (Option3.Value = True) And (Option6.Value = True) Then Text1.Text = "Esti un (o) tanar(a) cu temperament sangvinic." ElseIf (Option3.Value = True) And (Option7.Value = True) Then Text1.Text = "Esti un (o) tanar(a) melancolic(a)." ElseIf (Option4.Value = True) And (Option5.Value = True) Then Text1.Text = "Esti un adult coleric." ElseIf (Option4.Value = True) And (Option6.Value = True) Then Text1.Text = "Esti un adult cu temperament sangvinic." ElseIf (Option4.Value = True) And (Option7.Value = True) Then Text1.Text = "Esti un adult melancolic." End If End Sub

39

4. Incercati sa faceti un program care sa descrie compatibilitatea dintre doua zodii dupa ce au fost bifate butoanele de optiune aferente zodiilor respective. Rezolvare:
Private Sub Command1_Click() If Option1.Value = True And Option13.Value = True Then Text1.Text = "Pe cat de paradoxala este aceasta relatie, pe atat este ea de puternica. Daca veti face unele compromisuri totul va fi perfect" ElseIf Option1.Value = True And Option14.Value = True Then Text1.Text = "Veti fi fericiti in adevaratul sens al cuvantului. Nu aveti nici un motiv sa intarziati la Primarie." ElseIf Option1.Value = True And Option15.Value = True Then Text1.Text = "Relatia este mediocra si trebuie depuse multe eforturi pt ca ea sa ajunga la un nivel satisfacator." ElseIf Option1.Value = True And Option16.Value = True Then Text1.Text = "Sunteti atat de diferiti temperamental, incat pana si relatiile amicale de la care poate ati pornit se vor distruge in timp." ElseIf Option1.Value = True And Option17.Value = True Then Text1.Text = "Cea mai stralucitoare pereche cu putinta! Inteligenti si puternici, veti fi invidiati de toti de cei din jur." ElseIf Option1.Value = True And Option18.Value = True Then Text1.Text = "Daca nu veti fi prea taiosi unul cu celalalt, aveti toate sansele. " ElseIf Option1.Value = True And Option19.Value = True Then Text1.Text = "Nici macar sa nu incercati. Este un chin inutil." ElseIf Option1.Value = True And Option20.Value = True Then Text1.Text = "Raporturi bune, cu rezultate multumitoare. Daca asta vi se pare suficient, atunci n-aveti decat sa incercati." ElseIf Option1.Value = True And Option21.Value = True Then Text1.Text = "O legatura admirabila, plina de succes si prosperitate." ElseIf Option1.Value = True And Option22.Value = True Then Text1.Text = "Legatura va fi punctata de multe momente tensionate, dar ea are totusi mari sanse de reusita." ElseIf Option1.Value = True And Option23.Value = True Then Text1.Text = "Daca va place aventura, n-aveti decat sa incercati. Dar sa nu va mirati daca iesiti cam sifonati. " ElseIf Option1.Value = True And Option24.Value = True Then Text1.Text = "Daca dispuneti de putin tact si nu-l raniti pe bietul Pestisor, atunci veti fi fericiti."

40

ElseIf Option2.Value = True And Option13.Value = True Then Text1.Text = "Puteti obtine mari succese in acesta formula, daca va iubiti cu adevarat." ElseIf Option2.Value = True And Option14.Value = True Then Text1.Text = "Daca eliminati gelozia si secretele, viitorul va apartine." ElseIf Option2.Value = True And Option15.Value = True Then Text1.Text = "Singura relatie posibila este cea profesionala. In rest, nu va puteti intelege si nici aproba." ElseIf Option2.Value = True And Option16.Value = True Then Text1.Text = "Daca nu vreti sa-i faceti rau, lasati-o in pace si uitati ca v-ati intalnit." ElseIf Option2.Value = True And Option17.Value = True Then Text1.Text = "Aceasta relatie este un fel de competitie, in nici un caz un parteneriat." ElseIf Option2.Value = True And Option18.Value = True Then Text1.Text = "Cea mai buna relatie! Nu ezitati!" ElseIf Option2.Value = True And Option19.Value = True Then Text1.Text = "O relatie palida si rece. Nu veti fi satisfacut nici unul, nici celalalt." ElseIf Option2.Value = True And Option20.Value = True Then Text1.Text = "Daca renuntati la agresivitate, atunci lucrurile vor decurge normal. Dar fericirea este departe." ElseIf Option2.Value = True And Option21.Value = True Then Text1.Text = "Daca Taurul nu va fi tentat sa aiba secrete, atunci relatia va fi una extraordinara" ElseIf Option2.Value = True And Option22.Value = True Then Text1.Text = "O relatie prospera din toate punctele de vedere." ElseIf Option2.Value = True And Option23.Value = True Then Text1.Text = "Desi aveti unele gusturi comune, armonia legaturii d-voastra se va compromite rapid." ElseIf Option2.Value = True And Option24.Value = True Then Text1.Text = "Relatia este bazata pe intelegere si poate decurge linistit si armonios, daca nu sunteti prea pretentiosi." ElseIf Option3.Value = True And Option13.Value = True Then Text1.Text = "Doi oameni tari, inteligenti, dar excesiv de imprastiati. Cadeti de acord mai intai asupra scopului comun." ElseIf Option3.Value = True And Option14.Value = True Then Text1.Text = "Daca o veti convinge sa fie la fel de altruista ca d-voastra, va fi bine. Daca nu, atunci mai bine nu! " ElseIf Option3.Value = True And Option15.Value = True Then Text1.Text = "Este omul de care simtiti atata nevoie, din toate punctele de vedere! Dar s-ar putea sa nu reusiti un camin impreuna, pt ca nu aveti timp pt aceasta. " ElseIf Option3.Value = True And Option16.Value = True Then Text1.Text = "O pereche intr-adevar ideala. Spuneti da fara sa clipiti!" ElseIf Option3.Value = True And Option17.Value = True Then Text1.Text = "Fericirea e la un pas, armonia e ca si instalata...daca scapati de orgoliul dominarii" ElseIf Option3.Value = True And Option18.Value = True Then Text1.Text = "Da, se poate. Dar pregatiti-va, ca aveti de tras!" ElseIf Option3.Value = True And Option19.Value = True Then Text1.Text = "Cooperare, afinitati pe toata linia. Nu veti regreta niciodata!" ElseIf Option3.Value = True And Option20.Value = True Then Text1.Text = "O uniune conditionata. Sunteti prea critic cu slabiciunile ei. Daca o veti intelege, rasplata va fi dubla!" ElseIf Option3.Value = True And Option21.Value = True Then Text1.Text = "Va risipiti degeaba energia. Fericirea cu de-a sila nu se poate!" ElseIf Option3.Value = True And Option22.Value = True Then Text1.Text = "Este o partenera vesnic obosita si nervoasa. Nu va va aduce fericirea dorita." ElseIf Option3.Value = True And Option23.Value = True Then

41

Text1.Text = "Perechea ideala! Nu va speriati daca ea face primul pas, dar nu-i place timiditatea d-voastra." ElseIf Option3.Value = True And Option24.Value = True Then Text1.Text = "Fericirea va ramane o necunoscuta pt d-voastra." ElseIf Option4.Value = True And Option13.Value = True Then Text1.Text = "Foarte greu se va realiza aceasta legatura, dar nu este imposibil." ElseIf Option4.Value = True And Option14.Value = True Then Text1.Text = "Relatia nu este chiar romantica, dar poate fi profitabila pt ambii nativi, pt ca Taurul da dovada de multa inteligenta." ElseIf Option4.Value = True And Option15.Value = True Then Text1.Text = "O combinatie de mare succes. Racul se va simti ocrotita de energicul Gemeni, care va fi foarte magulit de rolul sau." ElseIf Option4.Value = True And Option16.Value = True Then Text1.Text = "Va veti intelege foarte bine atat timp cat o veti lasa pe ea sa conduca jocurile de culise." ElseIf Option4.Value = True And Option17.Value = True Then Text1.Text = "Cea mai profitabila este legatura profesionala. In rest, doar daca doriti sa aveti o aventura..." ElseIf Option4.Value = True And Option18.Value = True Then Text1.Text = "O astfel de relatie nu straluceste prin nimic pt ca cei doi nativi au dorinte si intentii destul de diferite. Mai aveti timp sa va razganditi." ElseIf Option4.Value = True And Option19.Value = True Then Text1.Text = "Din capul locului trebuie sa spuneti nu. Altfel, trebuie sa va asteptati la o viata incolora, inodora si insipida." ElseIf Option4.Value = True And Option20.Value = True Then Text1.Text = "O relatie perfecta atat timp cat femeia Scorpion nu va fi ranita. Ea este mult mai sensibila decat d-voastra. De aceea trebuie sa fiti foarte atenti la ceea ce spuneti si ce faceti." ElseIf Option4.Value = True And Option21.Value = True Then Text1.Text = "Relatia in sine poate avea si partile ei bune, dar numai dragostea nu este suficienta. Nu au conflicte prea mari, dar nici prea multe interese comune." ElseIf Option4.Value = True And Option22.Value = True Then Text1.Text = "La inceput poate exista un mare sentiment de prietenie, dar, cu timpul, acesta se va stinge, ajungandu-se la o indiferenta totala." ElseIf Option4.Value = True And Option23.Value = True Then Text1.Text = "Nu aveti sanse de reusita pt ca firea d-voastra nu accepta senzatiile tari pe care le cauta tot timpul Varsatorul." ElseIf Option4.Value = True And Option24.Value = True Then Text1.Text = "O relatie excelenta, in care fericirea si prosperitatea vor fi la ordinea zilei" ElseIf Option5.Value = True And Option13.Value = True Then Text1.Text = "Daca cuvantul perfectiune ar avea un superlativ, acesta ar defini relatia d-voastra. Iubirea si intelegerea dintre d-voastra sunt rar intalnite in alte situatii." ElseIf Option5.Value = True And Option14.Value = True Then Text1.Text = "Veselia si superficialitate Leului dau de cap seriosului si profundului nativ Taur, asa ca cel mai bine este sa va opriti la timp." ElseIf Option5.Value = True And Option15.Value = True Then Text1.Text = "Aveti toate sansele de fericire. Este una dintre cele mai stabile relatii." ElseIf Option5.Value = True And Option16.Value = True Then Text1.Text = "O relatie greu de imaginat. Ironia si duritatea Leului il ranesc prea mult pe fragilul si sesibilul Rac. " ElseIf Option5.Value = True And Option17.Value = True Then Text1.Text = "Daca veti sti sa va menajati reciproc orgoliul, veti avea un mariaj de vis." ElseIf Option5.Value = True And Option18.Value = True Then Text1.Text = "Cu toata admiratia pe care o poate avea Fecioara fata de Leu, cel mai bine ar fi sa pastrati distanta. " ElseIf Option5.Value = True And Option19.Value = True Then

42

Text1.Text = "Chiar daca aveti multe lucruri in comun, in special inteligenta, aveti putine sanse de succes impreuna pt ca sunteti foarte diferiti temperamental." ElseIf Option5.Value = True And Option20.Value = True Then Text1.Text = "O relatie palida, care nu are prea mult viitor, avand in vedere exigentele Leului." ElseIf Option5.Value = True And Option21.Value = True Then Text1.Text = "Daca veti face unele concesii de ambele parti, o astfel de relatie poate fi armonioasa, chiar fericita." ElseIf Option5.Value = True And Option22.Value = True Then Text1.Text = "Cel mai bine ar fi sa ramaneti prieteni pt ca sunteti destul de diferiti temperamental. " ElseIf Option5.Value = True And Option23.Value = True Then Text1.Text = "Nu este o relatie fericita, pt ca va suspectati reciproc si nu sunteti de acord nici macar asupra obiectivelor comune. " ElseIf Option5.Value = True And Option24.Value = True Then Text1.Text = "Poate exista o astfel de relatie, dar ea nu va ajunge niciodata la incandescenta." ElseIf Option6.Value = True And Option13.Value = True Then Text1.Text = "O relatie excelenta, intre doi oameni activi si materialisti. Vi se prevad mari realizari in casnicie. " ElseIf Option6.Value = True And Option14.Value = True Then Text1.Text = "Chiar daca vor exista unele dificultati de comunicare, veti reusi sa le depasiti si sa aveti o casnicie fericita si de durata." ElseIf Option6.Value = True And Option15.Value = True Then Text1.Text = "Dragostea incipienta se va topi cu timpul si nu vor ramane decat regrete." ElseIf Option6.Value = True And Option16.Value = True Then Text1.Text = "Va iritati unul pe altul si este greu de crezut ca veti ramane prea mult timp impreuna." ElseIf Option6.Value = True And Option17.Value = True Then Text1.Text = "Singurul domeniu in care puteti sta alaturi este cel profesional. Si nici acolo nu este sigur." ElseIf Option6.Value = True And Option18.Value = True Then Text1.Text = "Daca veti lasa la o parte luptele pt suprematie, ati putea avea sanse de reusita." ElseIf Option6.Value = True And Option19.Value = True Then Text1.Text = "Iubirea initiala se va stinge cu timpul pt ca nu veti reusi sa va descoperiti sufletele unul in fata celuilalt." ElseIf Option4.Value = True And Option20.Value = True Then Text1.Text = "Desi ea are nevoie de mintea d-voastra, nu veti putea comunica prea bine fiindca sunteti foarte diferiti sentimental." ElseIf Option6.Value = True And Option21.Value = True Then Text1.Text = "Nentelegerile dintre d-voastra, care au la baza diferenta temperamentala, nu vor reusi decat sa distruga un eventual sentiment de dragoste." ElseIf Option6.Value = True And Option22.Value = True Then Text1.Text = "O combinatie splendida, bazata pe intelegere, iubire si armonie." ElseIf Option6.Value = True And Option23.Value = True Then Text1.Text = "Amandoi sunteti inzestrati cu spirite combative, iar hartuiala va fi la ordinea zilei. Mai bine nu!" ElseIf Option6.Value = True And Option24.Value = True Then Text1.Text = "Intre d-voastra nu exista nici un fel de compatibilitate sentimentala, poate cel mult una profesionala." ElseIf Option7.Value = True And Option13.Value = True Then Text1.Text = "Nu va potriviti sub nici un aspect. Aceasta aventura nu poate avea un final fericit. Mai e timp sa va razganditi." ElseIf Option7.Value = True And Option14.Value = True Then Text1.Text = "Relatie mediocra, fara mari furtuni, dar si fara stralucire. Daca iubirea dintre voi va fi suficient de mare, atunci ati avea oarecare sanse de reusita." ElseIf Option7.Value = True And Option15.Value = True Then

43

Text1.Text = "Sunteti complementari din toate punctele de vedere. Mariajul este o chestiune de timp." ElseIf Option7.Value = True And Option16.Value = True Then Text1.Text = "Sansele sunt de 50 %. Iubirea initiala ar putea sa se piarda pe drum sau sa devina foarte viguroasa in timp." ElseIf Option7.Value = True And Option17.Value = True Then Text1.Text = "O relatie sentimentala este prea putin probabila pt ca Leul considera ca aveti o fire cam labila. " ElseIf Option7.Value = True And Option18.Value = True Then Text1.Text = "Nu va agreati in mod deosebit, dar, daca vreti neaparat sa incercati, nu aveti decat. S-ar putea sa iesiti cam jumuliti." ElseIf Option7.Value = True And Option19.Value = True Then Text1.Text = "Sunt sanse mari de reusita, daca veti reusi sa vorbiti pe aceeasi lungime de unda!" ElseIf Option7.Value = True And Option20.Value = True Then Text1.Text = "Va cam enervati unul pe altul si, daca nu veti da dovada de mai multa intelegere reciproca, va veti desparti dupa un timp." ElseIf Option7.Value = True And Option21.Value = True Then Text1.Text = "Pe zi ce trece, relatia voastra va deveni tot mai puternica." ElseIf Option7.Value = True And Option22.Value = True Then Text1.Text = "Vorbiti limbi diferite, dar puteti ajunge la un oarecare consens, daca veti fi mai concesiv cu ea. Totusi, relatia nu va atinge cote prea inalte." ElseIf Option7.Value = True And Option23.Value = True Then Text1.Text = "Va asteapta clipe minunate impreuna. Sunteti o pereche de mare succes!" ElseIf Option7.Value = True And Option24.Value = True Then Text1.Text = "O legatura durabila, puternica si fericita." ElseIf Option8.Value = True And Option13.Value = True Then Text1.Text = "Mare noroc ca v-ati intalnit! Aveti toate sansele de fericire." ElseIf Option8.Value = True And Option14.Value = True Then Text1.Text = "Chiar daca veti incerca imposibilul, aceasta relatie nu are sorti de izbanda. Veti cheltui timp si energie degeaba." ElseIf Option8.Value = True And Option15.Value = True Then Text1.Text = "Este o relatie modesta, mai putin din punct de vedere profesional, unde veti colabora excelent. Din pacate, este prea putin." ElseIf Option8.Value = True And Option16.Value = True Then Text1.Text = "O relatie excelenta, ambii nativi potrivindu-se din toate punctele de vedere. Casa de piatra!" ElseIf Option8.Value = True And Option17.Value = True Then Text1.Text = "Chiar daca va respectati reciproc, nu reusiti sa comunicati pe plan sentimental. Opriti-va la timp!" ElseIf Option8.Value = True And Option18.Value = True Then Text1.Text = "Compromisuri peste compromisuri! Nu aceasta este calea spre fericire!" ElseIf Option8.Value = True And Option19.Value = True Then Text1.Text = "Nimic nu va sta in cale! Intre voi este o potrivire perfecta. " ElseIf Option8.Value = True And Option20.Value = True Then Text1.Text = "Agonie si extaz! Acestea sunt coordonatele unei astfel de relatii. Daca aveti nervii tari, atunci puteti sa incercati!" ElseIf Option8.Value = True And Option21.Value = True Then Text1.Text = "Aceasta relatie este cat se poate de anodina. Nu straluceste prin nimic, dar nici nu se remarca prin ceva deosebit. Daca va place linistea si anonimatul, atunci v-ati gasit perechea ideala!" ElseIf Option8.Value = True And Option22.Value = True Then Text1.Text = "Chiar daca exista dificultati de comunicare la inceput, cu timpul veti reusi sa le depasiti si sa formati o pereche foarte bine sudata." ElseIf Option8.Value = True And Option23.Value = True Then Text1.Text = "Intr-adevar, ati gasit femeia potrivita! Veti avea o relatie completa, atat in plan sentimental, cat si profesional." ElseIf Option8.Value = True And Option24.Value = True Then Text1.Text = "Cu toate ca sunteti compatibili,dupa un timp ati putea avea mari disensiuni asupra unor probleme grave, pe care ati tot amanat sa le rezolvati."

44

ElseIf Option9.Value = True And Option13.Value = True Then Text1.Text = "Daca nu va produceti necazuri unul altuia, o astfel de pereche nu va intalni nici o piedica in viata. Putina rabdare si fericirea si multumirea vor veni!" ElseIf Option9.Value = True And Option14.Value = True Then Text1.Text = "Posesivi si materialisti in aceeasi masura, vor reusi sa aiba o relatie excelenta, bazata pe admiratie." ElseIf Option9.Value = True And Option15.Value = True Then Text1.Text = "Nici macar sa nu va ganditi! Sunteti atat de diferiti, incat nu merita efortul." ElseIf Option9.Value = True And Option16.Value = True Then Text1.Text = "Daca aveti suficienti bani pt a satisface capriciile unei astfel de sotii, precum si o rabdare colosala, n-aveti decat sa incercati!" ElseIf Option9.Value = True And Option17.Value = True Then Text1.Text = "Pt cei din jurul d-voastra, fericirea si bunastarea pe care le veti avea sunt de invidiat." ElseIf Option9.Value = True And Option18.Value = True Then Text1.Text = "Cel mai bine ar fi sa nu va intalniti! Cu firea ei analitica si extrem de critica, nu veti avea nici macar o ora linistita." ElseIf Option9.Value = True And Option19.Value = True Then Text1.Text = "Daca sunteti dispus la compromisuri si nu va deranjeaza banalitatea, puteti incerca!" ElseIf Option9.Value = True And Option20.Value = True Then Text1.Text = "Amandoi sunteti plini de viata, dar, pt a avea o casnicie fericita, trebuie sa aveti si o motivatie concreta. Altfel, numarul divorturilor va creste cu inca unul." ElseIf Option9.Value = True And Option21.Value = True Then Text1.Text = "O relatie afectuoasa si constiincioasa: ambii fiind doi oameni foarte calculati, arareori se vor intalni cu pasiunea." ElseIf Option9.Value = True And Option22.Value = True Then Text1.Text = "Da! Iata o relatie extrem de fericita pt ambii parteneri." ElseIf Option9.Value = True And Option23.Value = True Then Text1.Text = "O relatie armonioasa si reusita, daca ea va avea mai mult tact, iar el va fi mai putin critic." ElseIf Option9.Value = True And Option24.Value = True Then Text1.Text = "Cu toate ca sunteti legati afectiv, sinceritatea sentimentelor nu ii va ajuta prea mult." ElseIf Option10.Value = True And Option13.Value = True Then Text1.Text = "Ambii au caractere deosebit de puternice, dar pot convetui pasnic avand in vedere respectul reciproc de care dau dovada." ElseIf Option10.Value = True And Option14.Value = True Then Text1.Text = "Este una din cele mai bune legaturi posibile. Veti forma o echipa redutabila si un cuplu fericit." ElseIf Option10.Value = True And Option15.Value = True Then Text1.Text = "Cel mai bine este sa fiti doar prieteni. Singura colaborare posibila este cea in plan profesional." ElseIf Option10.Value = True And Option16.Value = True Then Text1.Text = "Nici macar sa nu incercati! Sunteti cu mult prea diferiti!" ElseIf Option10.Value = True And Option17.Value = True Then Text1.Text = "Nu este o legatura prea grozava. Leul il scoate din sarite pe Capricorn, care poate sa izbucneasca, producand adevarate dezastre in jur." ElseIf Option10.Value = True And Option18.Value = True Then Text1.Text = "Daca relatia cu un Taur este cotata ca foarte buna, aflati ca cea cu o nativa a zodiei Fecioara este exceptionala! Intelegerea dintre cei doi este totala." ElseIf Option10.Value = True And Option19.Value = True Then Text1.Text = "Nu aveti prea multe de impartit, astfel incat relatia dintre dvoastra va fi, in cel mai bun caz, mediocra. " ElseIf Option10.Value = True And Option20.Value = True Then Text1.Text = "Nimic nu pare sa va atraga unul spre celalalt, dar, daca reusiti sa va cunoasteti unul pe celalalt, putetispune ca a dat norocul peste dvoastra!" ElseIf Option10.Value = True And Option21.Value = True Then

45

Text1.Text = "Un mariaj de exceptie! Armonie, liniste, intelegere, succes. Dar, pt ca exista si un mic 'dar', este posibil la un moment dat ca Capricornul sa fie iritat de oportunismul Sagetatorului. " ElseIf Option10.Value = True And Option22.Value = True Then Text1.Text = "In general, relatia va fi dominata de sentimentul prieteniei. Poate exista un mariaj gen 'cooperare', dar nu pe termen lung. Daca totusi vreti sa izbanditi, stabiliti mai intai cine e 'seful'!" ElseIf Option10.Value = True And Option23.Value = True Then Text1.Text = "Pt inceput, Capricornul ar putea fi fascinat de personalitatea Varsatorului. Dar vraja sa va sfarama repede, pt ca Capricornul va fi iritat de manifestarile libertine ale Varsatorului." ElseIf Option10.Value = True And Option24.Value = True Then Text1.Text = "Intre cei doi nativi pot exista animozitati, dar vor fi in stare sa treaca peste ele. Totusi, cele mai bune raporturi intre Capricorn si Pesti sunt cele in plan profesional. " ElseIf Option11.Value = True And Option13.Value = True Then Text1.Text = "Daca stabiliti de la inceput cine este seful, atunci aveti sanse." ElseIf Option11.Value = True And Option14.Value = True Then Text1.Text = "Puteti fi fascinat de un 'Taur', dar nu pt mult timp. Au loc prea multe certuri intre d-voastra." ElseIf Option11.Value = True And Option15.Value = True Then Text1.Text = "Ati gasit combinatia ideala. Spuneti 'da' fara nici un fel de ezitare!" ElseIf Option11.Value = True And Option16.Value = True Then Text1.Text = "Daca veti da dovada de diplomatie si de maleabilitate, puteti deveni un cuplu de invidiat." ElseIf Option11.Value = True And Option17.Value = True Then Text1.Text = "Poate exista o atractie la inceput, dar conflictele apar rapid si nu pot fi aplanate. Despartirea este iminenta." ElseIf Option11.Value = True And Option18.Value = True Then Text1.Text = "Nu comunicati bine si aveti interese diferite. Nu prea aveti sanse de reusita." ElseIf Option11.Value = True And Option19.Value = True Then Text1.Text = "O legatura de aur! Nu putem decat sa va dorim viata lunga." ElseIf Option11.Value = True And Option20.Value = True Then Text1.Text = "O astfel de relatie nu poate fi decat foarte buna sau foarte proasta, cale de mijloc nu exista." ElseIf Option11.Value = True And Option21.Value = True Then Text1.Text = "Ceva nu se leaga intre voi. Poate ar fi bine sa renuntati." ElseIf Option11.Value = True And Option22.Value = True Then Text1.Text = "Cel mai bine este sa nu va intalniti. Sunteti atat de diferiti, incat, oricat de mult credeti ca va iubiti, tot nu veti reusi." ElseIf Option11.Value = True And Option23.Value = True Then Text1.Text = "Singura d-voastra problema ar fi banii. Daca reusiti sa tineti bine fraiele compartimentului financiar, atunci veti avea o relatie minunata." ElseIf Option11.Value = True And Option24.Value = True Then Text1.Text = "Cam greu, dar este totusi posibil, daca reusiti sa gasiti calea de mijloc." ElseIf Option12.Value = True And Option13.Value = True Then Text1.Text = "Oricat de surprinzatoare ar parea, o astfel de relatie este totusi posibila, in ciuda diferentelor notabile intre caracterele celor doi." ElseIf Option12.Value = True And Option14.Value = True Then Text1.Text = "Chiar daca sunteti construiti la fel, comunicarea merge foarte prost. Unul dintre voi ar trebui sa cedeze." ElseIf Option12.Value = True And Option15.Value = True Then Text1.Text = "Conflictele dintre d-voastra vor face deliciul vecinilor. Este o pierdere de timp incercarea de a mentine o astfel de relatie." ElseIf Option12.Value = True And Option16.Value = True Then Text1.Text = "Este relatia ideala din toate punctele de vedere. Veti fi fericiti impreuna si veti avea multe reusite." ElseIf Option12.Value = True And Option17.Value = True Then Text1.Text = "Chiar nu aveti nici un punct comun. Este mai bine sa spuneti 'NU' de la bun inceput."

46

ElseIf Option12.Value = True And Option18.Value = True Then Text1.Text = "Veti cauta sa va dominati reciproc, reusind sa produceti doar dezastre. Cel mai bine este sa va vedeti fiecare de drum." ElseIf Option12.Value = True And Option19.Value = True Then Text1.Text = "Raporturile dintre d-voastra sunt excelente. Comunicati foarte bine si veti avea foarte multe realizari." ElseIf Option12.Value = True And Option20.Value = True Then Text1.Text = "Este una din cele mai bune relatii ale Pestelui. Intre dvoastra chiar poate exista iubirea." ElseIf Option12.Value = True And Option21.Value = True Then Text1.Text = "Predomina sentimentul de prietenie si de respect reciproc. Dragostea nu este punctul forte al acestei relatii." ElseIf Option12.Value = True And Option22.Value = True Then Text1.Text = "Puteti sa va gasiti multe puncte comune de interes, dar, pt ca legatura sa reziste, sentimentele trebuie sa fie foarte puternice." ElseIf Option12.Value = True And Option23.Value = True Then Text1.Text = "Numai diplomatia Pestelui nu este suficienta pt a avea o relatie armonioasa. Lipseste increderea intre parteneri." ElseIf Option12.Value = True And Option24.Value = True Then Text1.Text = "Daca partenerii nu s-ar miorlai atat si ar fi mai atenti la nevoile celuilalt, atunci relatia ar putea merge foarte bine. " End If End Sub

5. Realizati un program care sa scrie intr-o caseta de text lunile cand se culeg fructele selectate din lista de tip Combo. Rezolvare: 47

Private Sub Command1_Click() If fructe.Text = "alune" Then Text1.Text = "se culeg in luna august" ElseIf fructe.Text = "mere" Then Text1.Text = "se culeg vara si toamna in functie de soiul lor" ElseIf fructe.Text = "pere" Then Text1.Text = "se culeg vara si toamna in functie de soiul lor " ElseIf fructe.Text = "struguri" Then Text1.Text = "se culeg in lunile: august, septembrie si octombrie" ElseIf fructe.Text = "gutui" Then Text1.Text = "se culeg in noiembrie" ElseIf fructe.Text = "prune" Then Text1.Text = "se culeg in lunile: septembrie, octombrie" ElseIf fructe.Text = "perje" Then Text1.Text = "se culeg in lunile: septembrie, octombrie" ElseIf fructe.Text = "cirese" Then Text1.Text = "se culeg in lunile: mai, iunie" ElseIf fructe.Text = "visine" Then Text1.Text = "se culeg la sfarsitul lunii iunie" ElseIf fructe.Text = "piersici" Then Text1.Text = "se culeg in luna iulie" ElseIf fructe.Text = "caise" Then Text1.Text = "se culeg in luna iulie" ElseIf fructe.Text = "zarzare" Then Text1.Text = "se culeg in luna iulie" ElseIf fructe.Text = "pepeni" Then Text1.Text = "se culeg in luna august" ElseIf fructe.Text = "capsuni" Then Text1.Text = "se culeg in lunile: iunie,iulie" ElseIf fructe.Text = "fragi" Then Text1.Text = "se culeg in lunile: iunie,iulie" ElseIf fructe.Text = "zmeura" Then Text1.Text = "se culege in luna august" ElseIf fructe.Text = "nuci" Then Text1.Text = "se culeg in luna octombrie" ElseIf fructe.Text = "mure" Then Text1.Text = "se culeg la sfarsitul lunii octombrie" ElseIf fructe.Text = "dude" Then Text1.Text = "se culeg in lunile: iunie,iulie" End If End Sub

48

6. Faceti un program care sa calculeze echivalentul in lei a celor 5 monede (euro, lira sterlina, $ american, $ australian, $ canadian). Tot in acest program realizati un meniu care sa incarce o a doua forma in care sa fie scris cursul zilei al valutei. Rezolvare: Se vor crea doua forme: Form1 ce contine cinci cadre, fiecare cadru avand cate doua casete de text si un buton de comanda; de asemenea, in Form1 va fi si un element de meniu "Curs valutar"->"Cursul zilei"; Form2 ce contine un tabel cu doua coloane si 6 randuri (un rand - capul tabelului si 5 randuri pentru cele cinci valute).

Codul din prima forma (Form1) va fi:


Private Sub Command1_Click() Text2.Text = Text1.Text * 28500 End Sub Private Sub Command2_Click() Text8.Text = Text7.Text * 37500 End Sub Private Sub Command3_Click() Text4.Text = Text3.Text * 54000 End Sub

49

Private Sub Command4_Click() Text6.Text = Text5.Text * 22000 End Sub Private Sub Command5_Click() Text10.Text = Text9.Text * 23200 End Sub Private Sub mnuCursvalutarCursulzilei_Click() Load Form2 Form2.Enabled = True Form2.Show End Sub

Codul lui Form2 va fi cel de mai jos. Evident, valorile se vor modifica din program, in functie de cursul valutare al zilei respective.
Private Sub Form_Load() T.ColWidth(0) = T.ColWidth(0) * 2 T.TextMatrix(0, 0) = "Moneda de schimb" T.TextMatrix(0, 1) = "Cursul zilei" T.TextMatrix(1, 0) = "Euro" T.TextMatrix(2, 0) = "$ american" T.TextMatrix(3, 0) = "Lira sterlina" T.TextMatrix(4, 0) = "$ australian" T.TextMatrix(5, 0) = "$ canadian" T.TextMatrix(1, 1) = "37500" T.TextMatrix(2, 1) = "28500" T.TextMatrix(3, 1) = "54000" T.TextMatrix(4, 1) = "22000" T.TextMatrix(5, 1) = "23200" End Sub

7. Realizati un program care dupa scrierea oricarei luni a anului intr-o caseta de text si la tastarea butonului de comanda sa afiseze denumirea populara corespunzatoare lunii respective. Rezolvare:

Private Sub Command1_Click() If Text1.Text = "ianuarie" Then Text2.Text = "Gerar" ElseIf Text1.Text = "februarie" Then Text2.Text = "Faurar" ElseIf Text1.Text = "martie" Then

50

Text2.Text = "Martisor" ElseIf Text1.Text = "aprilie" Then Text2.Text = "Prier" ElseIf Text1.Text = "mai" Then Text2.Text = "Florar" ElseIf Text1.Text = "iunie" Then Text2.Text = "Ciresar" ElseIf Text1.Text = "iulie" Then Text2.Text = "Cuptor" ElseIf Text1.Text = "august" Then Text2.Text = "Gustar" ElseIf Text1.Text = "septembrie" Then Text2.Text = "Rapciune " ElseIf Text1.Text = "Octombrie" Then Text2.Text = "Brumarel" ElseIf Text1.Text = "noiembrie" Then Text2.Text = "Brumar" ElseIf Text1.Text = "decembrie" Then Text2.Text = "Undrea" End If End Sub

8. Faceti programul ecuatiei de gradul I ax+b=0. Rezolvare:


Private Sub Command1_Click() If a = 0 Then If b = 0 Then MsgBox "identitate 0=0", vbExclamation, "Atentie" Else MsgBox "egalitate imposibila", vbExclamation, "Atentie" End If Else rezultat.Text = -b / a End If End Sub Private Sub Command2_Click() a.Text = "" b.Text = "" rezultat.Text = "" End Sub

9. Faceti programul ecuatiei de gradul II ax2+bx+c=0. Rezolvare:


Private Sub buton_Click() If a.Text = 0 Then

51

If b.Text = 0 Then If Val(c.Text) = 0 Then MsgBox "identitate 0=0", vbInformation Else MsgBox "egalitate imposibila", vbInformation End If Else x.Text = Val(-c.Text) / Val(b.Text) End If Else delta.Text = Val(b.Text) * Val(b.Text) - 4 * Val(a.Text) * Val(c.Text) End If If Val(delta.Text) > 0 Then x1.Text = (-Val(b.Text) - Val(Sqr(delta.Text))) / (2 * Val(a.Text)) x2.Text = (-Val(b.Text) + Val(Sqr(delta.Text))) / (2 * Val(a.Text)) Else If Val(delta.Text) = 0 Then x.Text = -Val(b.Text) / (2 * Val(a.Text)) Else MsgBox "Ecuatia nu are solutii", vbInformation, "Atentie!!!" End If End If End Sub

10. Realizati un program care sa afiseze intr-o caseta de text informatii ce particularizeaza fiecare tara selectata din lista de tip Combo. Rezolvare:
Private Sub Command1_Click() If tara.Text = "Canada" Then Text1.Text = "tara Marilor Lacuri" ElseIf tara.Text = "S.U.A." Then Text1.Text = "se gaseste Marele Canion" ElseIf tara.Text = "Mexic" Then Text1.Text = "este cea mai veche civilizatie existenta-Imperiul Maya-din Pen. Yutacan" ElseIf tara.Text = "Venezuela" Then Text1.Text = "tara pestilor electrici, in fluviul Orinoco" ElseIf tara.Text = "Brazilia" Then Text1.Text = "are cea mai mare jungla existenta (Jungla Amazonului)" ElseIf tara.Text = "Columbia" Then Text1.Text = "are capitala situata la cea mai mare inaltime-Bogota" ElseIf tara.Text = "Peru" Then Text1.Text = "se gaseste lacul cu o linie navigabila la cea mai mare altitudine (L. Titicaca-3812m)" ElseIf tara.Text = "China" Then Text1.Text = "are cea mai mare populatie de pe glob" ElseIf tara.Text = "Rusia" Then Text1.Text = "este cel mai intins stat de pe glob" ElseIf tara.Text = "India" Then Text1.Text = "al doilea stat ca populatie de pe glob" ElseIf tara.Text = "Indonezia" Then Text1.Text = "este cel mai intins stat insular" ElseIf tara.Text = "Japonia" Then Text1.Text = "este tara cu cea mai mare activitate seismica" ElseIf tara.Text = "Australia" Then Text1.Text = "este tara marsupialelor" ElseIf tara.Text = "Spania" Then Text1.Text = "este cea mai productiva tara europeana d.p.v. agricol" ElseIf tara.Text = "U.K." Then

52

Text1.Text = "tara prin care trece meridianul de 0 grade (Greendwich)" ElseIf tara.Text = "Franta" Then Text1.Text = "este renumita prin Turnul Eiffel (peste 300m)" ElseIf tara.Text = "Italia" Then Text1.Text = "aici se gaseste orasul laguna (Venetia)" ElseIf tara.Text = "Romania" Then Text1.Text = "se remarca prin Delta Dunarii-cea mai bogata delta in flora si fauna din Europa" ElseIf tara.Text = "Turcia" Then Text1.Text = "se afla orasul Istambul, situat pe doua continente" ElseIf tara.Text = "Egipt" Then Text1.Text = "tara piramidelor" ElseIf tara.Text = "Etiopia" Then Text1.Text = "tara eucaliptilor" ElseIf tara.Text = "Nigeria" Then Text1.Text = "este cea mai populata tara africana" ElseIf tara.Text = "R.D. Congo" Then Text1.Text = "tara diamantelor" ElseIf tara.Text = "Africa de Sud" Then Text1.Text = "tara aurului" ElseIf tara.Text = "Norvegia" Then Text1.Text = "tara fiordurilor abisale" End If End Sub

11. Sa se faca un program care sub comanda unui buton sa deschida o caseta de preluare a datelor de la utilizator referitoare la greutatea unei persoane, iar la apasarea butonului OK sa se deschida o caseta in care sa scrie: Greutatea d-voastra este de cate kg au fost scrise in caseta anterioara. Rezolvare:
Private Sub Greutate_Click() Dim intgreutate As Integer intgreutate = InputBox("Introduceti greutatea dumneavoastra: ", "Culegere date") If intgreutate >= 100 Then MsgBox "Greutatea dumneavoastra este de: " & intgreutate & " kg.Sunteti un om cu greutate!", vbInformation, "Greutate" Else MsgBox "Greutatea dumneavoastra este de: " & intgreutate & " kg.", vbInformation, "Greutate" End If End Sub

12. Sa se realizeze un program care sa scrie intr-o caseta de text tarile in care se vorbeste limba selectata din lista de tip Combo. Rezolvare: 53

Private Sub Command1_Click() If limbi.Text = "araba" Then Text1.Text = "Emiratele Arabe Unite, Oman, Siria, Israel, Iordania, Yemen, Arabia Saudita, Egipt, Sudan, Etiopia,Tunisia, Maroc" ElseIf limbi.Text = "engleza" Then Text1.Text = "U.K., S.U.A., Canada, Australia, Noua Zeelanda, Africa de Sud, Guyana Engleza" ElseIf limbi.Text = "chineza" Then Text1.Text = "China, Taiwan, Hong Kong" ElseIf limbi.Text = "franceza" Then Text1.Text = "Franta, Canada, Elvetia, Guyana Franceza" ElseIf limbi.Text = "hindi" Then Text1.Text = "India, Bhutan, Bangladesh, Sri Lanka" ElseIf limbi.Text = "indoneza" Then Text1.Text = "Indonezia, Madagascar, Filipine, Malaysia, Brunei" ElseIf limbi.Text = "japoneza" Then Text1.Text = "Japonia" ElseIf limbi.Text = "papuana" Then Text1.Text = "Papua-Noua Guinee, Australia" ElseIf limbi.Text = "persana" Then Text1.Text = "Iran, Afghanistan, Pakistan" ElseIf limbi.Text = "portugheza" Then Text1.Text = "Brazilia, Portugalia" ElseIf limbi.Text = "somaleza" Then Text1.Text = "Somalia, Djibouti, Kenya" ElseIf limbi.Text = "spaniola" Then Text1.Text = "Spania, Mexic, Venezuela, Columbia, Ecuador, Peru, Chile, Argentina, Paraguay, Uruguay, Panama, Costa Rica, Cuba" ElseIf limbi.Text = "swahili" Then Text1.Text = "Camerun, R.D. Congo, Gabon, Congo, Uganda, Tanzania, Zambia, Mozambic, Malawi, Angola, Ruanda, Burundi" ElseIf limbi.Text = "turca" Then Text1.Text = "Turcia" End If End Sub

13. Sa se faca un program care sa calculeze media aritmetica a trei numere. Rezolvare:
Private Sub Command1_Click() media.Text = Val(Val(a.Text) + Val(b.Text) + Val(c.Text)) / 3 End Sub

14. Sa se realizeze un program sub comanda unui buton Sfat care la apasarea lui sa scrie pe el: Un mar pe zi te scuteste de mers la doctor. Rezolvare:
Private Sub buton_Click() buton.Caption = "Un mar pe zi te scuteste de mers la doctor" End Sub

15. Sa se faca un program care sa scrie intr-o caseta de text continentul aferent tarii selectate din lista de tip Combo. Rezolvare:

54

Private Sub Command1_click() If tari.Text = "Angola" Then Text1.Text = "esti african" ElseIf tari.Text = "Suedia" Then Text1.Text = "esti european" ElseIf tari.Text = "S.U.A." Then Text1.Text = "esti din America de Nord" ElseIf tari.Text = "Arabia Saudita" Then Text1.Text = "esti asiatic" ElseIf tari.Text = "Argentina" Then Text1.Text = "esti din America de Sud" ElseIf tari.Text = "Australia" Then Text1.Text = "esti australian" ElseIf tari.Text = "Bolivia" Then Text1.Text = "esti din America de Sud" ElseIf tari.Text = "Bulgaria" Then Text1.Text = "esti european" ElseIf tari.Text = "Canada" Then Text1.Text = "esti din America de Nord" ElseIf tari.Text = "Chile" Then Text1.Text = "esti din America de Sud" ElseIf tari.Text = "China" Then Text1.Text = "esti asiatic" ElseIf tari.Text = "Columbia" Then Text1.Text = "esti din America de Sud" ElseIf tari.Text = "Congo" Then Text1.Text = "esti african" ElseIf tari.Text = "Danemarca" Then Text1.Text = "esti european" ElseIf tari.Text = "Egipt" Then Text1.Text = "esti african" ElseIf tari.Text = "Etiopia" Then Text1.Text = "esti african" ElseIf tari.Text = "Franta" Then Text1.Text = "esti european" ElseIf tari.Text = "Grecia" Then Text1.Text = "esti european" ElseIf tari.Text = "India" Then Text1.Text = "esti asiatic" ElseIf tari.Text = "Indonezia" Then Text1.Text = "esti asiatic" ElseIf tari.Text = "Irak" Then Text1.Text = "esti asiatic" ElseIf tari.Text = "Iran" Then Text1.Text = "esti asiatic"

55

ElseIf tari.Text = "Italia" Then Text1.Text = "esti european" ElseIf tari.Text = "Japonia" Then Text1.Text = "esti asiatic" ElseIf tari.Text = "Libia" Then Text1.Text = "esti asiatic" ElseIf tari.Text = "Norvegia." Then Text1.Text = "esti european" ElseIf tari.Text = "Maroc" Then Text1.Text = "esti african" ElseIf tari.Text = "Mexic" Then Text1.Text = "esti din America Centrala" ElseIf tari.Text = "Mongolia" Then Text1.Text = "esti asiatic" ElseIf tari.Text = "Peru" Then Text1.Text = "esti din America de Sud" ElseIf tari.Text = "Polonia" Then Text1.Text = "esti european" ElseIf tari.Text = "Romania" Then Text1.Text = "esti european" ElseIf tari.Text = "Rusia" Then Text1.Text = "esti european daca locuiesti in vestul Muntilor Ural si asiatic daca locuiesti in estul lor" ElseIf tari.Text = "Sudan" Then Text1.Text = "esti african" ElseIf tari.Text = "Spania" Then Text1.Text = "esti european" ElseIf tari.Text = "Turcia" Then Text1.Text = "esti asiatic" ElseIf tari.Text = "Venezuela" Then Text1.Text = "esti din America de Sud" End If End Sub Private Sub Command2_Click() Text1.Text = "" End Sub

16. Faceti un program care sub comanda unui buton sa deschida o caseta de preluare a datelor de la utilizator referitoare la varsta unei persoane, iar la apasarea butonului OK sa se deschida o caseta in care scrie: Aveti varsta de cati ani au fost scrisi in caseta anterioara. Rezolvare:
Private Sub Command1_Click() Dim intvarsta As String intvarsta = InputBox("Introduceti varsta dumneavoastra: ", "Culegere date") MsgBox "Aveti varsta de: " & intvarsta & " ani.", vbInformation, "Varsta" End Sub

17. Sa se faca un program care sa afiseze intr-o eticheta valoarea atinsa la executie pe o bara de derulare verticala. Aceasta valoare reprezinta data de nastere a unei persoane. In acelasi timp sa scrie intr-o caseta se text: Ziua d-voastra de nastere este respectiva data aleasa. Rezolvare: Amplasati pe forma o caseta de text si o bara de derulare verticala, pentru care stabiliti proprietatea min la valoarea 1 si max la valoarea 31. Apoi scrieti urmatoarea subrutina:
Private Sub VScroll1_Change()

56

Label1.Caption = VScroll1.Value Text1.Text = "Ziua dumneavoastra de nastere este " & Label1.Caption End Sub

18. Sa se realizeze un program care la apasarea unui buton sa afiseze intr-o caseta de text denumirea in zodiacul chinezesc si caracteristicile zodiei scrise Rezolvare: Dupa ce pe forma veti amplasa trei casete de text (Text1 - pentru zodia clasica (zodiac european), Text2 pentru caracteristici si Text3 pentru zodia din zodiacul chinezesc) si un buton Command1, veti scrie urmatorul cod:
Private Sub Command1_Click() If Text1.Text = "berbec" Then Text3.Text = "dragon" ElseIf Text1.Text = "taur" Then Text3.Text = "sarpe" ElseIf Text1.Text = "gemeni" Then Text3.Text = "cal" ElseIf Text1.Text = "rac" Then Text3.Text = "oaie" ElseIf Text1.Text = "leu" Then Text3.Text = "maimuta" ElseIf Text1.Text = "fecioara" Then Text3.Text = "cocos" ElseIf Text1.Text = "balanta" Then Text3.Text = "caine" ElseIf Text1.Text = "scorpion" Then Text3.Text = "mistret" ElseIf Text1.Text = "sagetator" Then Text3.Text = "sobolan" ElseIf Text1.Text = "capricorn" Then Text3.Text = "bivol" ElseIf Text1.Text = "varsator" Then Text3.Text = "tigru" ElseIf Text1.Text = "pesti" Then Text3.Text = "iepure" End If If Text1.Text = "berbec" Then Text2.Text = "Barbatul este: mandru, sincer, tenace, impetuos are o energie inepuizabila, uraste minciuna, iute la manie. Femeia este: rationala, pasionala, mandra, voluntara." ElseIf Text1.Text = "taur" Then Text2.Text = "Barbatul este: inteligent, intelept, siret om de afaceri, imprevizibil, norocos. Femeia Sarpe este considerata femeia fatala." ElseIf Text1.Text = "gemeni" Then Text2.Text = "Barbatul este: foarte popular, agreabil, inzestrat cu multa inteligenta; este cel mai rapid semn zodiacal. Femeia este: inteligenta, vioaie, mereu in miscare, are nevoie de libertate si aventura." ElseIf Text1.Text = "rac" Then Text2.Text = "Barbatul este: o fire blanda, dotat cu un puternic simt artistic. Femeia este: foarte cocheta si curata, fragila si deseori timida, ii place sa fie alintata." ElseIf Text1.Text = "leu" Then Text2.Text = "Barbatul este: ager, vesel, sociabil, inventiv, mare strateg, dotat cu logica si originalitate. Femeia este: naturala, vesela, independenta, provocatoare, excelenta gospodina, prudenta si rationala." ElseIf Text1.Text = "fecioara" Then

57

Text2.Text = "Barbatul este: sincer, bine intentionat, foarte mandru, ii place sa contrazica. Femeia este: energica, ordonata, discreta, amabila si exigenta." ElseIf Text1.Text = "balanta" Then Text2.Text = "Barbatul este: inzestrat cu un suflet nobil, onest, amabil, reprezinta o permanenta atractie pt femei. Femeia este: naturala, calda, fara inhibitii." ElseIf Text1.Text = "scorpion" Then Text2.Text = "Barbatul este: cinstit, simplu, hotarat, curajos, viril, plin de energie si altruist. Femeia este: modesta si rezervata, risipitoare si vulnerabila la deceptii." ElseIf Text1.Text = "sagetator" Then Text2.Text = "Barbatul este: muncitor, econom, ambitios, lacom si zgarcit. Femeia este: zgarcita si buna gospodina." ElseIf Text1.Text = "capricorn" Then Text2.Text = "Barbatul este: calm, metodic, rabdator, neobosit, incapatanat si introvertit.Femeia este: gospodina, harnica si devotata familiei, fidela si responsabila." ElseIf Text1.Text = "varsator" Then Text2.Text = "Barbatul este: dinamic, impulsiv, curajos, tenace, razbunator si optimist.Femeia este: mondena si cocheta, geloasa si posesiva, sensibila, romantica si pasionala." ElseIf Text1.Text = "pesti" Then Text2.Text = "Barbatul este: discret, linistit, introvertit, egoist, oportunist, lenes si snob. Femeia este: intelegatoare, placuta si rafinata si materialista" End If End Sub

Mirela i Ionu 19. Pe o forma faceti urmatoarele subrutine: unul care la comanda unui buton sa adauge intr-o lista cifrele scrise intr-o caseta de text; unul care sub comanda unui buton sa stearga toate elementele din lista; unul care sub comanda unui buton sa adune elementele scrise in lista; unul care sub comanda unui buton sa realizeze operatia de scadere din primul numar a sumei celorlalte numere Rezolvare:
Private Sub Command1_Click() x = 0 For i = 0 To List1.ListCount x = x + Val(List1.List(i)) Next i Text1.Text = Str(x) End Sub Private Sub Command2_Click() List1.AddItem Text1.Text Text1.Text = "" End Sub Private Sub Command3_Click() x = List1.List(0) For i = 1 To List1.ListCount x = x - Val(List1.List(i)) Next i Text1.Text = Str(x) End Sub Private Sub Command4_Click()

58

List1.Clear End Sub

20. Realizati un program care sub comanda unui buton sa afiseze intr-o caseta de text culoarea corespunzatoare amestecului rezultat in urma bifarii a doua butoane de optiune ce corespund celor doua culori. Tot aici scrieti un program care sub comanda unui buton sa arate culoarea scrisa in caseta de text. Rezolvare:

Private Sub Command1_Click() If Option1.Value = True And Option4.Value = True Then Text1.Text = "verde" ElseIf Option1.Value = True And Option5.Value = True Then Text1.Text = "bleu" ElseIf Option1.Value = True And Option6.Value = True Then Text1.Text = "bleumarin" ElseIf Option2.Value = True And Option4.Value = True Then Text1.Text = "orange" ElseIf Option2.Value = True And Option5.Value = True Then Text1.Text = "roz" ElseIf Option2.Value = True And Option6.Value = True Then Text1.Text = "grena sau visiniu" End If End Sub Private Sub Command2_Click() If Text1.Text = "verde" Then Label1.BackColor = 32768 ElseIf Text1.Text = "bleu" Then Label1.BackColor = 16777088 ElseIf Text1.Text = "bleumarin" Then Label1.BackColor = 4194304 ElseIf Text1.Text = "orange" Then Label1.BackColor = 33023 ElseIf Text1.Text = "roz" Then Label1.BackColor = 16744703 ElseIf Text1.Text = "grena sau visiniu" Then Label1.BackColor = 192 End If End Sub

21. Scrieti un program care la derularea barei orizontale de derulare sa afiseze intr-o eticheta valoarea ce se modifica mereu. Aceasta valoare reprezinta anul nasterii unei persoane 'Tot acest 59

program sa scrie intr-o caseta de text: "Sunteti nascut(a) in anul...". Pe aceasta forma scrieti o subrutina sub comanda unui buton care sa scrie intr-o caseta de text varsta persoanei respective. Rezolvare:
Private Sub Command1_Click() T = "Aveti varsta de: " & Val(2005 - Val(Label1.Caption)) & " ani." End Sub Private Sub HScroll1_Change() Label1.Caption = HScroll1.Value Text1.Text = "Sunteti nascut(a) in anul " & Label1.Caption & "." End Sub

22. Scrieti un program care in urma bifarii catorva casete de validare si la comanda unui buton sa apara intr-o caseta de text un text de forma: "Culorile tale preferate sunt: roz, alb..."; si daca nici o caseta de validare nu este bifata sa afiseze: "Culorile tale preferate nu se afla printre cele listate?". Rezolvare:
Private Sub Command1_Click() If Check1(0).Value = 1 Then T = T If Check1(1).Value = 1 Then T = T If Check1(2).Value = 1 Then T = T If Check1(3).Value = 1 Then T = T If Check1(4).Value = 1 Then T = T If Check1(5).Value = 1 Then T = T If Check1(6).Value = 1 Then T = T If Check1(7).Value = 1 Then T = T If Check1(8).Value = 1 Then T = T If Check1(9).Value = 1 Then T = T If T = "" Then Text1.Text = "Culorile tale Else Text1.Text = "Culorile tale End If End Sub + + + + + + + + + + Check1(0).Caption Check1(1).Caption Check1(2).Caption Check1(3).Caption Check1(4).Caption Check1(5).Caption Check1(6).Caption Check1(7).Caption Check1(8).Caption Check1(9).Caption + + + + + + + + + + ", ", ", ", ", ", ", ", ", ". " " " " " " " " " "

preferate nu sunt printre cele listate?" preferate sunt: " + T

60

23. Realizati un program sa afiseze in caption-ul unui buton de optiune daca un numar este sau nu divizibil cu 3 si/sau 5, iar rezultatele impartirii la 3 si 5 sa le afiseze in doua casete de text. Rezolvare:
Private Sub Command1_Click() If Text1.Text = "" Then MsgBox "Introduceti numarul", vbCritical, "Eroare" Else If Text1.Text Mod 3 = 0 Then Text2.Text = Text1.Text / 3 Else Text2.Text = "" End If If Text2.Text <> "" Then Option1.Caption = "Este divizibil cu 3" Option1.Value = True Else Option1.Caption = "Nu-i divizibil cu 3" Option1.Value = False End If End If End Sub Private Sub Command2_Click() If Text1.Text = "" Then MsgBox "Introduceti numarul", vbCritical, "Eroare" Else If Text1.Text Mod 5 = 0 Then Text3.Text = Text1.Text / 5 Else Text3.Text = "" End If If Text3.Text <> "" Then Option1.Caption = "Este divizibil cu 5" Option1.Value = True Else Option1.Caption = "Nu-i divizibil cu 5" Option1.Value = False End If End If End Sub

61

24. 'Scrieti un program care sa afiseze intr-o eticheta valoarea atinsa la executie pe o bara de derulare orizontala. In acelasi timp sa scrie in caption-ul unei casete de validare daca numarul este par sau impar si pentru numerele pare sa bifeze caseta iar pentru cele impare nu. Rezolvare:
Private Sub HScroll1_Change() Label1.Caption = HScroll1.Value If Val(Label1.Caption) Mod 2 = 0 Then Check1.Value = 1 Else Check1.Value = 0 End If If Check1.Value = 1 Then Check1.Caption = "Este numar par." Else Check1.Caption = "Este numar impar." End If If Val(Label1.Caption) = 0 Then Check1.Caption = "Este numar nul." End If End Sub

62

25. Faceti un program care sa sorteze conturile de venituri si cheltuieli si sa le aseze in liste separate. Rezolvare:
Private Sub Command1_Click() For i = 0 To List2.ListCount - 1 If Left(List2.List(i), 1) = 6 Then Chelt.AddItem List2.List(i) Else Ven.AddItem List2.List(i) End If Next i End Sub

26. Scrieti un program care sa calculeze suma: S=1+2+3++n. Rezolvare:


Private Sub Command1_Click() S = 0 For i = 1 To n S = S + i * i * i Next i Text2.Text = Str(S) End Sub

27. Realizati un program care in urma selectarii prefixului, cuvantului radacina si sufixului, si la comanda unui buton sa afiseze cuvantul nou format intr-o caseta de text.
Private Sub Command1_Click() If (prefix.Text = "im" And cuvrad.Text = "batran") And sufix.Text = "it" Then Text1.Text = "imbatranit" ElseIf (prefix.Text = "neim" And cuvrad.Text = "batran") And sufix.Text = "it" Then Text1.Text = "neimbatranit" ElseIf (prefix.Text = "neim" And cuvrad.Text = "batran") And sufix.Text = "it" Then Text1.Text = "neimbatranit" ElseIf (prefix.Text = "im" And cuvrad.Text = "batran") And sufix.Text = "esc" Then

63

Text1.Text = "imbatranesc" ElseIf cuvrad.Text = "batran" And sufix.Text = "esc" Then Text1.Text = "batranesc" ElseIf cuvrad.Text = "batran" And sufix.Text = "este" Then Text1.Text = "batraneste" ElseIf cuvrad.Text = "batran" And sufix.Text = "ete" Then Text1.Text = "batranete" ElseIf (cuvrad.Text = "flor" And prefix.Text = "in") And sufix.Text = "it" Then Text1.Text = "inflorit" ElseIf (cuvrad.Text = "flor" And prefix.Text = "in") And sufix.Text = "este" Then Text1.Text = "infloreste" ElseIf (cuvrad.Text = "flor" And prefix.Text = "nein") And sufix.Text = "it" Then Text1.Text = "neinflorit" ElseIf (cuvrad.Text = "flor" And prefix.Text = "in") And sufix.Text = "esc" Then Text1.Text = "infloresc" ElseIf cuvrad.Text = "flor" And sufix.Text = "icica" Then Text1.Text = "floricica" ElseIf cuvrad.Text = "flor" And sufix.Text = "ar" Then Text1.Text = "florar" ElseIf cuvrad.Text = "flor" And sufix.Text = "areasa" Then Text1.Text = "florareasa" ElseIf cuvrad.Text = "flor" And sufix.Text = "icele" Then Text1.Text = "floricele" End If If Text1.Text = "" Then MsgBox "Acest cuvant "Atentie!!!" End If End Sub

nu

exista

in

DEX-ul

limbii

romane.",

vbCritical,

28. Realizati un program care in urma selectarii prefixului, cuvantului radacina si sufixului, si la comanda unui buton sa afiseze cuvantul nou format intr-o caseta de text. Rezolvare
Private Sub Command1_Click() If (prefix.Text = "im" And cuvrad.Text = "batran") And sufix.Text = "it" Then Text1.Text = "imbatranit" ElseIf (prefix.Text = "neim" And cuvrad.Text = "batran") And sufix.Text = "it" Then Text1.Text = "neimbatranit" ElseIf (prefix.Text = "neim" And cuvrad.Text = "batran") And sufix.Text = "it" Then Text1.Text = "neimbatranit" ElseIf (prefix.Text = "im" And cuvrad.Text = "batran") And sufix.Text = "esc" Then Text1.Text = "imbatranesc" ElseIf cuvrad.Text = "batran" And sufix.Text = "esc" Then Text1.Text = "batranesc" ElseIf cuvrad.Text = "batran" And sufix.Text = "este" Then Text1.Text = "batraneste" ElseIf cuvrad.Text = "batran" And sufix.Text = "ete" Then Text1.Text = "batranete" ElseIf (cuvrad.Text = "flor" And prefix.Text = "in") And sufix.Text = "it" Then Text1.Text = "inflorit" ElseIf (cuvrad.Text = "flor" And prefix.Text = "in") And sufix.Text = "este" Then Text1.Text = "infloreste" ElseIf (cuvrad.Text = "flor" And prefix.Text = "nein") And sufix.Text = "it" Then

64

Text1.Text = "neinflorit" ElseIf (cuvrad.Text = "flor" And prefix.Text Text1.Text = "infloresc" ElseIf cuvrad.Text = "flor" And sufix.Text = Text1.Text = "floricica" ElseIf cuvrad.Text = "flor" And sufix.Text = Text1.Text = "florar" ElseIf cuvrad.Text = "flor" And sufix.Text = Text1.Text = "florareasa" ElseIf cuvrad.Text = "flor" And sufix.Text = Text1.Text = "floricele" End If

= "in") And sufix.Text = "esc" Then "icica" Then "ar" Then "areasa" Then "icele" Then

If Text1.Text = "" Then MsgBox "Acest cuvant nu exista in DEX-ul limbii romane.", vbCritical, "Atentie!!!" End If End Sub

Ctlin: Observatie. Pe pagina web a culegerii (http://stiinte.ub.ro/bogdan/cursuri/pce/indrumar) veti gasi un program complex, numit Calculator universal, realizat de Catalin, care realizeaza calcule de arii pentru figuri geometrice diferite, precum si alte calcule. 29. Aria trapezului Rezolvare

Private Sub Command1_Click() baza_mica = Val(Text1.Text) baza_mare = Val(Text2.Text)

65

inaltimea = Val(Text3.Text) aria = (baza_mica + baza_mare) * inaltimea / 2 Text4.Text = aria End Sub

30. Aria triunghiului folosind formula lui Heron Rezolvare:


Private Sub Command1_Click() a = Val(Text1.Text) b = Val(Text2.Text) c = Val(Text3.Text) p = (a + b + c) / 2 aria = Sqr(p * (p - a) * (p - b) * (p - c)) Text4.Text = aria End Sub

31. Aria unui triunghiu la care se cunoaste inaltimea si baza. Rezolvare


Private Sub Command1_Click() baza = Val(Text1.Text) inaltimea = Val(Text2.Text) aria = baza * inaltimea / 2 Text3.Text = aria End Sub

66

32. Aria si perimetrul cercului in functie de lungimea razei. Rezolvare:

Private Sub Command1_Click() Dim pi As Single pi = 3.1415926 raza = Val(Text1.Text) aria = pi * raza * raza perimetrul = 2 * pi * raza Text2.Text = aria Text3.Text = perimetrul End Sub

33. Aria dreptunghiului Rezolvare:


Private Sub Command1_Click() lat = Val(Text1.Text) lung = Val(Text2.Text) aria = lat * lung perim = 2 * (lat + lung) Text3.Text = aria Text4.Text = perim End Sub

67

34. Aria paralelogramului Rezolvare


Private Sub Command1_Click() baza = Val(Text2.Text) inaltimea = Val(Text1.Text) aria = baza * inaltimea Text3.Text = aria End Sub

35. Scrieti un program pentru a calcula, in functie de un numar natural n introdus de la tastatura, urmatoarele sume si produse: S1 = 1+3+5+...+(2n-1) S2 = 1x2 + 2x3 + 3x4 + ... + nx(n+1) S3 = 1/1 + 1/.2 + 1/3 + ... + 1/n (S3 este numar real!) P1 = 1x2x3x...xn (n!) P2 = 1x3x5x...x(2n-1) P3 = 1 x 1/2 x 3 x 1/4 x .... (n factori, P3 este numar real!) Rezolvare Amplasati in forma programului o caseta de text Text1 pentru introducerea valorii lui n si cate o caseta de text, Text2...Text7 pentru fiecare din valorile ce trebuie calculate. In final, amplasati un buton de comanda Command1 si scrieti urmatoarea subrutina: In loc de tipul Integer se poate folosi tipul Long (pentru numere intregi mai lungi, iar in loc de Single tipul Double pentru o precizie mai buna a numerelor reale). Private Sub Command1_Click() Dim n As Integer: Dim i As Integer Dim S1 As Integer: Dim S2 As Integer Dim S3 As Single: Dim P1 As Integer Dim P2 As Integer: Dim P3 As Single n=Val(Text1.Text) S1=0 For i=1 To n S1=S1+2*i-1 Next i 68

S2=0 For i=1 to n S2=S2+i*(i+1) Next i S3=0 For i=1 to n S3=S2+1/i Next i P1=1 For i=1 to n P1=P1*i Next i P2=1 For i=1 to n P2=P2*(2*i-1) Next i P3=1 For i=1 to n If i Mod 2 = 1 Then P3=P3*1/i Else P3=P3*i End If Next i Text2.Text=S1 Text3.Text=S2 Text4.Text=S3 Text5.Text=P1 Text6.Text=P2 Text7.Text=P3 End If

69

Capitolul 3. Programe cu liste, casete de validare, butoane de opiune i tabele (Anca, Andreea)
Anca 1.O forma contine : 2 liste: Numere si NumerePare caseta de text Text1 2 butoane: Command1 si Command2 Sa se scrie doua subrutine asociate celor doua butoane astfel: subrutina asociata evenimentului Click pe butonul Command2 care sa adauge in lista Numere numerele scrise in caseta de text Text1. subrutina asociata evenimentului Click pe butonul Command1 care sa copieze in lista NumerePare numai numerele pare din lista Numere Rezolvare:
Private Sub Command1_Click() For i = 0 To Numere.ListCount - 1 If Numere.List(i) Mod 2 = 0 Then NumerePare.AddItem Numere.List(i) End If Next i End Sub Private Sub Command2_Click() Numere.AddItem Text1.Text End Sub

2. O forma contine: un vector de controale Check1 cu 6 componente, fiind etichetate cu denumiri din sport un buton Buton1 cu Caption-ul Ce sporturi practici? o caseta de text Text1 70

Sa se scrie subrutina asociata evenimentului Click pe butonul Buton1 care afiseaza in caseta de text sporturile selectate, separate prin virgule. Rezolvare
Private Sub Buton1_Click() x = "" For i = 0 To 5 If Check1(i).Value = 1 Then x = x + Check1(i).Caption + "," End If Next i Text1.Text = "Practici " + x End Sub

3. Sa se scrie un program care sa calculeze suma cu TVA, stiindu-se suma fara TVA si avand posibilitatea de a alege cota de impunere (19% sau 9%). Rezolvare:
Private Sub Command1_Click() If Option1.Value = True Then x = 0.09 * Text1.Text Else x = 0.19 * Text1.Text End If Text2.Text = Val(Text1.Text) + x End Sub

71

Text1 Option1 Option2

Command1

Text2

4. O forma contine: un tabel T 2 casete de text: Text1 si Text2 2 etichete: Label 1 si Label 2 un buton Command1 cu Caption-ul Afiseaza anotimpul Tabelul are doua coloane, prima coloana contine nume de flori, iar a doua coloana numele anotimpului in care infloreste floarea respectiva. Sa se scrie subrutina asociata evenimentului Click pe butonul Command1 care, la introducerea in caseta de text Text1 a unui nume de floare , sa afiseze in caseta de text Text2 anotimpul in care aceasta infloreste sau, daca floarea nu exista in tabel sa afiseze acest lucru. Rezolvare:
Private Sub Command1_Click() gasit = False For i = 1 To T.Rows - 1 If T.TextMatrix(i, 0) = Text1.Text Then Text2.Text = T.TextMatrix(i, 1) gasit = True End If Next i If gasit = False Then Text2.Text = "Nu exista aceasta floare" End If End Sub Private Sub Form_Load() T.ColWidth(0) = T.ColWidth(0) * 2 T.ColWidth(1) = T.ColWidth(1) * 2 T.TextMatrix(0, 0) = "Floare" T.TextMatrix(0, 1) = "Anotimp" End Sub Private Sub T_KeyPress(KeyAscii As Integer) If (KeyAscii = 8) And (T.Text <> "") Then L = Len(T.Text) T.Text = Left(T.Text, L - 1) Else

72

If KeyAscii >= 32 Then T.Text = T.Text + Chr$(KeyAscii) End If End If End Sub

5. O forma contine: un tabel T o lista List1 o caseta de text Text1 un buton Command1 cu Caption-ul Afiseaza In tabel se vor trece nume de autori intr-o coloana si operele acestora in cealalta. Sa se scrie subrutina care, la apasarea butonului Command1, sa afiseze in lista List1 toate operele autorului trecut in caseta Text1. Rezolvare:
Private Sub Form_Load() T.ColWidth(0) = T.ColWidth(0) / 2 T.ColWidth(1) = T.ColWidth(1) * 2 T.ColWidth(2) = T.ColWidth(2) * 2 For i = 1 To T.Rows - 1 T.TextMatrix(i, 0) = i Next i T.TextMatrix(0, 0) = "Nr.crt" T.TextMatrix(0, 1) = "Autor" T.TextMatrix(0, 2) = "Titlu" End Sub Private Sub T_KeyPress(KeyAscii As Integer) If (KeyAscii = 8) And (T.Text <> "") Then L = Len(T.Text) T.Text = Left(T.Text, L - 1) Else If KeyAscii >= 32 Then T.Text = T.Text + Chr$(KeyAscii) End If End If End Sub Private Sub Command1_Click() List1.Clear

73

gasit = False For i = 1 To T.Rows - 1 If Left(T.TextMatrix(i, 1), Len(Text1.Text)) = Text1.Text Then List1.AddItem T.TextMatrix(i, 2) gasit = True End If Next i If gasit = False Then List1.AddItem "Acest scriitor nu figureaza in biblioteca" End If End Sub

6. Sa se scrie un program care sa calculeze media ponderata intre doua note pentru n elevi, prima nota avand ponderea 25%, iar a doua 75%. Rezolvare: Vom folosi un tabel de tip MS Flex Grid, cu 5 coloane (una pentru numarul curent, una pentru numele elevilor, coloanele 2 si 3 pentru notele elevilor, iar ultima coloana pentru mediile ponderate).
Private Sub Command1_Click() For i = 1 To Tabel.Rows - 1 If Tabel.TextMatrix(i, 1) <> "" Then Tabel.TextMatrix(i, 4) = (Val(Tabel.TextMatrix(i, 2) * 25) _ + Val(Tabel.TextMatrix(i, 3) * 75)) / 100 End If Next i End Sub Private Sub Form_Load() Tabel.ColWidth(0) = Tabel.ColWidth(0) / 2 Tabel.ColWidth(1) = Tabel.ColWidth(1) * 2 Tabel.TextMatrix(0, 0) = "Nr.crt" Tabel.TextMatrix(0, 1) = "Nume si prenume" Tabel.TextMatrix(0, 2) = "Nota 1" Tabel.TextMatrix(0, 3) = "Nota 2" Tabel.TextMatrix(0, 4) = "Media" For i = 1 To Tabel.Rows - 1

74

Tabel.TextMatrix(i, 0) = i Next i End Sub Private Sub Tabel_KeyPress(KeyAscii As Integer) If (KeyAscii = 8) And (Tabel.Text <> "") Then L = Len(Tabel.Text) Tabel.Text = Left(Tabel.Text, L - 1) Else If KeyAscii >= 32 Then Tabel.Text = Tabel.Text + Chr$(KeyAscii) End If End If End Sub

7. O forma contine: un tabel denumit Tabel (cu 6 coloane si 10 randuri) ce contine date despre masini: marca, modelul, capacitatea cilindrica, combustibilul si pretul 2 controale de tip Combo, unul pentru alegerea marcii si al doilea pentru model lista List1 un buton Command1 Sa se scrie subrutina care, la apasarea butonului Command1, sa afiseze in lista List1 toate autoturismele avand marca si modelul specificate si toate informatiile despre acestea. 8. Sa se realizeze un program care sa contina: un tabel cu nume de persoane si numere de telefon caseta de text pentru a introduce numele cautat un buton lista si sa permita afisarea intr-o lista a numelor cautate si a numerelor de telefon, unele sub altele. Rezolvare:
Private Sub Command1_Click() gasit = False For i = 1 To Agenda.Rows - 1 If Left(Agenda.TextMatrix(i, 1), Len(Text1.Text)) = Text1.Text Then

75

List1.AddItem Agenda.TextMatrix(i, 1) List1.AddItem Agenda.TextMatrix(i, 2) gasit = True End If Next i If gasit = False Then List1.AddItem "Aceasta persoana nu este in agenda!" End If End Sub Private Sub Agenda_KeyPress(KeyAscii As Integer) If (KeyAscii = 8) And (Agenda.Text <> "") Then L = Len(Agenda.Text) Agenda.Text = Left(Agenda.Text, L - 1) Else If KeyAscii >= 32 Then Agenda.Text = Agenda.Text + Chr$(KeyAscii) End If End If End Sub Private Sub Form_Load() Agenda.ColWidth(0) = Agenda.ColWidth(0) / 2 Agenda.ColWidth(1) = Agenda.ColWidth(1) * 2 Agenda.TextMatrix(0, 0) = "Nr.crt." Agenda.TextMatrix(0, 1) = "Nume si prenume" Agenda.TextMatrix(0, 2) = "Telefon" For i = 1 To Agenda.Rows - 1 Agenda.TextMatrix(i, 0) = i Next i End Sub

9. O forma contine: un control de tip Combo care contine toate lunile anului caseta de text un buton de comanda Sa se scrie subrutina care permite alegerea unei luni si afiseaza, la apasarea butonului, anotimpul din care face parte luna respectiva. Rezolvare:
Private Sub Command1_Click()

76

Select Case Combo1.Text Case "ianuarie", "februarie", "decembrie" Text1.Text = "iarna" Case "martie", "aprilie", "mai" Text1.Text = "primavara" Case "iunie", "iulie", "august" Text1.Text = "vara" Case Else Text1.Text = "toamna" End Select End Sub

10. Sa se realizeze un program sub forma unui dictionar roman-englez, putandu-se alege dintr-o lista cuvinte in limba romana, acestea fiind traduse in limba engleza. Rezolvare
Private Sub Command1_Click() Select Case Combo1.Text Case "mar" Text1.Text = "apple" Case "masina" Text1.Text = "car" Case "cal" Text1.Text = "horse" Case "pisica" Text1.Text = "cat" Case "casa" Text1.Text = "house" Case "paine" Text1.Text = "bread" Case "caine" Text1.Text = "dog" End Select End Sub

77

11. O forma contine doua controale de tip Combo, cu ajutorul carora se poate selecta data nasterii (ziua si luna), afisandu-se zodia. Rezolvare
Private Sub Buton1_Click() Select Case Combo2.Text Case "ianuarie" Select Case Combo1.Text Case 1 To 20 Text1.Text = "capricorn" Case Else Text1.Text = "varsator" End Select Case "februarie" Select Case Val(Combo1.Text) Case 1 To 19 Text1.Text = "varsator" Case Else Text1.Text = "pesti" End Select Case "martie" Select Case Val(Combo1.Text) Case 1 To 20 Text1.Text = "pesti" Case Else Text1.Text = "berbec" End Select Case "aprilie" Select Case Val(Combo1.Text) Case 1 To 20 Text1.Text = "berbec" Case Else Text1.Text = "taur" End Select Case "mai" Select Case Val(Combo1.Text) Case 1 To 21 Text1.Text = "taur" Case Else Text1.Text = "gemeni" End Select Case "iunie"

78

Select Case Val(Combo1.Text) Case 1 To 21 Text1.Text = "gemeni" Case Else Text1.Text = "rac" End Select Case "iulie" Select Case Val(Combo1.Text) Case 1 To 23 Text1.Text = "rac" Case Else Text1.Text = "leu" End Select Case "august" Select Case Val(Combo1.Text) Case 1 To 23 Text1.Text = "leu" Case Else Text1.Text = "fecioara" End Select Case "septembrie" Select Case Val(Combo1.Text) Case 1 To 23 Text1.Text = "fecioara" Case Else Text1.Text = "balanta" End Select Case "octombrie" Select Case Val(Combo1.Text) Case 1 To 23 Text1.Text = "balanta" Case Else Text1.Text = "scorpion" End Select Case "noiembrie" Select Case Val(Combo1.Text) Case 1 To 22 Text1.Text = "scorpion" Case Else Text1.Text = "sagetator" End Select Case "decembrie" Select Case Val(Combo1.Text) Case 1 To 22 Text1.Text = "sagetator" Case Else Text1.Text = "capricorn" End Select End Select End Sub

79

12. O forma contine: doua liste: List1 si List2 caseta de text Text1 un buton Command1 Lista List1 contine nume de persoane. Sa se scrie subrutina asociata evenimentului Click pe butonul Command1 care sa afiseze in lista List2 toate numele care incep cu litera specificata in caseta de text. Rezolvare
Private Sub Command1_Click() For i = 0 To List1.ListCount - 1 If (Left(List1.List(i), Len(Text1.Text)) = Text1.Text) Then List2.AddItem List1.List(i) End If Next i End Sub

13. Sa se realizeze un program care afiseaza zodia in zodiacul chinezesc, in functie de anul nasterii, folosindu-se butoane de optiune. Rezolvare
Private Sub Command1_Click() For i = 0 To 11 If Option1(i) = True Then Select Case i Case 0 Text1.Text = "Sobolan" Case 1 Text1.Text = "Bivol" Case 2

80

Text1.Text Case 3 Text1.Text Case 4 Text1.Text Case 5 Text1.Text Case 6 Text1.Text Case 7 Text1.Text Case 8 Text1.Text Case 9 Text1.Text Case 10 Text1.Text Case 11 Text1.Text End Select End If Next i End Sub

= "Tigru" = "Iepure" = "Dragon" = "Sarpe" = "Cal" = "Capra" = "Maimuta" = "Cocos" = "Caine" = "Porc"

14. Sa se scrie un program care afiseaza zodia in zodiacul chinezesc, folosindu-se, de aceasta data, un control de tip Combo, care sa permita alegerea anului nasterii.

81

Rezolvare
Private Sub Command1_Click() Select Case Combo1.Text Case 1960, 1972, 1984, 1996 Text1.Text = "Sobolan" Case 1961, 1973, 1985, 1997 Text1.Text = "Bivol" Case 1962, 1974, 1986, 1998 Text1.Text = "Tigru" Case 1963, 1975, 1987, 1999 Text1.Text = "Iepure" Case 1964, 1976, 1988, 2000 Text1.Text = "Dragon" Case 1965, 1977, 1989, 2001 Text1.Text = "Sarpe" Case 1966, 1978, 1990, 2002 Text1.Text = "Cal" Case 1967, 1979, 1991, 2003 Text1.Text = "Capra" Case 1968, 1980, 1992, 2004 Text1.Text = "Maimuta" Case 1969, 1981, 1993 Text1.Text = "Cocos" Case 1970, 1982, 1994 Text1.Text = "Caine" Case 1971, 1983, 1995 Text1.Text = "Porc" End Select End Sub

15. O forma contine: lista Animale cu nume de animale caseta de text Text1 un buton Command1 Sa se scrie subrutina asociata evenimentului Click pe butonul Command1 care sa afiseze in caseta Text1 elementul selectat din lista. Rezolvare
Private Sub Command1_Click() For i = 0 To Animale.ListCount - 1 Text1.Text = Animale.Text

82

Next i End Sub

16. Sa se realizeze un program care sa permita alegerea unui judet din lista Combo1 si sa afiseze in caseta de text Text1 resedinta de judet, la apasarea butonului Command1. Rezolvare
Private Sub Command1_Click() Select Case Combo1.Text Case "Bacau" Text1.Text = "Bacau" Case "Braila" Text1.Text = "Braila" Case "Botosani" Text1.Text = "Botosani" Case "Galati " Text1.Text = "Galati" Case "Bihor" Text1.Text = "Oradea" Case "Dolj" Text1.Text = "Craiova" Case "Iasi" Text1.Text = "Iasi" Case "Mures" Text1.Text = "Tg. Mures" Case "Neamt" Text1.Text = "Piatra Neamt" Case "Vaslui" Text1.Text = "Vaslui" Case "Salaj" Text1.Text = "Zalau" Case "Suceava" Text1.Text = "Suceava" End Select End Sub

17. O forma contine: un control de tip Combo ce contine nume de tari caseta de text Text1 un buton Command1

83

Sa se scrie subrutina asociata evenimentului Click pe butonul Command1 care sa afiseze in caseta Text1 continentul pe care se afla tara respectiva. Rezolvare
Private Sub Command1_Click() Select Case Combo1.Text Case Combo1.Text = "Romania", "Austria", "Franta", _ "Spania", "Italia", "Belgia", "Olanda" Text1.Text = "Europa" Case Combo1.Text = "Nigeria", "Zair", "Libia", _ "Liban", "Ciad", "Sudan", "Angola", "Kenya" Text1.Text = "Africa" Case Combo1.Text = "Columbia", "Venezuela", "Peru", _ "Bolivia", "Argentina", "Brazilia" Text1.Text = "America de Sud" Case Combo1.Text = "Canada", "S.U.A.", "Mexic" Text1.Text = "America de Nord" Case Combo1.Text = "Afghanistan", "Thailanda", _ "China", "Pakistan", "Japonia", "Coreea", "Vietnam" Text1.Text = "Asia" End Select End Sub

18. O forma contine: un control de tip Combo cu ingrediente pentru prajituri lista List1 Sa se scrie subrutina care, in momentul cand s-a facut Click pe un ingredient din lista Combo1, sa-l afiseze pe acesta in lista List1. Rezolvare
Private Sub Combo1_Click() List1.AddItem Combo1.Text End Sub

19. Sa se realizeze un program care sa afiseze intr-o lista alimentele cu putine calorii folosite intr-un regim de slabit, repartizate pe principalele mese ale zilei. Rezolvare
Private Sub Command1_Click() List1.Clear Select Case Combo1.Text Case "Micul dejun" List1.AddItem "1 ou fiert" List1.AddItem "Cafea sau ceai" Case "Pranz" List1.AddItem "Peste slab la gratar"

84

List1.AddItem "Salata de cruditati" Case "Cina" List1.AddItem "Pui fara piele fiert" List1.AddItem "Salata de cruditati" End Select End Sub

20. Sa se realizeze un program care sa afiseze intr-o lista cele mai importante orase dintr-o tara, tara alegandu-se dintr-o lista de tip Combo. Rezolvare
Private Sub Command1_Click() Orase.Clear Select Case Combo1.Text Case "Italia" Orase.AddItem "Roma" Orase.AddItem "Torino" Orase.AddItem "Milano" Orase.AddItem "Venetia " Case "Franta" Orase.AddItem "Paris" Orase.AddItem "Lyon" Orase.AddItem "Toulouse" Orase.AddItem "Nantes" Case "Spania" Orase.AddItem "Madrid" Orase.AddItem "Lisabona" Orase.AddItem "Sevilla" Orase.AddItem "Barcelona" Case "Germania" Orase.AddItem "Berlin" Orase.AddItem "Koln" Orase.AddItem "Bremen" Orase.AddItem "Munchen" Case "Marea Britanie" Orase.AddItem "Londra" Orase.AddItem "Birmingham" Orase.AddItem "Manchester" Orase.AddItem "Liverpool" End Select End Sub

85

21. O forma contine trei butoane de optiune cu numele unor sporturi. Sa se realizeze un program care sa afiseze intr-o lista accesoriile necesare practicarii sportului selectat. Rezolvare
Private Sub Command1_Click() List1.Clear If Option1.Value = True Then List1.AddItem "Racheta" List1.AddItem "Minge de tenis" Else If Option2.Value = True Then List1.AddItem "Schiuri" List1.AddItem "Clapari" List1.AddItem "Ochelari" Else If Option3.Value = True Then List1.AddItem "Tac" List1.AddItem "Bile" List1.AddItem "Masa de biliard" End If End If End If End Sub

86

22. O forma contine: 3 butoane de optiune: Meniul1, Meniul2, Meniul3 lista un buton Sa se scrie subrutina asociata evenimentului Click pe buton care sa afiseze in lista felurile de mancare continute de meniul selectat. Rezolvare
Private Sub Command1_Click() List1.Clear If Option1.Value = True Then List1.AddItem "Ciorba de perisoare" List1.AddItem "Piure cu ficatei" List1.AddItem "Gogosi cu ciocolata" Else If Option2.Value = True Then List1.AddItem "Ciorba de vacuta" List1.AddItem "Cartofi pai cu piept de pui" List1.AddItem "Clatite cu gem" Else If Option3.Value = True Then List1.AddItem "Ciorba de burta" List1.AddItem "Frigarui" List1.AddItem "Salata de fructe" End If End If End If End Sub

87

23. Sa se realizeze un program care sa afiseze greutatea unei lingurite dintr-un anumit ingredient, folosind butoane de optiune. Rezolvare
Private Sub Command1_Click() For i = 0 To 3 If Option1(i).Value = True Then Select Case i Case "0" Text1.Text = "5g" Case "1" Text1.Text = "7g" Case "2" Text1.Text = "6g" Case "3" Text1.Text = "10g" End Select End If Next End Sub

24. O forma contine: un tabel T cu 3 coloane si 10 randuri ce contine numere un cadru Frame1 2 butoane de optiune situate in interiorul cadrului un buton de comanda Command1

88

Sa se scrie subrutina asociata evenimentului Click pe butonul Command1 care sa realizeze media, aritmetica sau geometrica, in functie de butonul de optiune ales, a celor doua numere situate pe acelasi rand si sa o afiseze pe a treia coloana a tabelului. 25. O forma contine: un tabel T cu 10 randuri si 2 coloane in care vor fi introduse animale si felul lor ("domestic" sau "salbatic") un cadru ce contine doua butoane de optiune cu caption-ul domestice, respectiv salbatice lista List1 un buton Command1 Sa se scrie subrutina care afiseaza in lista List1 toate animalele, domestice sau salbatice, in functie de optiunea aleasa. Rezolvare
Private Sub t_KeyPress(KeyAscii As Integer) If (KeyAscii = 8) And (T.Text <> "") Then L = Len(T.Text) T.Text = Left(T.Text, L - 1) Else If KeyAscii >= 32 Then T.Text = T.Text + Chr$(KeyAscii) End If End If End Sub Private Sub Command1_Click() List1.Clear If Option1.Value = True Then For i = 0 To T.Rows - 1 If T.TextMatrix(i, 1) = "domestic" Then List1.AddItem T.TextMatrix(i, 0) End If Next i Else For i = 0 To T.Rows - 1 If T.TextMatrix(i, 1) = "salbatic" Then List1.AddItem T.TextMatrix(i, 0) End If Next i End If End Sub Private Sub Form_Load() T.TextMatrix(0, 0) = "Animal" T.TextMatrix(0, 1) = "Felul" End Sub

89

26. Realizati un program care sa afiseze suma elementelor dintr-o lista intr-o caseta de text. Rezolvare
Private Sub Command1_Click() Suma = 0 For i = 0 To List1.ListCount - 1 Suma = Suma + List1.List(i) Next i Text1.Text = Suma End Sub

27. Scrieti un program care sa afiseze intr-o caseta de text elementul maxim dintr-o lista. Rezolvare
Private Sub Command1_Click() Text1.Text = List1.List(1) For i = 1 To List1.ListCount - 1 If Val(Text1.Text) < List1.List(i) Then Text1.Text = List1.List(i) End If Next i End Sub

28. Scrieti un program care sa caute un element intr-o lista si sa afiseze intr-o caseta de text daca acesta exista in lista sau nu. 90

Rezolvare
Private Sub Command1_Click() gasit = False While (i <= List1.ListCount) And (Not gasit) If List1.List(i) = Text1.Text Then gasit = True Else i = i + 1 End If Wend If gasit Then MsgBox "Elementul " + Text1.Text + " exista in lista" Else MsgBox "Elementul " + Text1.Text + " nu exista in lista" End If End Sub

29.O forma contine: trei butoane cu Caption-ul Metru, Litru,Gram doua liste List1 si List2 Sa se scrie subrutinele asociate evenimentului Click pe cele trei butoane care sa afiseze in lista List1 multiplii unitatii de masura selectate, iar in lista List2, submultiplii acesteia. Rezolvare
Private Sub Command1_Click() List1.Clear List1.AddItem "decametru" List1.AddItem "hectometru" List1.AddItem "kilometru" List2.Clear List2.AddItem "decimetru" List2.AddItem "centimetru" List2.AddItem "milimetru" End Sub Private Sub Command2_Click() List1.Clear List1.AddItem "decalitru" List1.AddItem "hectolitru" List1.AddItem "kilolitru" List2.Clear List2.AddItem "decilitru" List2.AddItem "centilitru" List2.AddItem "mililitru" End Sub Private Sub Command3_Click() List1.Clear List1.AddItem "decagram"

91

List1.AddItem List1.AddItem List2.Clear List2.AddItem List2.AddItem List2.AddItem End Sub

"hectogram" "kilogram" "decigram" "centigram" "miligram"

30. O forma contine: 2 casete de text 3 butoane de optiune (decimetri, centimetri,milimetri) un buton de comanda Sa se scrie subrutina asociata evenimentului Click pe butonul de comanda care sa transforme valoarea in metri scrisa in caseta de text Text1 in unitatea de masura selectata si sa o afiseze in caseta Text2. Rezolvare
Private Sub Command1_Click() If Option1.Value = True Then Text2.Text = Text1.Text * 10 Else If Option2.Value = True Then Text2.Text = Text1.Text * 100 Else Text2.Text = Text1.Text * 1000 End If End If End Sub

31. O forma contine: lista de tip Combo 2 casete de text un buton de comanda Sa se scrie subrutina asociata evenimentului Click pe butonul de comanda care sa transforme suma din caseta Text1, din lei in valuta aleasa din lista.

92

Rezolvare
Private Sub Command1_Click() Select Case Combo1.Text Case "Euro" Text2.Text = (Text1.Text) / 37283 Case "Dolar SUA" Text2.Text = (Text1.Text) / 28997 Case "Lira sterlina" Text2.Text = (Text1.Text) / 54234 End Select End Sub

32. O forma contine: lista de tip Combo1 2 butoane de comanda cu Caption-ul vanzare, respectiv cumparare caseta de text Sa se scrie subrutinele corespunzatoare celor doua butoane care sa afiseze in caseta de text cursul practicat de casa de schimb la vanzare, respectiv cumparare, pentru valuta aleasa din lista. Rezolvare
Private Sub Command1_Click() Select Case Combo1.Text Case "Euro" Text1.Text = "37 500 lei" Case "Dolar SUA" Text1.Text = "29 200 lei" End Select End Sub Private Sub Command2_Click() Select Case Combo1.Text Case "Euro" Text1.Text = "35 500 lei" Case "Dolar SUA" Text1.Text = "27 000 lei" End Select End Sub

33. O forma contine: un tabel T cu 2 coloane si 10 randuri un buton de comanda caseta de validare Sa se scrie subrutina asociata evenimentului Click pe butonul de comanda prin care, daca caseta este marcata, sa afiseze in a doua coloana dublul numerelor din prima, iar daca nu este marcata, sa afiseze jumatatea lor. Rezolvare
Private Sub Command1_Click() If Check1.Value = 1 Then For i = 1 To T.Rows - 1 T.TextMatrix(i, 1) = 2 * Val(T.TextMatrix(i, 0))

93

Next i Else For j = 1 To T.Rows - 1 T.TextMatrix(j, 1) = Val(T.TextMatrix(j, 0)) / 2 Next j End If End Sub Private Sub t_KeyPress(KeyAscii As Integer) If (KeyAscii = 8) And (T.Text <> "") Then L = Len(T.Text) T.Text = Left(T.Text, L - 1) Else If KeyAscii >= 32 Then T.Text = T.Text + Chr$(KeyAscii) End If End If End Sub

34. Sa se scrie un program care sa clasifice produse dupa un cod numeric, in functie de felul produsului, cum ar fi: alimentara, cosmetice, chimice, imbracaminte, incaltaminte. Rezolvare
Private Sub Command1_Click() For i = 1 To Tabel.Rows - 1 If (Option1.Value = True) And _ (Left(Tabel.TextMatrix(i, 2), 1) = "1") Then List1.AddItem Tabel.TextMatrix(i, 1) Else If (Option2.Value = True) And _ (Left(Tabel.TextMatrix(i, 2), 1) = "2") Then List1.AddItem Tabel.TextMatrix(i, 1) Else If (Option3.Value = True) And _ (Left(Tabel.TextMatrix(i, 2), 1) = "3") Then List1.AddItem Tabel.TextMatrix(i, 1) Else If (Option4.Value = True) And _ (Left(Tabel.TextMatrix(i, 2), 1) = "4") Then List1.AddItem Tabel.TextMatrix(i, 1) Else If (Option5.Value = True) And _ (Left(Tabel.TextMatrix(i, 2), 1) = "5") Then List1.AddItem Tabel.TextMatrix(i, 1)

94

End If End If End If End If End If Next i End Sub Private Sub Command3_Click() Open App.Path + "\tabel.txt" For Output As #1 For i = 1 To Tabel.Rows - 1 For j = 1 To Tabel.Cols - 1 Print #1, Tabel.TextMatrix(i, j) Next j Next i Close #1 End Sub Private Sub Command2_Click() Open App.Path + "\tabel.txt" For Input As #1 For i = 1 To Tabel.Rows - 1 For j = 1 To Tabel.Cols - 1 Line Input #1, s Tabel.TextMatrix(i, j) = s Next j Next i Close #1 End Sub Private Sub Form_Load() Tabel.ColWidth(0) = Tabel.ColWidth(0) / 2 Tabel.ColWidth(1) = Tabel.ColWidth(1) * 2 For i = 1 To Tabel.Rows - 1 Tabel.TextMatrix(i, 0) = i Next i Tabel.TextMatrix(0, 0) = "Nr. crt." Tabel.TextMatrix(0, 1) = "Produs" Tabel.TextMatrix(0, 2) = "Cod" End Sub Private Sub Tabel_KeyPress(KeyAscii As Integer) If (KeyAscii = 8) And (Tabel.Text <> "") Then L = Len(Tabel.Text) Tabel.Text = Left(Tabel.Text, L - 1) Else If KeyAscii >= 32 Then Tabel.Text = Tabel.Text + Chr$(KeyAscii) End If End If End Sub

95

35.Sa se realizeze un program pt farmacii care sa arate ce medicamente sunt compensate, cu cit sunt compensate, sau gratuite. Rezolvare
Private Sub Command1_Click() Open App.Path + "\tabel1.txt" For Output As #1 For i = 1 To T.Rows - 1 For j = 1 To T.Cols - 1 Print #1, T.TextMatrix(i, j) Next j Next i Close #1 End Sub Private Sub Command2_Click() Open App.Path + "\tabel1.txt" For Input As #1 For i = 1 To T.Rows - 1 For j = 1 To T.Cols - 1 Line Input #1, s T.TextMatrix(i, j) = s Next j Next i Close #1 End Sub Private Sub Command3_Click() For i = 1 To T.Rows - 1 If T.TextMatrix(i, 1) = Text1.Text Then Text2.Text = T.TextMatrix(i, 2) End If Next i End Sub Private Sub t_KeyPress(KeyAscii As Integer) If (KeyAscii = 8) And (T.Text <> "") Then

96

L = Len(T.Text) T.Text = Left(T.Text, L - 1) Else If KeyAscii >= 32 Then T.Text = T.Text + Chr$(KeyAscii) End If End If End Sub Private Sub Form_Load() T.ColWidth(0) = T.ColWidth(0) / 2 T.ColWidth(1) = T.ColWidth(1) * 2 T.ColWidth(2) = T.ColWidth(2) * 2 T.TextMatrix(0, 0) = "Nr.crt." T.TextMatrix(0, 1) = "Medicament" T.TextMatrix(0, 2) = "Felul" For i = 1 To T.Rows - 1 T.TextMatrix(i, 0) = i Next i End Sub

36. Realizati un program care sa calculeze numarul destinului in functie de numele persoanei, adunand cifrele corespunzatoare literelor din nume, astfel: 1 A J S 2 B K T 3 C L U 4 D M V 5 E N W 6 F O X 7 G P Y 8 H Q Z 9 I R

Daca se obtine un numar din mai multe cifre, acestea vor fi adunate pana se va obtine un numar simplu (dintr-o singura cifra).

97

Rezolvare

Private Sub Command1_Click() s = 0 For i = 1 To Len(Text1.Text) x = Left(Text1.Text, i) k = Right(x, 1) Select Case k Case "A", "J", "S" j = 1 Case "B", "K", "T" j = 2 Case "C", "L", "U" j = 3 Case "D", "M", "V" j = 4 Case "E", "N", "W" j = 5 Case "F", "O", "X" j = 6 Case "G", "P", "Y" j = 7 Case "H", "Q", "Z" j = 8 Case "I", "R" j = 9 End Select s = s + j If Len(s) = 2 Then s = Val(Left(s, 1)) + Val(Right(s, 1)) End If Next i Text2.Text = s End Sub

37. Realizati un program care sa descompuna numerele in mii, sute, zeci si unitati.

98

Rezolvare: Amplasati in forma dumneavoastra un buton de comanda Command1 si o caseta de text Text1, unde se va introduce (la rularea programului) numarul respectiv (de exemplu 3452). Nu se va putea introduce aici un numar cu mai mult de 4 cifre (subrutina va afisa un mesaj corespuznator). Amplasati, apoi, pe forma inca patru casete de text (Text2, Text3, Text4 si Text5) corespunzatoare cifrei miilor, sutelor, zecilor si unitatilor. Scrieti urmatorul cod:
Private Sub Command1_Click() If Len(Text1.Text) <= 4 Then Text5.Text = Right(Text1.Text, 1) If Len(Text1.Text) >= 2 Then Text4.Text = Left(Right(Text1.Text, 2), 1) Else Text4.Text = "0" End If If Len(Text1.Text) >= 3 Then Text3.Text = Left(Right(Text1.Text, 3), 1) Else Text3.Text = "0" End If If Len(Text1.Text) >= 4 Then Text2.Text = Left(Text1.Text, 1) Else Text2.Text = "0" End If Else MsgBox "Dati un numar mai mic" End If End Sub

38. Realizati un program care sa afiseze in doua liste diferite vocalele si consoanele dintr-un cuvant. Rezolvare:
Private Sub Command1_Click() For i = 1 To Len(Text1.Text) j = Left(Text1.Text, i) k = Right(j, 1) Select Case k Case "a", "e", "i", "o", "u", "A", "E", "I", "O", "U" Vocale.AddItem k Case Else Consoane.AddItem k End Select Next i End Sub

39. O forma contine o bara de derulare cu valori intre 1 si 100. Sa se scrie subrutina asociata evenimentului click pe butonul Command1 care sa afiseze in caseta de text Text1 patratul valorii selectate prin intermediul barei de derulare. Rezolvare:
Private Sub bara_Change() Label1.Caption = bara.Value End Sub Private Sub Command1_Click() Text1.Text = bara.Value * bara.Value End Sub

99

Andreea 40. Realizati un program care, la apasarea butonului "Buton", sa preia dintr-o lista, numita "NumerePozitive", care contine numere pozitive, doar numerele mai mici de 10. Aceste numere sa fie afisate intr-o alta lista, denumita "MaiMiciDeZece" care este goala la inceput. Rezolvare. O lista simpla se amplaseaza cu ajutorul controlului ListBox din Toolbox si se denumeste folosind proprietatea "Name". Scrieti numerele pozitive la proprietatea "List", separate prin Ctrl+Enter. Butoanele se amplaseaza cu ajutorul controlului Command Button din Toolbox si se denumesc la proprietatea Name. Subrutina care da solutia programului este urmatoarea:
Private Sub Buton_Click() MaiMiciDeZece.Clear For i = 0 To NumerePozitive.ListCount - 1 If NumerePozitive.List(i) < 10 Then MaiMiciDeZece.AddItem NumerePozitive.List(i) End If Next i End Sub

unde: ListCount = Numarul elementelor din lista Clear = Sterge elementele din lista List(i) = Elementul din lista de pe pozitia i lista.AddItem elem = Adauga elementul "elem" la lista "lista"

41. Realizati un program care, la apasarea butonului "Buton", sa preia dintr-o lista, numita "Numere", care contine numere pozitive si negative, doar numerele negative. Aceste numere sa fie afisate intr-o alta lista, denumita "NumereNegative" care este goala la inceput. Rezolvare. 100

O lista simpla se amplaseaza cu ajutorul controlului ListBox din Toolbox si se denumeste folosind proprietatea "Name". Scrieti numerele pozitive si negative la proprietatea "List", separate prin Ctrl+Enter. Butoanele se amplaseaza cu ajutorul controlului Command Button din Toolbox si se denumesc la proprietatea Name. Subrutina care da solutia programului este urmatoarea:
Private Sub Buton_Click() NumereNegative.Clear For i = 0 To Numere.ListCount - 1 If Numere.List(i) < 0 Then NumereNegative.AddItem Numere.List(i) End If Next i End Sub

unde: ListCount = Numarul elementelor din lista Clear = Sterge elementele din lista List(i) = Elementul din lista de pe pozitia i lista.AddItem elem = Adauga elementul "elem" la lista "lista"

42. Realizati un program care, la apasarea butonului "Buton", sa preia dintr-o lista, numita "Numere", care contine numere pozitive si negative, doar numerele negative, si modulul acestor numere sa fie afisat intr-o alta lista, denumita "ModulNumere" care este goala la inceput. Rezolvare. O lista simpla se amplaseaza cu ajutorul controlului ListBox din Toolbox si se denumeste folosind proprietatea "Name". Scrieti numerele pozitive si negative la proprietatea "List", separate prin Ctrl+Enter. Butoanele se amplaseaza cu ajutorul controlului Command Button din Toolbox si se denumesc la proprietatea Name. Subrutina care da solutia programului este urmatoarea:
Private Sub Buton_Click() ModulNumere.Clear For i = 0 To Numere.ListCount - 1 If Numere.List(i) < 0 Then ModulNumere.AddItem Abs(Numere.List(i)) End If Next i End Sub

unde: ListCount = Numarul elementelor din lista Clear = Sterge elementele din lista 101

List(i) = Elementul din lista de pe pozitia i lista.AddItem elem = Adauga elementul "elem" la lista "lista" 43. Realizati un program care, la apasarea butonului "Buton", sa preia dintr-o lista, numita "NumerePozitive", care contine numere pozitive, doar numerele pare. Aceste numere sa fie afisate intr-o alta lista, denumita "NumerePare" care este goala la inceput. Rezolvare. O lista simpla se amplaseaza cu ajutorul controlului ListBox din Toolbox si se denumeste folosind proprietatea "Name". Scrieti numerele pozitive la proprietatea "List", separate prin Ctrl+Enter. Butoanele se amplaseaza cu ajutorul controlului Command Button din Toolbox si se denumesc la proprietatea Name. Subrutina care da solutia programului este urmatoarea:
Private Sub Buton_Click() NumerePare.Clear For i = 0 To NumerePozitive.ListCount - 1 If NumerePozitive.List(i) Mod 2 = 0 Then NumerePare.AddItem NumerePozitive.List(i) End If Next i End Sub

unde: ListCount = Numarul elementelor din lista Clear = Sterge elementele din lista List(i) = Elementul din lista de pe pozitia i lista.AddItem elem = Adauga elementul "elem" la lista "lista" 44. Realizati un program care, la apasarea butonului "Buton", sa preia dintr-o lista, numita "NumerePozitive", care contine numere pozitive, doar numerele impare. Aceste numere sa fie afisate intr-o alta lista, denumita "NumereImpare" care este goala la inceput. Rezolvare. O lista simpla se amplaseaza cu ajutorul controlului ListBox din Toolbox si se denumeste folosind proprietatea "Name". Scrieti numerele pozitive la proprietatea "List", separate prin Ctrl+Enter. Butoanele se amplaseaza cu ajutorul controlului Command Button din Toolbox si se denumesc la proprietatea Name. Subrutina care da solutia programului este urmatoarea:
Private Sub Buton_Click() NumereImpare.Clear For i = 0 To NumerePozitive.ListCount - 1 If NumerePozitive.List(i) Mod 2 <> 0 Then NumereImpare.AddItem NumerePozitive.List(i) End If Next i End Sub

unde: ListCount = Numarul elementelor din lista Clear = Sterge elementele din lista List(i) = Elementul din lista de pe pozitia i lista.AddItem elem = Adauga elementul "elem" la lista "lista" 45. Amplasati intr-o forma o eticheta pe care sa scrie: "Nota dumneavoastra este mai mare sau egala cu 5?", 2 casete de validare numite "DA", respectiv "NU" si in care sa scrie "DA", respectiv "NU", 102

si o caseta de text, numita "Rezultat". Realizati un program care, la validarea casetei "DA" sa afiseze in caseta de text, textul "Felicitari!Ati promovat examenul!" iar la validarea casetei "NU" sa fie afisat textul "Ne pare rau dar trebuie sa mai studiati!Ati picat examenul!". Rezolvare. Etichetele se creeaza cu ajutorul controlului Label din Toolbox si se scrie in interiorul lor folosind proprietatea "Caption" din tabelul de proprietati din dreapta. Casutele de text se amplaseaza cu ajutorul controlului TextBox din Toolbox, se denumesc la proprietatea Name si se goleste continutul lor de la proprietatea Text din tabelul de proprietati din dreapta. Casetele de validare de amplaseaza cu ajutorul controlului Check Box din Toolbox, de denumesc la proprietatea "Name" si se scrie in interiorul lor la proprietatea "Caption". Subrutinele corespunzatoare casetelor de validare "DA", respectiv "NU" sunt urmatoarele:
Private Sub DA_Click() If DA.Value = 1 Then NU.Value = 0 Rezultat.Text = "Felicitari!Ati promovat examenul!" End If End Sub Private Sub NU_Click() If NU.Value = 1 Then DA.Value = 0 Rezultat.Text = _ "Ne pare rau dar trebuie sa mai studiati! Ati picat examenul!" End If End Sub

unde: CheckBox.Value

= 0 - caseta este nemarcata = 1 - caseta este marcata = 2 - caseta este inactiva

46. Amplasati intr-o forma o eticheta pe care sa scrie: "2+5*(6-9/3)/lg10=17 ?", 2 casete de validare numite "DA", respectiv "NU" si in care sa scrie "DA", respectiv "NU", si o caseta de text, numita "Rezultat". Realizati un program care, la validarea casetei "DA" sa afiseze in caseta de text, textul "Raspunsul este corect" iar la validarea casetei "NU" sa fie afisat textul "Raspunsul este incorect". Rezolvare. Etichetele se creeaza cu ajutorul controlului Label din Toolbox si se scrie in interiorul lor folosind proprietatea "Caption" din tabelul de proprietati din dreapta. 103

Casutele de text se amplaseaza cu ajutorul controlului TextBox din Toolbox, se denumesc la proprietatea Name si se goleste continutul lor de la proprietatea Text din tabelul de proprietati din dreapta. Casetele de validare de amplaseaza cu ajutorul controlului Check Box din Toolbox, de denumesc la proprietatea "Name" si se scrie in interiorul lor la proprietatea "Caption". Subrutinele corespunzatoare casetelor de validare "DA", respectiv "NU" sunt urmatoarele:
Private Sub DA_Click() If DA.Value = 1 Then NU.Value = 0 Rezultat.Text = "Raspunsul este corect." End If End Sub Private Sub NU_Click() If NU.Value = 1 Then DA.Value = 0 Rezultat.Text = "Raspunsul este incorect." End If End Sub

unde: CheckBox.Value = 0 - caseta este nemarcata = 1 - caseta este marcata = 2 - caseta este inactiva

47. Realizati un vector cu 5 casete de validare, care sa se numeasca "Check" si scrieti in interiorul fiecareia diferite materii de studiu, cum ar fi: Programarea calculatoarelor, Statistica, Contabilitate finaciara, Finante publice, etc. Amplasati apoi un buton numit "Buton" si pe care sa scrie: "Ce materii preferati?" si o casuta de text, numita "Rezultat". Creati o subrutina care, la efectuarea unui click pe buton, sa afiseze in casuta de text: "Materiile tale preferate sunt:" + materiile corespunzatoare casutelor bifate. Rezolvare. Modul de a crea un vector de casete de validare este urmatorul: amplasam prima caseta de validare si-i dam numele "Check", selectam controlul si il copiem in Clipboard (Edit->Copy), apoi readucem copia sa din Clipboard prin lipire (Edit->Paste) si raspundem afirmativ la intrebarea daca vrem sa cream un vector de controale. Prima componenta a vectorului va fi caseta Check(0), iar celelalte Check(1), Check(2), Check(3) si Check(4). Butoanele se amplaseaza cu ajutorul controlului Command Button din Toolbox si se denumesc la proprietatea Name.

104

Casutele de text se amplaseaza cu ajutorul controlului TextBox din Toolbox, se denumesc la proprietatea Name si se goleste continutul lor de la proprietatea Text din tabelul de proprietati din dreapta. Subrutina care da solutia programului este urmatoarea:
Private Sub Buton_Click() R = "" For i = 0 To 4 If Check(i).Value = 1 Then R = R + Check(i).Caption + ", " Next i Rezultat.Text = "Materiile tale preferate sunt: " + R End Sub

unde: Check(i).Value = 1 - casutele sunt marcate Check(i).Caption = continutul casetelor, aflat la proprietatea Caption

48. Realizati un vector cu 8 casete de validare, care sa se numeasca "Check" si scrieti in interiorul fiecareia diferite fructe, cum ar fi: ananas, piersici, mere, pere, etc. Amplasati apoi un buton numit "Buton" si pe care sa scrie: " Salata de fructe va contine:" si o lista, numita "Salata", care sa nu aiba nici un element. Realizati o subrutina care, la apasarea butonului, sa adauge in lista fructele corespunzatoare casetelor bifate. Rezolvare. Modul de a crea un vector de casete de validare este urmatorul: amplasam prima caseta de validare si-i dam numele "Check", selectam controlul si il copiem in Clipboard (Edit->Copy), apoi readucem copia sa din Clipboard prin lipire (Edit->Paste) si raspundem afirmativ la intrebarea daca vrem sa cream un vector de controale. Prima componenta a vectorului va fi caseta Check(0), iar celelalte Check(1), Check(2), Check(3), Check(4), Check(5), Check(6) si Check(7). Butoanele se amplaseaza cu ajutorul controlului Command Button din Toolbox si se denumesc la proprietatea Name. O lista simpla se amplaseaza cu ajutorul controlului ListBox din Toolbox si se denumeste folosind proprietatea "Name". Subrutina care da solutia programului este urmatoarea:
Private Sub Buton_Click() Salata.Clear For i = 0 To 7 If Check(i).Value = 1 Then Salata.AddItem Check(i).Caption End If

105

Next i End Sub

unde: Check(i).Value = 1 - casutele sunt marcate Check(i).Caption = continutul casetelor, aflat la proprietatea Caption Clear = Sterge elementele din lista lista.AddItem elem = Adauga elementul "elem" la lista "lista"

49. Realizati un vector cu 9 casete de validare, care sa se numeasca "Check" si scrieti in interiorul fiecareia diferite nume de persoane. Amplasati apoi un buton care sa se numeasca "Buton' si pe care sa scrie "Prietenii mei sunt:". Adaugati formei un tabel care sa aiba la inceput o coloana si nici un rand. Creati o subrutina care, la apasarea butonului, sa adauge in tabel numele corespunzatoare casetelor bifate. Rezolvare. Modul de a crea un vector de casete de validare este urmatorul: amplasam prima caseta de validare si-i dam numele "Check", selectam controlul si il copiem in Clipboard (Edit->Copy), apoi readucem copia sa din Clipboard prin lipire (Edit->Paste) si raspundem afirmativ la intrebarea daca vrem sa cream un vector de controale. Prima componenta a vectorului va fi caseta Check(0), iar celelalte Check(1), Check(2), Check(3), Check(4), Check(5), Check(6), Check(7) si Check(8). Butoanele se amplaseaza cu ajutorul controlului Command Button din Toolbox si se denumesc la proprietatea Name. Pentru a realiza un tabel alegeti din Toolbox controlul MSFlexGrid (Daca controlul Microsoft Flex Grid nu se gaseste de la bun inceput in bara de instrumente din partea stanga a mediului Visual Basic, el trebuie adaugat in felul urmator: din meniul VB alegeti optiunea Project, apoi Components si veti obtine o lista de alte componente ce pot fi adaugate la Toolbox. Alegeti din lista Microsoft Flex Grid si bifati in dreptul acestei componente, apoi apasati pe butonul OK. In Toolbox va aparea simbolul acestui control.). Initial tabelul va fi numit "MSFlexGrid1" (trebuie denumit "T") si va avea 2 randuri si 2 coloane, dar putem modifica proprietatile Rows si Cols pentru a modifica numarul de randuri, respectiv de coloane (tabelul trebuie sa contina o coloana si nici un rand). Coloana este fixa la inceput. Pentru a schimba acest lucru trebuie modificata proprietatea FixedCols cu valoarea "0". 106

Subrutina este urmatoarea:


Private Sub Buton_Click() k = 0 T.Rows = 1 For i = 0 To 8 If Check(i).Value = 1 Then k = k + 1 T.Rows = k T.TextMatrix(k - 1, 0) = Check(i).Caption End If Next i End Sub

unde: T.Rows = numarul de randuri T.TextMatrix(k-1,0) = celula corespunzatoare randului k-1 si coloanei 0 Check(i).Value = 1 - casutele sunt marcate Check(i).Caption = continutul casetelor, aflat la proprietatea Caption

50. Amplasati intr-o forma o eticheta pe care sa scrie: "Ce bauturi va plac mai mult?", 2 butoane de optiune pe care sa scrie "bauturile racoritoare", respectiv "bauturile alcoolice" si o casuta de text, numita "Rezultat" care sa fie goala la inceput. Realizati un program care sa afiseze in casuta de text: "Sunteti o persoana care prefera bauturile racoritoare in locul celor alcoolice. Foarte bine!", daca primul buton de optiune este selectat, si respectiv textul: "Atentie! Consumul excesiv de alcool dauneaza grav sanatatii! daca al doilea buton de optiune este selectat. Rezolvare. Etichetele se creeaza cu ajutorul controlului Label din Toolbox si se scrie in interiorul lor folosind proprietatea "Caption" din tabelul de proprietati din dreapta. Butoanele de optiune se creeaza cu ajutorul controlului Option Button din Toolbox, se denumesc la proprietatea "Name" si se scrie in interiorul lor la proprietatea "caption".

107

Casutele de text se amplaseaza cu ajutorul controlului TextBox din Toolbox, se denumesc la proprietatea Name si se goleste continutul lor de la proprietatea Text din tabelul de proprietati din dreapta. Subrutinele corespunzatoare butoanelor de optiune "Option1", respectiv "Option2" sunt:
Private Sub Option1_Click() If Option1.Value = True Then Rezultat.Text = "Sunteti o persoana care prefera bauturile" + _ " racoritoare in locul celor alcoolice. Foarte bine!" End If End Sub Private Sub Option2_Click() If Option2.Value = True Then Rezultat.Text = "Atentie! "+ "Consumul excesiv de alcool dauneaza grav sanatatii!" End If End Sub

unde: Option1.Value = True - butonul de optiune este selectat Option1.value = False - butonul de optiune nu este selectat

51. Desenati 3 cadre si puneti-le Caption-urile "Sex", "Statut" si respectiv "Copii". Grupati in fiecare cadru cate 2 butoane de optiune, pe care scrieti in ordine: "feminin", "masculin", "casatorit", "necasatorit", "da", "nu". Amplasati apoi un buton numit "Buton" si pe care sa scrie:"Ce fel de om esti:" si o casuta de text, numita "Rezultat" care sa fie goala la inceput. Creati subrutina care, la apasrea butonului, sa afiseze un text corespunzator butoanelor de optiune selectate. Rezolvare. Cadrele se creeaza cu ajutorul controlului "Frame" din Toolbox, iar in antetul lor se scrie la proprietatea "Caption". Butoanele de optiune se creeaza cu ajutorul controlului Option Button din Toolbox, se denumesc la proprietatea "Name" si se scrie in interiorul lor la proprietatea "caption". Butoanele se amplaseaza cu ajutorul controlului Command Button din Toolbox si se denumesc la proprietatea Name. Casutele de text se amplaseaza cu ajutorul controlului TextBox din Toolbox, se denumesc la proprietatea Name si se goleste continutul lor de la proprietatea Text din tabelul de proprietati din dreapta. 108

Subrutina este urmatoarea:


Private Sub Buton_Click() If Option1.Value = True Then If Option3.Value = True Then If Option5.Value = True Then Rezultat.Text = "Esti o femeie casatorita, care are copii." Else Rezultat.Text = "Esti o femeie casatorita, care nu are copii." End If Else If Option5.Value = True Then Rezultat.Text = "Esti o femeie necasatorita, care are copii." Else Rezultat.Text = "Esti o femeie necasatorita, care nu are copii." End If End If Else If Option3.Value = True Then If Option5.Value = True Then Rezultat.Text = "Esti un barbat casatorit, care are copii." Else Rezultat.Text = "Esti un barbat casatorit, care nu are copii." End If Else If Option5.Value = True Then Rezultat.Text = "Esti un barbat necasatorit, care are copii." Else Rezultat.Text = "Esti un barbat necasatorit, care nu are copii." End If End If End If End Sub

unde: Option1.Value = True - butonul de optiune este selectat Option1.value = False - butonul de optiune nu este selectat

52. Amplasati o eticheta pe care sa scrie: "8-25/5+lne*264=267 ?", 2 butoane de optiune in interiorul carora sa scrie "DA", respectiv "NU", un buton, numit "Buton" si in care sa scrie "Raspuns" si o caseta de text, numita "Rezultat", care sa fie goala la inceput. Realizati un program care, la apasarea butonului, sa afiseze in casuta de text: "Raspunsul este corect.", daca a fost selectat butonul de optiune "Option1", respectiv textul: "Raspunsul este incorect.", daca a fost selectat butonul de optiune "Option2". 109

Rezolvare. Etichetele se creeaza cu ajutorul controlului Label din Toolbox si se scrie in interiorul lor folosind proprietatea "Caption" din tabelul de proprietati din dreapta. Butoanele de optiune se creeaza cu ajutorul controlului Option Button din Toolbox, se denumesc la proprietatea "Name" si se scrie in interiorul lor la proprietatea "caption". Casutele de text se amplaseaza cu ajutorul controlului TextBox din Toolbox, se denumesc la proprietatea Name si se goleste continutul lor de la proprietatea Text din tabelul de proprietati din dreapta. Butoanele se amplaseaza cu ajutorul controlului Command Button din Toolbox, se denumesc la proprietatea Name si se scrie in interiorul lor cu "Caption". Subrutina care ofera solutia de rezolvare a programului este urmatoarea:
Private Sub Buton_Click() If Option1.Value = True Then Rezultat.Text = "Raspunsul este corect." Else Rezultat.Text = "Raspunsul este incorect." End If End Sub

unde: Option1.Value = True - butonul de optiune este selectat Option1.value = False - butonul de optiune nu este selectat 53. Amplasati intr-o forma un buton care sa senumeasca "Buton" si pe care sa scrie "Executa", 2 butoane de optiune pe care sa scrie "Adauga element", respectiv "Sterge element", o casuta de text numita "Fructe" si o lista simpla care sa se numeasca "Salata" si care sa contina cateva nume de fructe. Realizati un program care, la apasarea butonului, sa adauge in lista numele fructului scris in casuta de text, daca este selectat butonul "Option1", si sa il stearga din lista, daca este selectat butonul "Option2". Rezolvare. Butoanele de optiune se creeaza cu ajutorul controlului Option Button din Toolbox, se denumesc la proprietatea "Name" si se scrie in interiorul lor la proprietatea "caption". Casutele de text se amplaseaza cu ajutorul controlului TextBox din Toolbox, se denumesc la proprietatea Name si se goleste continutul lor de la proprietatea Text din tabelul de proprietati din dreapta. Butoanele se amplaseaza cu ajutorul controlului Command Button din Toolbox, se denumesc la proprietatea Name si se scrie in interiorul lor cu "Caption". O lista simpla se amplaseaza cu ajutorul controlului ListBox din Toolbox si se denumeste folosind proprietatea "Name". Scrieti numele de fructe la proprietatea "List", separate prin Ctrl+Enter, iar la final apasati Enter. Subrutina care ofera solutia de rezolvare a programului este urmatoarea:
Private Sub Buton_Click() If Option1.Value = True Then Salata.AddItem Fructe.Text Else For i = 0 To Salata.ListCount - 1 If Salata.List(i) = Fructe.Text Then Salata.RemoveItem i End If Next i End If End Sub

unde: Option1.Value = True - butonul de optiune este selectat Option1.value = False - butonul de optiune nu este selectat 110

lista.AddItem elem = Adauga elementul "elem" la lista "lista" lista.RemoveItem i = Sterge elementul de pe pozitia i din lista "lista" ListCount = Numarul elementelor din lista List(i) = Elementul din lista de pe pozitia i

54. Amplasati 2 butoane de optiune, 2 casete de validare si un buton, numit "Buton" si pe care sa scrie "Bifeaza". Realizati un program care, la apasarea butonului, sa bifeze prima caseta de validare, daca a fost selectat primul buton de optiune, respectiv a doua caseta, daca a fost selectat cel de-al doilea buton de optiune (casetele de validare nu trebuie sa fie bifate in acelasi timp). Rezolvare. Butoanele de optiune se creeaza cu ajutorul controlului Option Button din Toolbox, se denumesc la proprietatea "Name" si se scrie in interiorul lor la proprietatea "caption". Butoanele se amplaseaza cu ajutorul controlului Command Button din Toolbox, se denumesc la proprietatea Name si se scrie in interiorul lor cu "Caption". Casetele de validare de amplaseaza cu ajutorul controlului Check Box din Toolbox, de denumesc la proprietatea "Name" si se scrie in interiorul lor la proprietatea "Caption". Subrutina este urmatoarea:
Private Sub Buton_Click() If Option1.Value = True Then Check1.Value = 1 Check2.Value = 0 Else Check2.Value = 1 Check1.Value = 0 End If End Sub

unde: Option1.Value = True - butonul de optiune este selectat Option1.value = False - butonul de optiune nu este selectat CheckBox.Value = 0 - caseta este nemarcata = 1 - caseta este marcata = 2 - caseta este inactiva 55. Realizati un tabel, numit "T", care sa aiba o coloana si 7 randuri.Apoi amplasati un buton, care sa se numeasca "Buton" si pe care sa scrie "Suma cifrelor pare". Scrieti in primele 6 randuri diferite cifre pare si impare. Creati un program care, la apasarea butonului sa calculeze in ultimul rand al tabelului suma cifrelor pare din randurile precedente.

111

Rezolvare. Pentru a realiza un tabel alegeti din Toolbox controlul MSFlexGrid (Daca controlul Microsoft Flex Grid nu se gaseste de la bun inceput in bara de instrumente din partea stanga a mediului Visual Basic, el trebuie adaugat in felul urmator: din meniul VB alegeti optiunea Project, apoi Components si veti obtine o lista de alte componente ce pot fi adaugate la Toolbox. Alegeti din lista Microsoft Flex Grid si bifati in dreptul acestei componente, apoi apasati pe butonul OK. In Toolbox va aparea simbolul acestui control.). Initial tabelul va fi numit "MSFlexGrid1" (trebuie denumit "T") si va avea 2 randuri si 2 coloane, dar putem modifica proprietatile Rows si Cols pentru a modifica numarul de randuri, respectiv de coloane (tabelul trebuie sa contina o coloana si 7 randuri). Coloana si randurile sunt fixe la inceput. Pentru a schimba acest lucru trebuie modificate proprietatile FixedCols si FixedRows cu valoarea "0". Butoanele se amplaseaza cu ajutorul controlului Command Button din Toolbox, se denumesc la proprietatea Name si se scrie in interiorul lor cu "Caption". Pentru a scrie in randurile tabelului trebuie folosita urmatoarea subrutina asociata formei:
Private Sub Form_Load() T.TextMatrix(0, 0) = 5 T.TextMatrix(1, 0) = 15 T.TextMatrix(2, 0) = 456 T.TextMatrix(3, 0) = 258 T.TextMatrix(4, 0) = 48 T.TextMatrix(5, 0) = 36 End Sub

Subrutina care da solutia programului este urmatoarea:


Private Sub Buton_Click() s = 0 For i = 0 To T.Rows - 1 If Val(T.TextMatrix(i, 0)) Mod 2 = 0 Then s = s + Val(T.TextMatrix(i, 0)) End If Next i T.TextMatrix(6, 0) = s End Sub

unde: T.TextMatrix(i,0) = scrie in celula corespunzatoare randului i si coloanei 0 T.Rows = numarul de randuri al tabelului x mod y = restul impartirii lui x la y

56. Realizati un tabel, numit "T", care sa aiba o coloana si 7 randuri.Apoi amplasati un buton, care sa se numeasca "Buton" si pe care sa scrie "Produsul cifrelor impare". Scrieti in primele 6 randuri diferite cifre pare si impare. Creati un program care, la apasarea butonului sa calculeze in ultimul rand al tabelului produsul cifrelor impare din randurile precedente. 112

Rezolvare. Pentru a realiza un tabel alegeti din Toolbox controlul MSFlexGrid (Daca controlul Microsoft Flex Grid nu se gaseste de la bun inceput in bara de instrumente din partea stanga a mediului Visual Basic, el trebuie adaugat in felul urmator: din meniul VB alegeti optiunea Project, apoi Components si veti obtine o lista de alte componente ce pot fi adaugate la Toolbox. Alegeti din lista Microsoft Flex Grid si bifati in dreptul acestei componente, apoi apasati pe butonul OK. In Toolbox va aparea simbolul acestui control.). Initial tabelul va fi numit "MSFlexGrid1" (trebuie denumit "T") si va avea 2 randuri si 2 coloane, dar putem modifica proprietatile Rows si Cols pentru a modifica numarul de randuri, respectiv de coloane (tabelul trebuie sa contina o coloana si 7 randuri). Coloana si randurile sunt fixe la inceput. Pentru a schimba acest lucru trebuie modificate proprietatile FixedCols si FixedRows cu valoarea "0". Butoanele se amplaseaza cu ajutorul controlului Command Button din Toolbox, se denumesc la proprietatea Name si se scrie in interiorul lor cu "Caption". Pentru a scrie in randurile tabelului trebuie folosita urmatoarea subrutina asociata formei:
Private Sub Form_Load() T.TextMatrix(0, 0) = 5 T.TextMatrix(1, 0) = 15 T.TextMatrix(2, 0) = 456 T.TextMatrix(3, 0) = 258 T.TextMatrix(4, 0) = 48 T.TextMatrix(5, 0) = 36 End Sub

Subrutina care da solutia programului este urmatoarea:


Private Sub Buton_Click() p = 1 For i = 0 To T.Rows - 1 If Val(T.TextMatrix(i, 0)) Mod 2 <> 0 Then p = p * Val(T.TextMatrix(i, 0)) End If Next i T.TextMatrix(6, 0) = p End Sub

unde: T.TextMatrix(i,0) = scrie in celula corespunzatoare randului i si coloanei 0 T.Rows = numarul de randuri al tabelului x mod y = restul impartirii lui x la y

57. Realizati un tabel, numit "T", care sa aiba 2 coloane si 4 randuri.Apoi amplasati un buton, care sa se numeasca "Buton" si pe care sa scrie "Executa". Scrieti in cele 4 randuri diferite cifre. Creati

113

un program care, la apasarea butonului sa afiseze, in cea de-a doua coloana, cifrele din prima coloana dar cu semnul "-". Rezolvare. Pentru a realiza un tabel alegeti din Toolbox controlul MSFlexGrid (Daca controlul Microsoft Flex Grid nu se gaseste de la bun inceput in bara de instrumente din partea stanga a mediului Visual Basic, el trebuie adaugat in felul urmator: din meniul VB alegeti optiunea Project, apoi Components si veti obtine o lista de alte componente ce pot fi adaugate la Toolbox. Alegeti din lista Microsoft Flex Grid si bifati in dreptul acestei componente, apoi apasati pe butonul OK. In Toolbox va aparea simbolul acestui control.). Initial tabelul va fi numit "MSFlexGrid1" (trebuie denumit "T") si va avea 2 randuri si 2 coloane, dar putem modifica proprietatile Rows si Cols pentru a modifica numarul de randuri, respectiv de coloane (tabelul trebuie sa contina 2 coloane si 4 randuri). Coloana si randurile sunt fixe la inceput. Pentru a schimba acest lucru trebuie modificate proprietatile FixedCols si FixedRows cu valoarea "0". Butoanele se amplaseaza cu ajutorul controlului Command Button din Toolbox, se denumesc la proprietatea Name si se scrie in interiorul lor cu "Caption". Pentru a scrie in randurile tabelului trebuie folosita urmatoarea subrutina asociata formei:
Private Sub Form_Load() T.TextMatrix(0, 0) = 5 T.TextMatrix(1, 0) = 15 T.TextMatrix(2, 0) = 456 T.TextMatrix(3, 0) = 258 End Sub

Subrutina care da solutia programului este urmatoarea:


Private Sub Buton_Click() For i = 0 To T.Rows - 1 T.TextMatrix(i, 1) = -T.TextMatrix(i, 0) Next i End Sub

unde: T.TextMatrix(i,0) = scrie in celula corespunzatoare randului i si coloanei 0 T.Rows = numarul de randuri al tabelului

58. Amplasati, intr-o forma, o lista simpla, care sa se numeasca "Animale" si care sa contina diferite nume de animale. Creati posibilitatea de a selecta mai multe elemente din lista. Adaugati un tabel, numit "T" care sa contina, la inceput, o coloana si nici un rand (coloana nu trebuie sa fie fixa) si un buton, numit "Buton" si pe care sa scrie "Executa". Realizati un program care, la apasarea butonului, sa afiseze pe randurile tabelului elementele selectate din lista. Tabelul trebuie sa contina atatea randuri, cate elemente au fost selectate.

114

Rezolvare. O lista simpla se amplaseaza cu ajutorul controlului ListBox din Toolbox si se denumeste folosind proprietatea "Name". Scrieti numele de animale la proprietatea "List", separate prin Ctrl+Enter, iar la final apasati Enter. pentru a selecta mai multe elemente din lista trebuie modificata proprietatea "Multiselect" cu valoarea "1-Simple". Pentru a realiza un tabel alegeti din Toolbox controlul MSFlexGrid (Daca controlul Microsoft Flex Grid nu se gaseste de la bun inceput in bara de instrumente din partea stanga a mediului Visual Basic, el trebuie adaugat in felul urmator: din meniul VB alegeti optiunea Project, apoi Components si veti obtine o lista de alte componente ce pot fi adaugate la Toolbox. Alegeti din lista Microsoft Flex Grid si bifati in dreptul acestei componente, apoi apasati pe butonul OK. In Toolbox va aparea simbolul acestui control.). Initial tabelul va fi numit "MSFlexGrid1" (trebuie denumit "T") si va avea 2 randuri si 2 coloane, dar putem modifica proprietatile Rows si Cols pentru a modifica numarul de randuri, respectiv de coloane (tabelul trebuie sa contina o coloana si nici un rand). Coloana este fixa la inceput. Pentru a schimba acest lucru trebuie modificata proprietatea FixedCols cu valoarea "0". Butoanele se amplaseaza cu ajutorul controlului Command Button din Toolbox, se denumesc la proprietatea Name si se scrie in interiorul lor cu "Caption". Subrutina este urmatoarea:
Private Sub Buton_Click() k = 0 T.Rows = 1 For i = 0 To T.Rows - 1 For j = 0 To Animale.ListCount - 1 If Animale.Selected(j) = True Then k = k + 1 T.Rows = k T.TextMatrix(k - 1, 0) = Animale.List(j) End If Next j Next i End Sub

unde: T.TextMatrix(i,0) = scrie in celula corespunzatoare randului i si coloanei 0 T.Rows = numarul de randuri al tabelului ListCount = Numarul elementelor din lista List(j) = Elementul din lista de pe pozitia i Lista.Selected(j)=True - elementul de pe pozitia j din lista este selectat

59. Realizati un tabel, numit "N", care sa contina o coloana si 6 randuri si scrieti in fiecare rand diverse nume de persoane.Amplasati un alt tabel, "T", care sa aiba la inceput o coloana si nici un rand, si un buton, numit "Buton" si pe care sa scrie "Executa". Realizati un program care, la 115

apasarea butonului, sa afiseze in tabelul "T", doar numele care incep cu litera "A". Tabelul trebuie sa contina atatea randuri, cate nume incep cu "A". Rezolvare. Pentru a realiza un tabel alegeti din Toolbox controlul MSFlexGrid (Daca controlul Microsoft Flex Grid nu se gaseste de la bun inceput in bara de instrumente din partea stanga a mediului Visual Basic, el trebuie adaugat in felul urmator: din meniul VB alegeti optiunea Project, apoi Components si veti obtine o lista de alte componente ce pot fi adaugate la Toolbox. Alegeti din lista Microsoft Flex Grid si bifati in dreptul acestei componente, apoi apasati pe butonul OK. In Toolbox va aparea simbolul acestui control.). Initial tabelul va fi numit "MSFlexGrid1" (trebuie denumit "T" sau "N") si va avea 2 randuri si 2 coloane, dar putem modifica proprietatile Rows si Cols pentru a modifica numarul de randuri, respectiv de coloane (tabelul "T" trebuie sa contina o coloana si nici un rand, iar "N" trebuie sa aiba o coloana si 6 randuri). Coloana este fixa la inceput. Pentru a schimba acest lucru trebuie modificata proprietatea FixedCols cu valoarea "0". Butoanele se amplaseaza cu ajutorul controlului Command Button din Toolbox, se denumesc la proprietatea Name si se scrie in interiorul lor cu "Caption". Pentru a scrie in randurile tabelului "N" trebuie folosita urmatoarea subrutina asociata formei:
Private Sub Form_Load() N.TextMatrix(0, 0) = "Ana": N.TextMatrix(1, 0) = "Alina" N.TextMatrix(2, 0) = "Diana": N.TextMatrix(3, 0) = "Andrei" N.TextMatrix(4, 0) = "Bianca": N.TextMatrix(5, 0) = "Radu" End Sub

Subrutina care da solutia programului este urmatoarea:


Private Sub Buton_Click() k = 0 T.Rows = 1 For i = 0 To T.Rows - 1 For j = 0 To N.Rows - 1 If Left(N.TextMatrix(j, 0), 1) = "A" Then k = k + 1 T.Rows = k T.TextMatrix(k - 1, 0) = N.TextMatrix(j, 0) End If Next j Next i End Sub

unde: T.TextMatrix(i,0) = scrie in celula corespunzatoare randului i si coloanei 0 T.Rows = numarul de randuri al tabelului Left(N.TextMatrix(j, 0), 1) = "A" - prima litera a cuvantului scris pe randul j, coloana 0 din tabelul "N" este "A"

116

Capitolul 4. Programe diverse (Anca, Ctlin, Ionu)


Anca 1. Realizati un program care sa contina un tabel cu produse si pretul acestora si sa afiseze cate bucati din fiecare produs pot fi cumparate cu o anumita suma inscrisa intr-o caseta de text. Rezolvare:

Private Sub Command1_Click() For i = 1 To T.Rows - 1 If T.TextMatrix(i, 1) <> "" Then If Val(T.TextMatrix(i, 2)) <= Val(Text1.Text) Then nr = (Text1.Text) \ (T.TextMatrix(i, 2)) End If List1.AddItem T.TextMatrix(i, 1) List1.AddItem nr End If Next i End Sub Private Sub Form_Load() T.ColWidth(0) = T.ColWidth(0) / 2 T.ColWidth(1) = T.ColWidth(1) * 2 For i = 1 To T.Rows - 1 T.TextMatrix(i, 0) = i Next i T.TextMatrix(0, 0) = "Nr. crt." T.TextMatrix(0, 1) = "Produs" T.TextMatrix(0, 2) = "Pret" End Sub Private Sub T_KeyPress(KeyAscii As Integer) If (KeyAscii = 8) And (T.Text <> "") Then L = Len(T.Text) T.Text = Left(T.Text, L - 1) Else If KeyAscii >= 32 Then

117

T.Text = T.Text + Chr$(KeyAscii) End If End If End Sub

2.Realizati un tabel cu abonatii la o societate prestatoare de servicii si situatia platilor. Sa se afiseze intr-o lista abonatii restantieri si valoarea restantelor. Rezolvare

Private Sub Command1_Click() For i = 1 To Tabel.Rows - 1 If Val(Tabel.TextMatrix(i, 2)) <> 0 Then List1.AddItem Tabel.TextMatrix(i, 1) List1.AddItem Tabel.TextMatrix(i, 2) End If Next i End Sub Private Sub Form_Load() Tabel.ColWidth(0) = Tabel.ColWidth(0) / 2 Tabel.ColWidth(1) = Tabel.ColWidth(1) * 2 For i = 1 To Tabel.Rows - 1 Tabel.TextMatrix(i, 0) = i Next i Tabel.TextMatrix(0, 0) = "Nr. crt." Tabel.TextMatrix(0, 1) = "Abonat" Tabel.TextMatrix(0, 2) = "Restanta" End Sub Private Sub Tabel_KeyPress(KeyAscii As Integer) If (KeyAscii = 8) And (Tabel.Text <> "") Then L = Len(Tabel.Text): Tabel.Text = Left(Tabel.Text, L - 1) Else If KeyAscii >= 32 Then Tabel.Text = Tabel.Text + Chr$(KeyAscii) End If End If End Sub

118

3. O forma contine - un tabel cu nume de persoane, varsta si sexul acestora - doua butoane de optiune: Femeie si Barbat - doua liste de tip combo pentru varsta minima si maxima - o lista Realizati o subrutina care sa afiseze in lista persoanele care corespund descrierii. Rezolvare:

Command2

Combo1 Option1

List1

Combo2 Option2

Command1

Private Sub Command1_Click() If Option1.Value = True Then For i = 1 To T.Rows - 1 If T.TextMatrix(i, 2) = "F" Then If (T.TextMatrix(i, 3) >= Combo1.Text) And _ (T.TextMatrix(i, 3) <= Combo2.Text) Then List1.AddItem T.TextMatrix(i, 1) End If End If Next i Else If Option2.Value = True Then For j = 1 To T.Rows - 1 If T.TextMatrix(j, 2) = "M" Then If (T.TextMatrix(j, 3) >= Combo1.Text) And _ (T.TextMatrix(j, 3) <= Combo2.Text) Then List1.AddItem T.TextMatrix(j, 1) End If End If

119

Next j End If End If End Sub Private Sub Command2_Click() Open App.Path + "\t.txt" For Output As #1 For i = 1 To T.Rows - 1 For j = 0 To T.Cols - 1 Print #1, T.TextMatrix(i, j) Next j Next i Close #1 End Sub Private Sub Form_Load() T.ColWidth(0) = T.ColWidth(0) / 2 T.ColWidth(1) = T.ColWidth(1) * 2 For i = 1 To T.Rows - 1 T.TextMatrix(i, 0) = i Next i T.TextMatrix(0, 0) = "Nr. crt." T.TextMatrix(0, 1) = "Nume si prenume" T.TextMatrix(0, 2) = "Sex" T.TextMatrix(0, 3) = "Varsta" Open App.Path + "\t.txt" For Input As #1 For i = 1 To T.Rows - 1 For j = 0 To T.Cols - 1 Line Input #1, s T.TextMatrix(i, j) = s Next j Next i Close #1 End Sub Private Sub T_KeyPress(KeyAscii As Integer) If (KeyAscii = 8) And (T.Text <> "") Then L = Len(T.Text) T.Text = Left(T.Text, L - 1) Else If KeyAscii >= 32 Then T.Text = T.Text + Chr$(KeyAscii) End If End If End Sub

4. O forma contine un tabel cu nume de domnitori si anii de domnie si o lista de tip combo cu numele tuturor domnitorilor. Realizati o subrutina asociata evenimentului click pe butonul Command1 care sa afiseze intr-o caseta de text anii de domnie ai domnitorului selectat din lista. Rezolvare:
Private Sub Command1_Click() Open App.Path + "\tabel.txt" For Output As #1 For i = 1 To T.Rows - 1 For j = 0 To T.Cols - 1 Print #1, T.TextMatrix(i, j) Next j Next i Close #1 End Sub

120

Private Sub Command2_Click() For i = 1 To T.Rows - 1 If T.TextMatrix(i, 1) = Combo1.Text Then Text1.Text = T.TextMatrix(i, 2) End If Next i End Sub Private Sub Form_Load() T.ColWidth(0) = T.ColWidth(0) / 2 T.ColWidth(1) = T.ColWidth(1) * 2 For i = 1 To T.Rows - 1 T.TextMatrix(i, 0) = i Next i T.TextMatrix(0, 0) = "Nr. crt." T.TextMatrix(0, 1) = "Domnitorul" T.TextMatrix(0, 2) = "Domnie" Open App.Path + "\tabel.txt" For Input As #1 For i = 1 To T.Rows - 1 For j = 0 To T.Cols - 1 Line Input #1, s T.TextMatrix(i, j) = s Next j Next i Close #1 End Sub Private Sub T_KeyPress(KeyAscii As Integer) If (KeyAscii = 8) And (T.Text <> "") Then L = Len(T.Text) T.Text = Left(T.Text, L - 1) Else If KeyAscii >= 32 Then T.Text = T.Text + Chr$(KeyAscii) End If End If End Sub

121

Ctlin 5. Sa se realizeze un program care sa contina o bila (realizata prin controlul Shape) colorata, care la pornirea programului sa aiba o miscare diagonala, ca pe o masa de biliard: la lovirea oricareia din cele patru margini ale formei, bila se va reflecta sub acelasi unghi, conform legii reflexiei. Rezolvare
Dim pas As Integer Dim vx As Integer Dim vy As Integer Private Sub Form_Load() pas = 100 vx = 1 vy = 1 End Sub Private Sub Timer_Timer() If bila.Left + bila.Width >= Form1.Width Or bila.Left <= 0 Then vx = -vx If bila.Top + bila.Height >= Form1.Height Or bila.Top <= 0 Then vy = -vy bila.Left = bila.Left + pas * vx bila.Top = bila.Top + pas * vy End Sub

6. Sa se realizeze un program asemanatori celui anterior, dar bila sa nu aiba decat o miscare de sus in jos si inapoi. Rezolvare:
Dim pas As Integer Dim vy As Integer Private Sub Form_Load() pas = 100 vy = 1 End Sub Private Sub Timer_Timer() If bila.Top + bila.Height >= Form1.Height Or bila.Top <= 0 Then vy = -vy bila.Top = bila.Top + pas * vy End Sub

7. Sa se realizeze un program asemanatori celui anterior, dar bila sa aiba o miscare pe orizontala, de la stanga la dreapta si inapoi.

122

Rezolvare:
Dim pas As Integer Dim vx As Integer Private Sub Form_Load() pas = 100 vx = 1 End Sub Private Sub Timer_Timer() If bila.Left + bila.Width >= Form1.Width Or bila.Left <= 0 Then vx = -vx bila.Left = bila.Left + pas * vx End Sub

8. Sa se realizeze un program care sa afiseze la deschidere un calculator compus din sapte butoane: "C" - sterge,"+" - aduna,"/" - imparte,"x"- inmulteste, "-" - scade, "R"- radical, "%" - procent si trei casete de text. In primele doua sa se introduca de catre utilizator operanzii (numere), iar in a treia sa se afiseze rezultatul! La fiecare apasare de buton operatia atribuita acestuia sa aiba loc iar cifrele din primele casete de text sa se stearga. Iar la fiecare operatie care nu se poate realiza sa se afiseze motivul! Rezolvare:

Private Sub anuleaza_Click() a.Text = "" b.Text = "" r.Text = "" End Sub Private Sub aduna_Click() r.Text = Val(a.Text) + Val(b.Text) End Sub Private Sub sacde_Click() r.Text = Val(a.Text) - Val(b.Text) End Sub Private Sub imparte_Click() If Val(b.Text) = 0 Then r.Text = "impartirea la 0 imposibila"

123

Else r.Text = Val(a.Text) / Val(b.Text) End If End Sub Private Sub inmulteste_Click() r.Text = Val(a.Text) * Val(b.Text) End Sub Private Sub la_suta_Click() r.Text = (Val(a.Text) / 100) * Val(b.Text) End Sub Private Sub radical_Click() If Val(a.Text) < 0 Then r.Text = "din nr negative nu se poate extrage radical" Else r.Text = Sqr(Val(a.Text)) End If End Sub

9. Sa se realizeze un program care sa determine relatia de mai mare sau mai mic intre doua numere. Rezolvare: Amplasati trei casete de text, a si b pentru operanzi si r pentru rezultat si butonul de comanda compara. Scrieti urmatorul cod:
Private Sub compara_Click() If Val(a.Text) < Val(b.Text) Then r.Text = "nr " + a.Text + " este mai mic ca nr " + b.Text Else r.Text = "nr " + a.Text + " este mai mare ca nr " + b.Text End If End Sub

10. Scrieti un program care, folosind un cronometru, sa alterneze textul de pe un buton de comanda. La apasarea butonul de comanda, se va afisa Caption-ul acelui buton. Rezolvare Amplasati pe forma un cronometru (Timer1) si un buton de comanda Command1. La proprietatea Intrerval a lui Timer1 scrieti, de exemplu, valoarea 1000 (pentru o secunda). Valoarea 0 inseamna nefunctionarea cronometrului, deci va trebui sa scrieti o valoare intreaga mai mare ca zero. Codul asociat celor doua controale va fi:
Private Sub Timer1_Timer()

124

If Command1.Caption = "PRIMUL TEXT" Then Command1.Caption = "AL DOILEA TEXT" Else Command1.Caption = "PRIMUL TEXT" End If End Sub Private Sub Command1_Click() MsgBox Command1.Caption End Sub

11. Scrieti un program care sa alterneze continutul unei casete cu imagine, la fiecare secunda. Rezolvare Sa consideram trei fisiere JPG, numite "unu.jpg", "doi.jpg" si "trei.jpg". Evident, in locul lor ar putea fi alte fisiere JPG. Amplasam un control de tip Image si un cronometru. Cronometrul Timer1 va avea Interval=1000 (reprezentand o secunda). In proprietatea Tag a lui Image1 vom scrie 1, iar in proprietatea Picture vom incarca prima imagine ("unu.jpg"). Codul pentru cronometru va fi:
Private Sub Timer1_Timer() If Image1.Tag=1 Then Image1.Tag=2 Image1.Picture=LoadPicture(App.Path + "\doi.jpg") ElseIf Image1.Tag=2 Then Image1.Tag=3 Image1.Picture=LoadPicture(App.Path+"\trei.jpg") Else Image1.Tag=1 Image1.Picture=LoadPicture(App.Path+"\unu.jpg") End If End Sub

Propunem cititorului realizarea acestui program cu instructionea Select Case si generalizarea sa petru un numar mai mare de fisiere cu imagini. 12. Scrieti un program care sa determine care este cel mai mic element dintr-o lista de numere intregi. Rezolvare Fie lista L, avand elementele deja puse in ea (fie in etapa de proiectare a programului, fie in urma apelarii metodei AddItem, din program). Pentru a determina cel mai mic element al listei, vom folosi urmatorul algoritm (atasat unui buton de comanda Command1):
Private Sub Command1_Clic() minim=Val(L.List(0)) N=L.ListCount-1 For i=1 to N If Val(L.List(i))<minim Then minim=Val(L.List(i)) End If Next i MsgBox "Minimul listei este " & minim End Sub

In acest program am presupus ca lista are cel putin un element. 125

Ionu 13. Realizai un program care, pentru un numr natural cu valoarea maxim 100, l scrie n cuvinte. Rezolvare
Private Sub Command1_Click() If X.Text = "" Then MsgBox "Introduceti un nr, va rog!", vbOKOnly, "Atentie" Else Text1.Text = X Mod 10 Text2.Text = X / 10 Text3.Text = X \ 10 T4.Text = X \ 100 nr = Val(Text1) Select Case nr 'Case 0: z = "zero" Case 1: z = "unu" Case 2: z = "doi" Case 3: z = "trei" Case 4: z = "patru" Case 5: z = "cinci" Case 6: z = "sase" Case 7: z = "sapte" Case 8: z = "opt" Case 9: z = "noua" End Select Y = z If Text3.Text = "1" Then 'sunt nr de la 10 la 19 nr = Val(Text1) Select Case nr Case 0: z = "zece" Case 1: z = "unsprezece" Case 2: z = "doisprezece" Case 3: z = "treisprezece" Case 4: z = "paisprezece" Case 5: z = "cincisprezece" Case 6: z = "saisprezece" Case 7: z = "saptesprezece" Case 8: z = "optsprezece" Case 9: z = "nouasprezece" End Select Y = z Else If Text3.Text = "0" Then 'sunt nr de la 0 la 9 nr = Val(Text1) Select Case nr Case 0: z = "zero" Case 1: z = "unu" Case 2: z = "doi" Case 3: z = "trei" Case 4: z = "patru" Case 5: z = "cinci" Case 6: z = "sase" Case 7: z = "sapte" Case 8: z = "opt" Case 9: z = "noua" End Select Y = z ElseIf Text3.Text = 2 Then If Text1.Text = "0" Then Y = "douazeci" Else

126

c = "douazeci si" Y = c + " " + z.Text End If ElseIf Text3.Text = 3 Then If Text1.Text = "0" Then Y = "treizeci" Else c = "treizeci si" Y = c + " " + z.Text End If ElseIf Text3.Text = 4 Then If Text1.Text = "0" Then Y = "patruzeci" Else c = "patruzeci si" Y = c + " " + z.Text End If ElseIf Text3.Text = 5 Then If Text1.Text = "0" Then Y = "cincizeci" Else c = "cincizeci si" Y = c + " " + z.Text End If ElseIf Text3.Text = 6 Then If Text1.Text = "0" Then Y = "saizeci" Else c = "saizeci si" Y = c + " " + z.Text End If ElseIf Text3.Text = 7 Then If Text1.Text = "0" Then Y = "saptezeci" Else c = "saptezeci si" Y = c + " " + z.Text End If ElseIf Text3.Text = 8 Then If Text1.Text = "0" Then Y = "optzeci" Else c = "optzeci si" Y = c + " " + z.Text End If ElseIf Text3.Text = 9 Then If Text1.Text = "0" Then Y = "nouazeci" Else c = "nouazeci si" Y = c + " " + z.Text End If ElseIf Text3.Text = 10 Then Y = "o suta" End If End If End If Command1.Enabled = False End Sub Private Sub Command2_Click() X.Text = "" Y.Text = "" Command1.Enabled = True

127

X.SetFocus End Sub

14. Realizati un program care, la incercarea apasarii unui buton, acesta sa fuga din calea mouseului. Rezolvare. Vom realiza urmatorul program distractiv.

Private Sub Command1_Click() End End Sub Private Sub Form_Load() MsgBox "Alegeti o foaie de calcul Excel" OLE1.Visible = False Command1.Caption = "Sfarsit" CommonDialog1.ShowOpen OLE1.CreateLink (CommonDialog1.filename) OLE1.AppIsRunning = True OLE1.DoVerb End Sub 15. Realizati un program care sa determine, in functie de talie, varsta si sex, masa ideala a unei persoane.

128

Rezolvare Vom realiza programul cu intrebarile structurate in 4 forme, astfel: Form1:

Private Sub Command1_Click() If Text1.Text = "" Then MsgBox "Introdu totusi niste valori in caseta de text!!!", vbCritical, "N-ai uitat ceva?" ElseIf Val(Text1.Text) > 250 Then MsgBox "HA! Ha! Ha! Bun venit in tara piticilor!", vbExclamation, "Hai sa nu ne mintim!!!" Text1.Text = "" Text1.SetFocus ElseIf Val(Text1.Text) < 150 Then MsgBox "Acest program functioneaza doar pentru persoanele peste 150 de cm!", vbInformation, "Informatie" Text1.Text = "" Text1.SetFocus Else Form1.Visible = False Load Form2 Form2.Visible = True Form2.Text1.SetFocus End If End Sub

Form2:

Private Sub Command1_Click() If Len(Text1.Text) > 2 Then MsgBox "N-ai murit inca??!!", vbExclamation, "HA HA HA...i sa nu ne mintim!!!" Text1.Text = "" Text1.SetFocus ElseIf Text1.Text = "" Then MsgBox "Siii...ce varsta ai?", vbExclamation, "N-ai uitat nimic?!" Text1.SetFocus Else

129

Form2.Visible = False Load Form3 Form3.Visible = True End If End Sub Private Sub Command2_Click() Form2.Visible = False Form1.Visible = True End Sub

Form3

Private Sub Command1_Click() On Error GoTo acolo Form3.Visible = False Load Form4 Form4.Visible = True If Form3.Option1.Value = True Then Form4.Label2.Caption = 50 + 0.75 * (Form1.Text1.Text - 150) + (Form2.Text1.Text - 20) / 4 Else: Form4.Label2.Caption = 50 + 0.75 * (Form1.Text1.Text - 150) + (Form2.Text1.Text - 20) / 4 - 10 End If acolo: If Err.Number = 13 Then Unload Form4 MsgBox "INTRODU varsta corect!!!", vbExclamation, "Te crezi smecher(a) K mine?!" Err.Clear Unload Form3 Form2.Visible = True Form2.Text1.SetFocus End If End Sub Private Sub Command2_Click() Form3.Visible = False Form2.Visible = True End Sub

Form4:
Private Sub Command1_Click() Unload Form4 Unload Form3 Unload Form2 Unload Form1 End Sub

130

16. Acelasi program, ca la 15, dar totul intr-o singura fereastra (dupa una cu explicatii). Rezolvare: Form1
Private Sub Command1_Click() If Text1.Text = "" Or Text2.Text = "" Then MsgBox "Introdu datele in casetele de text!!!" Else If Option1.Value = True Then Label4.Caption = 50 + 0.75 * (Text1.Text - 150) + (Text2.Text 20) / 4 ElseIf Option2.Value = True Then Label4.Caption = 50 + 0.75 * (Text1.Text - 150) + (Text2.Text 20) / 4 - 10 Else MsgBox "Alege sexul?", vbOKOnly, "Ai sarit o etapa!!!" End If End If If Val(Label4.Caption) < 0 Then MsgBox "Am mentionat ca programul functioneaza la persoanele peste 150 de cm!!!", vbCritical, "EROARE!" Text1.Text = "" Label4.Caption = "" Text1.SetFocus End If End Sub Private Sub Command2_Click() Unload Form1 End Sub Private Sub Command3_Click() Text1.Text = "" Text2.Text = "" Option1.Value = False Option2.Value = False Label4.Caption = "" Text1.SetFocus End Sub

131

Form2 (prima care va porni)


Private Sub Command1_Click() Unload Form2 Load Form1 Form1.Visible = True End Sub

17. Scrieri un program in care, prin intermediul unor butoane de optiune, dintr-o forma, sa se modifice o alta forma. Rezolvare: Form1
Private Sub Command1_Click() Load Form2 Form2.Visible = True End Sub

132

Form2

Private Sub Command1_Click() If Option2.Value = True Then Form1.Height = Form1.Height + 150 ElseIf Option1.Value = True Then Form1.Height = Form1.Height - 150 ElseIf Option3.Value = True Then Form1.Width = Form1.Width - 150 ElseIf Option4.Value = True Then Form1.Width = Form1.Width + 150 ElseIf Option5.Value = True Then Form1.Height = Form1.Height + 150 Form1.Width = Form1.Width + 150 ElseIf Option6.Value = True Then Form1.Height = Form1.Height - 150 Form1.Width = Form1.Width - 150 End If End Sub Private Sub Command2_Click() Unload Form2 End Sub

18. Dintr-o forma, prin intermediul unor butoane, sa se deplaseze o alta forma.

133

Rezolvare Form1

Private Sub Care_Click() MsgBox "Muta forma intr-o pozitie favorabila!", vbInformation, "Un program care..." End Sub Private Sub Command1_Click() Load Form2 Form2.Enabled = True Form2.Visible = True End Sub

Form2
Private Sub Command1_Click() Unload Form2 End Sub Private Sub Image1_Click() Form1.Top = Form1.Top - 250 End Sub Private Sub Image2_Click() Form1.Left = Form1.Left + 250 End Sub Private Sub Image3_Click() Form1.Top = Form1.Top + 250 End Sub Private Sub Image4_Click() Form1.Left = Form1.Left - 250 End Sub

134

135

Capitolul 5. Programe cu elemente avansate ale mediului Visual Basic (Claudiu)


1. Sa se creeze un vector de controale Shape. Rezolvare Programul este un exemplu de folosire a unui vector de controale.Pentru crearea unui vector de controale la momentul executiei trebuie numai scris numarului de ordine al unui control de la care vrem sa pornim sa facem vectorul, in cazul programului Shape(0).Urmatoarele controale se incarca prin intermediul instructiunii Load. Proprietatea Shape a controlui Shape are 6 valori fiecare indicand o anumita forma geometrica a controlului.Proprietatea FillStyle determina modul in care este colorat controlul, opac, transparent, sau cu diferite linii. Controalele sunt mutate pentru a nu se suprapune.
Private Sub Form_Load() Shape(0).FillStyle = 0 Shape(0).FillColor = vbGreen Shape(0).Shape = 0 For i = 1 To 5 Load Shape(i) Shape(i).Shape = i Shape(i).FillStyle = 0 Shape(i).FillColor = vbMagenta Shape(i).Top = Shape(i - 1).Top + 500 Shape(i).Left = Shape(i - 1).Left + i / 2 * 300 Shape(i).Visible = True Next i End Sub

Shape(0) - singurul existent in faza de proiectare

2 Sa se scrie un program care sa deseneze o elipsa ale carei semiaxe sunt date de utilizator. Rezolvare: Programul arata modul de lucru cu instructiunea Circle, instructiune care poate desena si elipse dar trebuie specificat aspectul, adica raportul dintre lungimea celor 2 semiaxe. Programul nu masoara dimensiunile in twips ci in centimetrii, acest lucru se face prin intermediul instructiunii:
Scale (-3540, 2505)-(3540, -2505)

Cu ajutorul evenimentelor GotFocus a casetelor de text, in care trebuie introduse dimensiunile semiaxelor, casetele devin goale daca se vrea introducerea a noi dimensiuni a semiaxelor. 136

Dim a, b As Byte Dim aspect As Single Private Sub Command1_Click() a = Val(Text1.Text) b = Val(Text2.Text) aspect = b / a Text3.Text = aspect Label5.Visible = False Label6.Visible = False Form1.Cls Circle (7, 5), 3, , , , aspect End Sub Private Sub Form_Paint() ScaleMode = vbCentimeters Circle (7, 5), 3, , , , 2 Line (5, 5)-(9, 5) Line (7, 2)-(7, 8) End Sub Private Sub Text1_GotFocus() If Text1.Text <> "" And Text2.Text <> "" Then Text1.Text = "" Text2.Text = "" End If End Sub Private Sub Text2_GotFocus() If Text1.Text <> "" And Text2.Text <> "" Then Text1.Text = "" Text2.Text = "" End If End Sub

137

3. Sa se scrie un program care sa mute o forma folosind proprietatile Left si Top. Rezolvare: Programul foloseste functia Rnd care returneaza un numar aleatoriu.Acest numar e folosit pentru a determina pozitia la care se muta form-ul.Form-ul se muta la fiecare 250 de milisecunde, acest lucru se face prin intermediul unui control Timer.Functia Rnd returneaza urmatorul numar aleatoriu pornind de la numarul anterior generat, pentru a evita acest lucru se foloseste instructiunea Randomize care face ca functia Rnd sa returneze un numar aleatoriu pornind de la ceasul sistemului.

Dim aleatoriu, semnleft, semntop As Single Dim pozitieleft, pozitietop As Integer Dim i As Byte Private Sub Command1_Click() End End Sub Private Sub Form_Load() Timer1.Interval = 250 i = 0 End Sub Private Sub Timer1_Timer() Do While i < 1 Randomize aleatoriu = Rnd Select Case aleatoriu Case Is < 0.25 semnleft = -1 Case 0.25 To 0.5 semntop = -1.15 Case 0.5 To 0.75 semnleft = 1.66 Case Is > 0.75 semntop = 1 End Select pozitieleft = Form1.Left + semnleft * aleatoriu * 4000 pozitietop = Form1.Top + semntop * aleatoriu * 3000 If pozitieleft < 7635 And pozitietop < 5235 And pozitieleft > 0 _ And pozitietop > 0 Then Form1.Move Form1.Left+semnleft*aleatoriu*3000,Form1.Top _ + semntop * aleatoriu * 4000 i = 1 End If Loop End Sub

138

4. Sa se creeze un program care sa afiseze numele autorilor din tabelul Authors al bazei de date BIBLIO intr-o caseta de text.Sa se foloseasca un control Data. Rezolvare: Se amplaseaza pe forma un control de tip Data (cu numele Data1), apoi se realizeaza conexiune cu baza de date respective, stabilind proprietatile corespunzatoare ale acestui control, asa cum rezulta din urmatoarele figuri.

Programul leaga prin cod o caseta de text de o baza de date.Pentru a lega baza de date se foloseste un control Data care furnizeaza datele necesare controlului caseta de text.Legarea casetei de text de controlul Data se face prin atribuirea proprietatii DataSource ca valoare numelui controlului Data si proprietatii DataField ca valoare numele campului tabelul bazei de date de care vrem sa ne legam. Proprietatii Connect a controlului Data ii atribuim ca valoare tipul de baza de data de care dorim se ne legam, in cazul programului Access, proprietatii DatabaseName ii atribuim ca valoare calea si numele fisierului ce contine baza de date,proprietatii RecordSource i se atribuie ca valoare numele tabelului din baza de date ce ne intereseaza. Toate aceste lucruri se pot face fara a scrie nici o linie de cod, toate valorile date fiind scrise in fereastra de proprietati. 5. Sa se creeze un program care sa afiseze intr-un tabel MSFlexgrid continutul tabelului Authors din baza de date BIBLIO. Rezolvare Amplasati un control Data si un tabel MSFlexGrid corespunzator (10 randuri si 5 coloane).

139

Dupa ce realizati conexiune cu baza de date, ca la programul anterior, scrieti urmatorul cod:
Private Sub Form_Load() Data1.DatabaseName = "C:\Program Files\DevStudio\VB\BIBLIO.MDB" Data1.RecordSource = "Authors" End Sub

Programul contine un control MSFlexGrid care este legat de baza de date BIBLIO, baza de date ce este furnizata cu limbajul de programare Visual Basic si are scop didactic. Legarea unui tabel de o baza de date se face prin intermediul unui control data.Prin intermediul proprietatii DataBaseName a contolului data se specifica baza de date de care sa se lege controlul.
Data1.DatabaseName = "C:\Program Files\DevStudio\VB\BIBLIO.MDB"

Proprietati RecordSource i se da ca valoare numele tabelului din cadrul bazei de date cu care vrem sa legam controlul data:
Data1.RecordSource = "Authors"

Mai sunt si alte 2 proprietati ale controlului Data care nu pot fi specificate la momentul executiei, deci nu pot fi stabilite prin cod, ci trebuie stabilite la momentul scrieri programului.In fereastra de proprietati, in dreptul proprietatii RecordsetType se alege Dynaset si in dreptul proprietatii Connect se alege Acces, acesta fiind tipul bazei de date de care se leaga controlul.Controlului MSFlexgrid trebuie sa aiba ca valoare a proprietatii DataSource numele controlului Data pe care il folosim pentru a ne lega de o baza de date. 6. Sa se scrie un program care sa afiseze la apasarea unui buton un text peste o imagine continuta intr-o caseta cu imagine. Rezolvare Picture1

Command1

140

Private Sub Command1_Click()a Picture1.CurrentX = 600 Picture1.CurrentY = 1700 Picture1.FontSize = 12 Picture1.ForeColor = RGB(255, 255, 255) Picture1.Print "Scriu pe o caseta cu imagine" Command1.Visible = False End Sub Private Sub Form_Load() Form1.Width = 7000 Form1.Height = 5000 Picture1.AutoSize = True Picture1.Picture = LoadPicture("C:\Program Files\DevStudio\VB\+ _ samples\PGuide\PalMode\FOREST.jpg") End Sub

7. Sa se scrie un program care sa permita mutarea unui control. Rezolvare Programul arata modul in care se foloseste evenimentul DragDrop al unui form.Controlul folosit pentru demonstrare este un buton a carei proprietate DragMode are valoarea 1.Aceasta valoare face ca controlul sa poata fi mutat foarte simplu fara a fi nevoie sa se scrie cod pentru fiecare eveniment in parte (Drag si apoi Drop), dar ii afecteaza modul de comportare in cazul evenimentului click.Mutarea propriu-zisa a controlului se face cu ajutorul metodei Move.Procedura evenimentului DragDrop deja ne da controlul asupra caruia are loc acest eveniment si deasemenea si pozitia in care a fost eliberat controlul prin variabilele X si Y.Pentru ca miscarea sa fie naturala controlul este mutat astfel incat mijlocul sau ( X - Source.Width / 2), (Y - Source.Height / 2) sa corespunda locului in care se afla pointerul mouse-ului in momentul in care a fost eliberat.
Private Sub Form_DragDrop(Source As Control, X As Single, Y As Single) Source.Move (X - Source.Width / 2), (Y - Source.Height / 2) End Sub Private Sub Form_Load() Command1.DragMode = 1 End Sub

8. Sa se scrie un program care sa sesiseze cand un control este miscat peste un alt control, dar sa nu permita mutarea acelui control. Rezolvare
Private Sub Form_DragOver(Source As Control, X As Single, Y As Single, State As Integer) Label1.Caption = "Tocmai ati folosit facilitatea drag-and-drop" End Sub Private Sub Form_Load() Command1.DragMode = 1 End Sub Private Sub Label3_DragDrop(Source As Control, X As Single, Y As Single) Label1.Caption = "Ati eliberat butonul pe dreptunghiul albastru" End Sub

141

Label1

Command1 Label2 (initial Caption="") Label3

9. Sa se scrie un program care sa contina doua casete de text si care sa permita mutarea textului selectat dintr-o caseta de text in alta. Rezolvare:
Private Sub Form_Load() Text1.OLEDragMode = 1 Text1.OLEDropMode = 2 Text2.OLEDragMode = 1 Text2.OLEDropMode = 2 End Sub

10. Sa se creeze o clasa care sa aiba o proprietate care sa contina un numar, si o metoda care sa calculeze aria unui cerc de raza egala cu valoarea retinuta in proprietate.Sa se foloseasca clasa in cadrul unui program care sa calculeze aria unui cerc de raza data. 11. Sa se creeze o bara de instrumente. Rezolvare Amplasati in partea de sus a formei un control Picture1 de tip PictureBox, peste care suprapuneti trei controale de tip Image (Image1, Image2 si Image3):

Apoi scrieti urmatorul cod:


Private Sub Form_Load() Set Image1.Picture = _ LoadPicture("C:\Program Files\DevStudio\VB\samples\PGuide\Optimize\COG.bmp") Set Image2.Picture = _ LoadPicture("C:\Program Files\DevStudio\VB\samples\PGuide\Optimize\MONITOR.bmp") Set Image3.Picture = _ LoadPicture("C:\Program Files\DevStudio\VB\samples\PGuide\Optimize\ROOT.bmp") End Sub Private Sub Image1_Click() MsgBox ("A fost apasat primul 'buton'") End Sub

142

Private Sub Image2_Click() MsgBox ("A fost apasat al doilea 'buton'") End Sub Private Sub Image3_Click() MsgBox ("A fost apasat al treilea 'buton'") End Sub

Programul arata modul in care se poate construi o bara de instrumente.S-a folosit un control Picture care a fost folosit ca container pentru alte 3 controale Image.Fiecarui control Image i-a fost atribuita cate o imagine specificandu-se calea fisierului care contine imaginea pe care am dorit s-o afisam pe buton.Operatia ce ar trebui sa fie determinata de apasarea unui anumit buton se faca prin intermediul evenimentului click al controlului Image. Controlul Picture s-a folosit doar pentru o mai usoara manipulare a controalelor Image. 12. Sa se scrie un program care sa contina doua casete de text si sa nu permita mutarea textului selectat dintr-o caseta de text in alta Rezolvare:
Private Sub Form_Load() Text1.OLEDragMode = 1 Text1.OLEDropMode = 2 Text2.OLEDragMode = 1 Text2.OLEDropMode = 0 End Sub

13. Sa se scrie un program care sa permita in timpul executiei alegerea obiectului ce va fi inserat intr-un container OLE. Rezolvare Amplasati pe forma un control OLE cu numele OLE1 si un buton de comanda Command1. Scrieti apoi codul urmator:
Private Sub Command1_Click() OLE1.InsertObjDlg OLE1.SizeMode = 2 End Sub Private Sub Form_Load() Command1.Caption = "Insereaza un obiect in containerul OLE" End Sub

14. Sa se scrie un program care sa permita cautarea printre fisierele din calculator, si care la selectarea unuia sa afiseze un mesaj. Rezolvare Amplasati un control FileListBox, un control DriveListBox si unul DirListBox, ca in figura de mai jos si scrieti urmatorul cod:
Private Sub Dir1_Change() File1.Path = Dir1.Path End Sub Private Sub Drive1_Change() Dir1.Path = Drive1.Drive End Sub

143

Private Sub File1_Click() MsgBox "Ati selectat un fisier" End Sub

15. Sa se scrie un program care sa permita cautarea printre fisierele din calculator, si care la selectarea unuia sa afiseze un mesaj care sa contina numele fisierului ales, precum si directorul, si unitatea de disc in care se afla. Rezolvare
Private Sub Dir1_Change() File1.Path = Dir1.Path End Sub Private Sub Drive1_Change() Dir1.Path = Drive1.Drive End Sub Private Sub File1_Click() MsgBox "Ati selectat fisierul " & File1.filename & " din directorul " & Dir1.Path & " din unitatea de disc " & Drive1.Drive End Sub

16. Sa se scrie un program care sa caute un fisier dupa nume odata ce a fost selectat directorul sau subdirectorul in care se afla fisierul. Rezolvare
Dim i As Integer Dim gasit As Boolean Private Sub Command1_Click() Do While i < File1.ListCount And gasit = False File1.ListIndex = i numefis = File1.List(i) If LCase(Text1.Text) = LCase(numefis) Then gasit = True MsgBox "Am gasit fisierul" End If

144

i = i + 1 Loop End Sub Private Sub Form_Load() i = 0 Text1.Text = "" Command1.Caption = "Cauta" End Sub Private Sub Dir1_Change() File1.Path = Dir1.Path End Sub Private Sub Drive1_Change() Dir1.Path = Drive1.Drive End Sub

Programe comentate 17. Programul arata modul in care poate fi folosit un control numit CommonDialog. Acest control poate fi folosit pentru a selecta un anumit fisier si a returna calea acestuia. Metoda ShowOpen arata fereastra prin care se poate selecta fisierul dorit, iar proprietatea FileName returneaza calea si numele fisierului ales. Proprietatea Filter permite selectarea fisierelor ce sunt afisate dupa extensia lor:
CommonDialog1.Filter = "Fisiere text (.txt)|*.txt"

caracterul | separa o scurta descriere Fisiere text (.txt) de modul de specificare a extensiei dorite *.txt.
Private Sub Form_Load() CommonDialog1.Filter = "Fisiere text (.txt)|*.txt" CommonDialog1.ShowOpen Text1.Text = CommonDialog1.filename End Sub

145

18. Programul permite alegerea si afisarea unei imagini, dar deseneaza deasupra ei o linie.Grosimea liniei e stabilita prin intermediul proprietatii Drawidth.Proprietatea DrawStyle determina modul in care se vor vedea elementele grafice desenate pe controlul Picture.Proprietatea AutoRedraw daca are valoarea True face ca elementele grafice suprapuse peste o imagine sa fie pastrate in memorie si ca acestea sa-si pastreze proportiile fata de dimensiunea controlului daca dimensiunea acestuia se schimba.Daca proprietatea are valoarea False elementele grafice sunt doar desenate pe ecran si nu sunt pastrate in memorie in timpul rularii programului. Desenarea liniei se face prin intermediul instructiunii Line:
Command1.Visible = False

Private Sub Command1_Click() Form1.Left = 0 Form1.Top = 0 Form1.Height = Screen.Height Form1.Width = Screen.Width

146

Picture1.AutoSize = True CommonDialog1.Filter = "Fisiere ce contin imagini (*.jpg)|*.jpg" CommonDialog1.ShowOpen Set Picture1.Picture = LoadPicture(CommonDialog1.filename) Picture1.AutoRedraw = True Picture1.DrawStyle = vbSolid Picture1.DrawWidth = 3 Picture1.Line (400, 1000)-(10400, 1000) Command1.Visible = False End Sub

19. Programul afiseaza o imagine selectata de utilizator si la apasarea unui buton scrie un text deasupra ei.Stabilirea locului in care se va scrie textul se face prin instructiunile:
Picture1.CurrentX = 600 Picture1.CurrentY = 1700

Dimensiunea literelor se face prin intermediul proprietatii FontSize si scrierea efective se face prin intermediul metodei Print.Valoarea proprietatii AutoSize este True, deci controlul Picture este redimensionat automat la dimensiunea imaginii.
Private Sub Command1_Click() Picture1.CurrentX = 600 Picture1.CurrentY = 1700 Picture1.FontSize = 18 Picture1.Print "Scriu pe o caseta cu imagine" Command1.Visible = False End Sub Private Sub Form_Load() Form1.Width = 7000 Form1.Height = 5000 CommonDialog1.Filter = "Fisiere ce contin imagini (*.jpg)|*.jpg" CommonDialog1.ShowOpen Picture1.AutoSize = True Picture1.Picture = LoadPicture(CommonDialog1.filename) End Sub

20. Programul leaga un fisier ales de utilizator de un container OLE.Containerul OLE poate fi legat sau poate contine diferite obiecte inserabile.Tipurile obiectelor ce pot fi inserate in containerele OLE sau legate de acestea pot fi selectate in momentul crearii programului sau pot fi alese prin cod in momentul executiei. Programul leaga un obiect inserabil prin cod in momentul executiei programului.Controlul CommonDialog e folosit pentru a da o mai mare flexibilitate programului.Metoda CreateLink a containerului OLE are nevoie de calea fisierului ce va fi legat de control si pentru a furniza aceasta cale este folosita proprietatea FileName a controlului CommonDialog. La apasarea butonului formul pe care se afla containerul isi mareste dimensiunile la dimensiunile ecranului, pentru a face acest lucru este folosit obiectl Screen.Form-ul este aliniat cu ecranul prin modificarea proprietatilor Left si Top, iar containerul OLE este marit si pozitionat exact peste form.Programul insa dupa afisarea fisierului legat in containerul OLE nu sterge butonul.
Private Sub Command1_Click() OLE1.SizeMode = 1 End Sub Private Sub Command2_Click() OLE1.SizeMode = 0 End Sub Private Sub Command3_Click() OLE1.SizeMode = 2

147

End Sub Private Sub Command4_Click() OLE1.SizeMode = 3 End Sub Private Sub Form_Load() Form1.Left = 0 Form1.Top = 0 Me.Width = Screen.Width Me.Height = Screen.Height CommonDialog1.ShowOpen OLE1.CreateLink (CommonDialog1.filename) End Sub

Programul arata modul in care sunt afisate obiectele legate in containerul OLE cand este modificata proprietatea SizeMode.Valoarea 0 obiectul este taiat de marginile containerului,1 obiectul este intins sa corespunda dimensiunilor containerului, dar nu se pastreaza proportiile originale, 2 containerul este redimensionat pentru a afisa in totalitate obiectul, 3 obiectul este redimensionat pentu a incapea in container, dar se are grija sa se pastreze proportiile originale. In program pentru a se referi la form-ul curent este folosit cuvantul rezervat Me.

21. Programul permite vizualizarea unui fisier ales de utilizator ce contine o imagine.In caseta cu lista a fisierelor sunt afisate numai fisierele care au extensii folosite pentru fisiere ce contin imagini, acest lucru se face prin atribuirea unei valori proprietatii Pattern
File1.Pattern = "*.bmp;*.ico;*.wmf;*.emf"

Programul are deasemenea si un sistem de tratare a erorilor, adica cand are loc o eroare ea este intrceptata si in loc de opri programul se executa o anumita sectiune de cod.Semnalarea unui astfel de sistem se face prin instruciunea:
On Error GoTo tratareerori

unde tratareerori este o eticheta.Dupa sfarsitul procedurii in care este folosit acest sistem se scrie codul care va fi executat daca se intercepeaza o eroare.In cazul programului exista cod de tratare a 2 erori, daca nu exista nici o discheta in unitate, sau unitatea nu functioneaza, si unitatea nu exista.Exista si un al treilea caz, cand apare o alta eroare, dar acest caz e tratat doar prin afisarea numarului si descrierea erorii. Instructiunea Resume face ca programul sa reia instructiunea in timpul careia a aparut eroarea, Resume Next face ca programul sa reia instructiunea urmatoare celei in timpul executiei careia a aparut eroarea.

148

Instructiunea Stop opreste derularea programului dar nu il descarca din memorie si nici nu sterge valoarea vreunei variabile. Err este un obiect care contine informatii despre erorile aparute in timpul executiei, informatii ce pot fi obtinute prin intermediul proprietatilor Number si Description.

Dim a As String Dim nr As Integer Private Sub Dir1_Change() File1.Path = Dir1.Path End Sub Private Sub Drive1_Change() On Error GoTo tratareerori Dir1.Path = Drive1.Drive Exit Sub tratareerori: If Err.Number = 71 Then b = "Unitatea floppy nu este pregatita sau nu este nici o discheta introdusa in ea" If MsgBox(b, vbOKOnly) = vbOK Then Resume Else Resume Next End If ElseIf Err.Number = 68 Then MsgBox "Aceasta unitate sau cale nu exista " & Drive1.Drive, vbExclamation Resume Next Else MsgBox "A aparut o eroare neasteptata :" & Str(Err.Number) & Err.Description, vbCritical Stop End If Resume End Sub

149

Private Sub File1_Click() nr = File1.ListIndex a = File1.List(nr) MsgBox File1.Path & "\" & a numefis = File1.Path & "\" & a Image1.Picture = LoadPicture(numefis) End Sub Private Sub Form_Load() Image1.Stretch = True Label1.Caption = "Selectati fisierul ce contne imaginea ce doriti sa o vedeti" File1.Pattern = "*.bmp;*.ico;*.wmf;*.emf" End Sub

22. Amplasati pe o forma un buton de comanda Command1, un control CommonDialog1 si un control OLE1. Programul creeaza o legatura intre un container OLE si un fisier la alegerea utilizatorului. Activarea aplicatiei care a creat fisierul se face prin instructiunea:
OLE1.AppIsRunning = True

Metoda DoVerb efectueaza actiunea desemnata prin numarul care o urmeaza, daca nici o valoare nu o urmeaza, cum e cazul programului, atunci se considera valoarea implicita, 0. Cele doua instructiuni sunt folosite pentru a grabi activarea obiectului inserat.
Private Sub Command1_Click() End End Sub Private Sub Form_Load() MsgBox "Alegeti o foaie de calcul Excel" OLE1.Visible = False Command1.Caption = "Sfarsit" CommonDialog1.ShowOpen OLE1.CreateLink (CommonDialog1.filename) OLE1.AppIsRunning = True OLE1.DoVerb End Sub

23. Visual Basic permite selectarea obiectului ce va fi inserat intr-un container OLE si de catre utilizator, acest lucru se face cu ajutorul metodei InsertObjDlg.
Private Sub Command1_Click() OLE1.InsertObjDlg OLE1.SizeMode = 2 End Sub Private Sub Form_Load() Command1.Caption = "Insereaza un obiect in containerul OLE" End Sub

24. Programul permite utilizatorului inserarea intr-un container OLE a obiectului inserabil pe care il doreste si deasemenea permite salvarea obiectului intr-un fisier ales tot de catre el. Salvarea obiectului dintr-un container OLE se face cu ajutorul metodei SaveToFile, daca obiectul e legat se pastreaza numai legatura se pastreaza, daca obiectul e inserat se pastreaza tot. Deschiderea unui fisier se face prin instructiunea Open urmata de calea si numele fisierului, apoi se scrie modul de acces la fisier.In cazul programului fisierul e deschis pentru orice tip de acces, si de scriere si de citire.Dupa modul de deschidere al fisierului trebuie specificat numarul de ordine al fisierului.Un fisier odata de a fost deschis nu trebuie uitat a fi inchis prin instructiunea:
Close #1

150

Private Sub Command1_Click() CommonDialog1.ShowOpen Open CommonDialog1.filename For Random As #1 OLE1.SaveToFile 1: Close #1 End Sub Private Sub Form_Load() Command1.Caption = "Salveaza" OLE1.InsertObjDlg OLE1.AppIsRunning = True End Sub

25. Progamul contine doua containere OLE si intr-unul dintre ele este incorporat un obiect inserabil de tip Paint.Picture, deci poate fi creata o imagine de tip bitmap.Primele doua ghilimele din instructiunea de mai jos sunt necesare pentru a specifica ca obiectul inserat nu se creeaza plecand de la un fisier deja existent, ci se creeaza un obiect incorporat vid de tip Paint.Picture. Obiectul inserat este activat prin intermediul metodei DoVerb.
OLE1.CreateEmbed "", "Paint.Picture"

Programul permite salvarea desenului creat, precum si vizualizarea desenului salvat intr-un fisier ales de utilizator si care trebuie sa existe inainte de a incerca salvarea obiectului.
Private Sub Command2_Click() OLE2.Visible = True CommonDialog1.ShowOpen Open CommonDialog1.filename For Binary As #1 OLE2.ReadFromFile 1 Close #1 End Sub Private Sub Command1_Click() CommonDialog1.ShowOpen Open CommonDialog1.filename For Binary As #1 OLE1.SaveToFile 1 Close #1 End Sub Private Sub Form_Load() Command2.Caption = "Deschide cei in fisier" Command1.Caption = "Salveaza in fisier" OLE2.Visible = False OLE1.CreateEmbed "", "Paint.Picture" OLE1.DoVerb End Sub

151

Capitolul 6. O aplicaie concret, pas cu pas (Andreea)


Paii de urmat pentru crearea unui program n Visual Basic, pentru recomandarea tratamentelor pentru diferite afeciuni: 1. Denumiti forma in care lucrati: "Medicamente" si scrieti in antetul formei: "Spune NU durerii". 2. Realizati un tabel care sa se numeasca: "M" si care sa contina 6 coloane si 51 de randuri, dintre care prima coloana si primul rand sa fie fixe.(Daca controlul Microsoft Flex Grid nu se gaseste de la bun inceput in bara de instrumente din partea stanga a mediului Visual Basic, el trebuie adaugat in felul urmator: din meniul VB alegeti optiunea Project, apoi Components si veti obtine o lista de alte componente ce pot fi adaugate la Toolbox. Alegeti din lista Microsoft Flex Grid si bifati in dreptul acestei componente, apoi apasati pe butonul OK. In Toolbox va aparea simbolul acestui control.) 3. Adaugati in partea de sus a tabelului o eticheta pe care sa scrie: "Lista Medicamente:". Mariti si ingrosati literele, apoi schimbati-le culoarea. 4. Injumatatiti prima coloana a tabelului si dublati coloanele 2,4,5,6. 5. Scrieti in randul fix urmatoarele cuvinte care vor reprezenta capurile de tabel: Coloana 1-"Nr.crt" Coloana 2-"Denumire" Coloana 3-"Prezentare" Coloana 4-"Tara/Firma" Coloana 5-"Indicatii" Coloana 6-"Contraindicatii". Numerotati fiecare rand in celulele din prima coloana. 6. Realizati o subrutina care sa permita scrierea in tabel apeland la evenimentul KeyPress. 7. Realizati 2 butoane: unul care sa permita adaugarea unui rand la tabel care se va numi: "AdaugaRand" si pe care sa scrie "+" si unul care sa realizeze stergerea unui rand din tabel, care sa se numeasca: "StergeRand" si pe care sa scrie: "-".(Randul adaugat trebuie sa fie numerotat corespunzator) 8. Realizati un buton cu ajutorul caruia sa salvati datele inregistrate in tabel care sa se numeasca: "Salveaza" si pe care sa scrie: "Salveaza datele" si un alt buton prin care sa incarcati datele care sa aiba numele: "Incarca" si pe care sa scrie: "Incarca datele". 9. Consultand o carte de medicina (ex: Prof.dr.Dan Georgescu-"Produse farmaceutice", Editura National, Bucuresti,1998) completati celulele tabelului cu 50 de medicamente necesare pentru tratarea urmatoarelor tipuri de afectiuni: alcoolism, alergii, anemie, arsuri, astm alergic, boli dermatologice, bronsite acute si cronice, constipatie, dureri de cap, dinti, stomac, eczeme, efort, emotii, entorse, febra, gripa, greata, voma, insomnii, menopauza, migrene, oboseala, etc, impreuna cu caracteristicile lor. Ex: 1 Acid acetilsalicilic CP RO, SICOMED febra, gripa, dureri de dinti risc hemoragic. Creati posibilitatea de a mari sau micsora celulele cu ajutorul mouse-ului. 10. Pentru a facilita utilizarea programului creati posibilitatea de a incarca datele automat la apasarea butonului Start. 11. Realizati o subrutina care sa permita ordonarea alfabetica a datelor din fiecare coloana. 152

12. Amplasati in forma o lista simpla care sa contina tipurile de forme de prezentare ale medicamentelor inregistrate. Lista sa se numeasca: "Prez", sa fie de tip CheckBox iar elementele sale sa se poata ordona alfabetic.Adaugati in partea de sus a listei o eticheta pe care sa scrie: "Forme de prezentare". 13. Realizati 2 butoane: unul care sa permita bifarea tuturor casutelor din lista, care sa se numeasca "BifeazaToate" si pe care sa se afle semnul: "+" si un buton care sa realizeze deselectarea tuturor casutelor bifate, care sa se numeasca: "DeselecteazaToate" si pe care sa scrie: "-". 14. Realizati o lista care sa contina toate afectiunile pe care le-ati trecut in tabel la categoria Indicatii", lista care sa se numeasca: "Afectiuni", iar elementele sale sa fie ordonate alfabetic.Creati posibilitatea de a selecta mai multe elemente din lista. Adaugati in partea de sus a listei o eticheta pe care sa scrie:"Selectati afectiunile". 15. Amplasati 2 butoane: unul care sa permita selectarea tuturor elementelor din lista de afectiuni, sa se numeasca: "Selecteaza" si pe care sa se afle semnul: "+" si un buton care sa realizeze deselectarea tuturor elementelor, sa se numeasca: "Deselecteaza" si pe care sa scrie: "-". 16. Realizati un tabel care sa se numeasca: "T" si care sa contina 6 coloane si un rand fix. Creati posibilitatea de a mari sau micsora celulele cu ajutorul mouse-ului. 17. Injumatatiti prima coloana si dublati coloanele 2,4,5,6. 18. Scrieti in randul fix urmatoarele cuvinte care vor reprezenta capurile de tabel: Coloana 1-"Nr.crt" Coloana 2-"Denumire" Coloana 3-"Prezentare" Coloana 4-"Tara/Firma" Coloana 5-"Indicatii" Coloana 6-"Contraindicatii". 19. Realizati un buton care sa se numeasca si pe care sa scrie: "Tratament". 20. Creati o subrutina care sa permita, la actionarea butonului Tratament si dupa selectarea formelor de prezentare si a afectiunilor, afisarea medicamentelor si a caracteristicilor lor (prezente in tabelul M) corespunzatoare afectiunilor selectate. 21. Scrieti subrutina care realizeaza ordonarea alfabetica a tuturor coloanelor din tabelul: "T". 22. Amplasati o eticheta in partea de jos a aplicatiei care sa contina urmatoarea atentionare: ATENTIE: Aceasta aplicatie ofera informatii despre posibilele tratamente ale unor afectiuni, dar NU inlocuieste sfatul medicului!". 23. Schimbati culoarea de fundal a formei. 24. Realizati un buton care sa se numeasca: "End" si pe care sa scrie: "Iesire", care sa realizeze iesirea din program.

153

Rezolvri 1. Pentru a denumi forma scrieti la proprietatea "Name",din tabelul de proprietati, cuvantul "Medicamente", iar pentru a scrie in antetul formei, scrieti la proprietatea "Caption" in loc de "Form1", textul "Spune NU durerii!". 2. Pentru a realiza un tabel alegeti din Toolbox controlul MSFlexGrid. Initial tabelul va fi numit "MSFlexGrid1" (trebuie denumit "M") si va avea 2 randuri si 2 coloane, dar putem modifica proprietatile Rows si Cols pentru a modifica numarul de randuri, respectiv de coloane (tabelul trebuie sa contina 51 de randuri si 6 coloane).Prima coloana si primul rand sunt fixe de la inceput. 3. Etichetele se amplaseaza cu ajutorul controlului "Label" din Toolbox. Scrieti la proprietatea Caption, textul "Lista medicamente:". Marimea si fondul literelor se pot modifica de la proprietatea "Font" din tabelul de proprietati din dreapta. Culoarea literelor se poate schimba folosind proprietatea "ForeColor". 4. La inceput toate coloanele au aceeasi latime. Cu ColWidth se pot modifica valorile, aceasta proprietate fiind un vector. De exemplu, prin atribuirea M.ColWidth(0)=M.ColWidth(0)/2 se va injumatati grosimea primei coloane, respectiv, prin atribuirea M.ColWidth(1)=M.ColWidth(1)*2 se va dubla grosimea celei de-a doua coloane.

Private Sub Form_Load() M.ColWidth(0) = M.ColWidth(0) M.ColWidth(1) = M.ColWidth(1) M.ColWidth(3) = M.ColWidth(3) M.ColWidth(4) = M.ColWidth(4) M.ColWidth(5) = M.ColWidth(5) End Sub

/ * * * *

2 2 2 2 2

5. Pentru a scrie in randul fix trebuie folosita proprietatea TextMatrix. De exemplu, prin atribuirea M.TextMatrix(0,0)="Nr.crt", in celula corespunzatoare primului rand si primei coloane va scrie "Nr.crt". Pentru a numerota fiecare rand se utilizeaza instructiunea repetitiva cu contor, "For", astfel:
For i = 1 To M.Rows - 1 M.TextMatrix(i, 0) = i Next i

154

6. Subrutina care realizeaza scrierea in tabelul "M", apeland la evenimentul KeyPress, este urmatoarea:
Private Sub M_KeyPress(KeyAscii As Integer) If (KeyAscii = 8) And (M.Text <> "") Then L = Len(M.Text) M.Text = Left(M.Text, L - 1) Else If KeyAscii >= 32 Then M.Text = M.Text + Chr$(KeyAscii) End If End If End Sub

7. Butoanele se amplaseaza cu ajutorul controlului "Command Button" din Toolbox, se denumesc la proprietatea "Name" si se scrie in interiorul lor cu ajutorul proprietatii "Caption". Subrutina asociata butonului "AdaugaRand" este urmatoarea:
Private Sub AdaugaRand_Click() x = M.Rows M.Rows = x + 1 x = M.Rows M.TextMatrix(x - 1, 0) = x - 1 End Sub

Subrutina asociata butonului "StergeRand" este urmatoarea:


Private Sub StergeRand_Click() x = M.Rows M.Rows = x - 1 End Sub

8. Butoanele se amplaseaza cu ajutorul controlului "Command Button" din Toolbox, se denumesc la proprietatea "Name" si se scrie in interiorul lor cu ajutorul proprietatii "Caption". Cu Open cale + nume fisier For OutPut as #numar putem crea/deschide pentru scriere un fisier text cu numele si calea precizate, asociindu-i numarul 1. Orice referire la acest fisier se va face prin intermediul numarului 1. Pentru salvarea datelor, se parcurge tabelul pe randuri si coloane si fiecare element al tabelului este scris in fisier, cu ajutorul comenzii Print.Scrierea de date se face cu Print #numar, expresiile_de_scris.Inchiderea unui fisier deschis pentru scriere se face prin Close #numar. Subrutina care realizeaza salvarea datelor este urmatoarea :
Private Sub Salveaza_Click()

155

Open App.Path + "\tabel.txt" For Output As #1 Print #1, M.Rows For i = 0 To M.Rows - 1 For j = 0 To M.Cols - 1 Print #1, M.TextMatrix(i, j) Next j Next i Close #1 End Sub

Pentru a deschide fisierul in vederea citirii de date din el se foloseste : Open cale + nume fisier For Input as #numar. Citirea de date se face cu Input #numar, variabilele_de_citit (pentru numere) sau cu Line Input #numar, variabilele_de_citit (pentru siruri de caractere). Inchiderea unui fisier deschis pentru citire se face prin Close #numar. Subrutina care realizeaza incarcarea datelor este urmatoarea: Private Sub Incarca_Click() Open App.Path + "\tabel.txt" For Input As #1 Input #1, x M.Rows = x For i = 0 To M.Rows - 1 For j = 0 To M.Cols - 1 Line Input #1, s M.TextMatrix(i, j) = s Next j Next i Close #1 End Sub

9. Posibilitatea de a mari sau micsora celulele din tabel cu ajutorul mouse-ului se creeaza cu proprietatea AllowUserResizing care are diferite valori ce permit utilizatorului sa redimensioneze randurile/coloanele tabelului. 10. Pentru ca datele sa se incarce automat, adaugati la codul atasat formei urmatoarul text: 156

Incarca_Click

11. Cu ajutorul urmatoarei subrutine se pot ordona alfabetic toate coloanele tabelului "M" prin efectuarea unui simplu Click pe fiecare coloana. S-a folosit instructiunea de selectie multipla Case si metoda de ordonare prin selectie directa. Exemplu general: metoda consta in determinarea la fiecare pas i din cei n-1, a celui mai mic element dintre X(i), X(i+1), X(i+2),X(n), care va ocupa pozitia i. Asadar, in fiecare pas i vom compara pe X(i) cu elementele X(j), cu j de la i+1 la n, iar ori de cate ori se gaseste un element X(j) mai mare decat X(i), cele doua elemente se interschimba. Prin urmare, la pasul i are loc o selectie directa a elementului ce va ocupa pozitia a i-a in vectorul ordonat.
Private Sub M_Click() Select Case M.Col Case 1: For i = 1 To M.Rows - 2 For j = i + 1 To M.Rows - 1 If M.TextMatrix(i, 1) > M.TextMatrix(j, 1) Then For k = 1 To 5 aux = M.TextMatrix(i, k) M.TextMatrix(i, k) = M.TextMatrix(j, k) M.TextMatrix(j, k) = aux Next k End If Next j Next i Case 2: For i = 1 To M.Rows - 2 For j = i + 1 To M.Rows - 1 If M.TextMatrix(i, 2) > M.TextMatrix(j, 2) Then For k = 1 To 5 aux = M.TextMatrix(i, k) M.TextMatrix(i, k) = M.TextMatrix(j, k) M.TextMatrix(j, k) = aux Next k End If Next j Next i

157

Case 3: For i = 1 To M.Rows - 2 For j = i + 1 To M.Rows - 1 If M.TextMatrix(i, 3) > M.TextMatrix(j, 3) Then For k = 1 To 5 aux = M.TextMatrix(i, k) M.TextMatrix(i, k) = M.TextMatrix(j, k) M.TextMatrix(j, k) = aux Next k End If Next j Next i Case 4: For i = 1 To M.Rows - 2 For j = i + 1 To M.Rows - 1 If M.TextMatrix(i, 4) > M.TextMatrix(j, 4) Then For k = 1 To 5 aux = M.TextMatrix(i, k) M.TextMatrix(i, k) = M.TextMatrix(j, k) M.TextMatrix(j, k) = aux Next k End If Next j Next i Case 5: For i = 1 To M.Rows - 2 For j = i + 1 To M.Rows - 1 If M.TextMatrix(i, 5) > M.TextMatrix(j, 5) Then For k = 1 To 5 aux = M.TextMatrix(i, k) M.TextMatrix(i, k) = M.TextMatrix(j, k) M.TextMatrix(j, k) = aux Next k End If Next j Next i End Select End Sub

158

12. Lista simpla o puteti amplasa cu ajutorul controlului ListBox din Toolbox. Denumirea listei se realizeaza la proprietatea "Name", modificati proprietatea "Sorted" cu valoarea True si proprietatea "Style" cu valoarea 1-CheckBox. Scrieti tipurile de forme de prezentare ale medicamentelor la proprietatea List, separate de Ctrl+Enter. La final apasati Enter. Etichetele se creeaza cu ajutorul controlului Label din Toolbox si se scrie in interiorul lor folosind proprietatea "Caption" din tabelul de proprietati din dreapta. 13. Butoanele se amplaseaza cu ajutorul controlului "Command Button" din Toolbox, se denumesc la proprietatea "Name" si se scrie in interiorul lor cu ajutorul proprietatii "Caption". Aceasta subrutina permite bifarea tuturor casutelor din lista cu forme de prezentare prin actionarea butonului "BifeazaToate".
Private Sub BifeazaToate_Click() For i = 0 To Prez.ListCount - 1 Prez.Selected(i) = True Next i End Sub

Urmatoarea subrutina permite deselctarea tuturor casutelor din lista cu forme de prezentare, la apasarea butonului "DeselecteazaToate".
Private Sub DeselecteazaToate_Click() For i = 0 To Prez.ListCount - 1 Prez.Selected(i) = False Next i End Sub

unde: ListCount = Numarul elementelor din lista Selected() = Vector numerotat incepand cu 0, cu valori de tip Boolean ce contine True dca elementul este selectat, respectiv False, daca nu este selectat.

14. O lista simpla se amplaseaza cu ajutorul controlului ListBox din Toolbox si se denumeste folosind proprietatea "Name". Scrieti afectiunile la proprietatea List, separate prin Ctrl+Enter, iar la final apasati Enter. Modificati proprietatea "Sorted" cu valoarea True pentru ca elementele sa se

159

ordoneze alfabetic. Posibilitatea de a selecta mai multe elemente din lista se poate crea, modificand proprietatea "MultiSelect" cu valoarea 1-Simple. Etichetele se creeaza cu ajutorul controlului Label din Toolbox si se scrie in interiorul lor folosind proprietatea "Caption" din tabelul de proprietati din dreapta. 15. Butoanele se amplaseaza cu ajutorul controlului "Command Button" din Toolbox, se denumesc la proprietatea "Name" si se scrie in interiorul lor cu ajutorul proprietatii "Caption". Aceasta subrutina permite selectarea tuturor elementelor din lista de afectiuni prin actionarea asupra butonului "Selecteaza".
Private Sub Selecteaza_Click() For i = 0 To Afectiuni.ListCount - 1 Afectiuni.Selected(i) = True Next i End Sub

Urmatoarea subrutina permite deselectarea tuturor elementelor selectate din lista de afectiuni prin actionarea asupra butonului "Deselecteaza".
Private Sub Deselecteaza_Click() For i = 0 To Afectiuni.ListCount - 1 Afectiuni.Selected(i) = False Next i End Sub

unde: ListCount = Numarul elementelor din lista Selected() = Vector numerotat incepand cu 0, cu valori de tip Boolean ce contine True dca elementul este selectat, respectiv False, daca nu este selectat.

16. Pentru a realiza un tabel alegeti din Toolbox controlul MSFlexGrid. Initial tabelul va fi numit "MSFlexGrid1" (trebuie denumit "T") si va avea 2 randuri si 2 coloane, dar putem modifica proprietatile Rows si Cols pentru a modifica numarul de randuri, respectiv de coloane (tabelul trebuie sa contina 1 rand si 6 coloane). Numarul de randuri, respectiv coloane fixe se poate schimba, cu ajutorul proprietatilor FixedRows si FixedCols.

160

Posibilitatea de a mari sau micsora celulele din tabel cu ajutorul mouse-ului se creeaza cu proprietatea AllowUserResizing care are diferite valori ce permit utilizatorului sa redimensioneze randurile/coloanele tabelului. 17. La inceput toate coloanele au aceeasi latime. Cu ColWidth se pot modifica valorile, aceasta proprietate fiind un vector. De exemplu, prin atribuirea M.ColWidth(0)=M.ColWidth(0)/2 se va injumatati grosimea primei coloane, respectiv, prin atribuirea M.ColWidth(1)=M.ColWidth(1)*2 se va dubla grosimea celei de-a doua coloane. 18. Pentru a scrie in randul fix trebuie folosita proprietatea TextMatrix. De exemplu, prin atribuirea M.TextMatrix(0,0)="Nr.crt", in celula corespunzatoare primului rand si primei coloane va scrie "Nr.crt".

19. Butoanele se amplaseaza cu ajutorul controlului "Command Button" din Toolbox, se denumesc la proprietatea "Name" si se scrie in interiorul lor cu ajutorul proprietatii "Caption". 20. Pentru a crea o astfel de subrutina avem nevoie mai intai de o functie care sa vada daca este marcat vreun element din lista cu forme de prezentare. Aceasta functie este:
Function EsteMarcat(ByVal s As String) ok = False For i = 0 To Prez.ListCount - 1 If Prez.List(i) = s And Prez.Selected(i) = True Then ok = True

161

End If Next i EsteMarcat = ok End Function

Subrutina care permite, la actionarea butonului Tratament si dupa selectarea formelor de prezentare si a afectiunilor, afisarea medicamentelor si a caracteristicilor corespunzatoare afectiunilor selectate este urmatoarea:
Private Sub Tratament_Click() n = Afectiuni.ListCount k = 0: T.Rows = 1 For j = 0 To n - 1 If Afectiuni.Selected(j) = True Then For i = 1 To M.Rows - 1 If InStr(M.TextMatrix(i, 4), Afectiuni.List(j)) <> 0 And _ EsteMarcat(M.TextMatrix(i, 2)) Then k = k + 1 T.Rows = k + 1 T.TextMatrix(k, 0) = k T.TextMatrix(k, 1) = M.TextMatrix(i, 1) T.TextMatrix(k, 2) = M.TextMatrix(i, 2) T.TextMatrix(k, 3) = M.TextMatrix(i, 3) T.TextMatrix(k, 4) = M.TextMatrix(i, 4) T.TextMatrix(k, 5) = M.TextMatrix(i, 5) End If Next i End If Next j End Sub

unde: InStr(S,L) = 0, daca L nu se afla in S = pozitia in care se afla L in S.

162

21. Cu ajutorul urmatoarei subrutine se pot ordona alfabetic toate coloanele tabelului "T" prin efectuarea unui simplu Click pe fiecare coloana. S-a folosit instructiunea de selectie multipla Case si metoda de ordonare prin selectie directa. Exemplu general: metoda consta in determinarea la fiecare pas i din cei n-1, a celui mai mic element dintre X(i), X(i+1), X(i+2),X(n), care va ocupa pozitia i. Asadar, in fiecare pas i vom compara pe X(i) cu elementele X(j), cu j de la i+1 la n, iar ori de cate ori se gaseste un element X(j) mai mare decat X(i), cele doua elemente se interschimba. Prin urmare, la pasul i are loc o selectie directa a elementului ce va ocupa pozitia a i-a in vectorul ordonat.
Private Sub T_Click() Select Case T.Col Case 1: For i = 1 To T.Rows - 2 For j = i + 1 To T.Rows - 1 If T.TextMatrix(i, 1) > T.TextMatrix(j, 1) Then For k = 1 To 5 aux = T.TextMatrix(i, k) T.TextMatrix(i, k) = T.TextMatrix(j, k) T.TextMatrix(j, k) = aux Next k End If Next j Next i Case 2: For i = 1 To T.Rows - 2 For j = i + 1 To T.Rows - 1

163

If T.TextMatrix(i, 2) > T.TextMatrix(j, 2) Then For k = 1 To 5 aux = T.TextMatrix(i, k) T.TextMatrix(i, k) = T.TextMatrix(j, k) T.TextMatrix(j, k) = aux Next k End If Next j Next i Case 3: For i = 1 To T.Rows - 2 For j = i + 1 To T.Rows - 1 If T.TextMatrix(i, 3) > T.TextMatrix(j, 3) Then For k = 1 To 5 aux = T.TextMatrix(i, k) T.TextMatrix(i, k) = T.TextMatrix(j, k) T.TextMatrix(j, k) = aux Next k End If Next j Next i Case 4: For i = 1 To T.Rows - 2 For j = i + 1 To T.Rows - 1 If T.TextMatrix(i, 4) > T.TextMatrix(j, 4) Then For k = 1 To 5 aux = T.TextMatrix(i, k) T.TextMatrix(i, k) = T.TextMatrix(j, k) T.TextMatrix(j, k) = aux Next k End If Next j Next i Case 5: For i = 1 To T.Rows - 2 For j = i + 1 To T.Rows - 1 If T.TextMatrix(i, 5) > T.TextMatrix(j, 5) Then For k = 1 To 5 aux = T.TextMatrix(i, k) T.TextMatrix(i, k) = T.TextMatrix(j, k) T.TextMatrix(j, k) = aux Next k End If Next j Next i End Select End Sub

22. Etichetele se creeaza cu ajutorul controlului Label din Toolbox si se scrie in interiorul lor folosind proprietatea "Caption" din tabelul de proprietati din dreapta. 23. Schimbarea culorii de fundal a formei se realizeaza cu ajutorul proprietatii BackColor din tabelul de proprietati din dreapta. 24. Butoanele se amplaseaza cu ajutorul controlului "Command Button" din Toolbox, se denumesc la proprietatea "Name" si se scrie in interiorul lor cu ajutorul proprietatii "Caption". Urmatoarea subrutina realizeaza iesirea din program prin actionarea butonului "End".
Private Sub End_Click() End End Sub

164

165

Bibliografie
1. Bogdan Ptru - Programarea calculatoarelor electronice, curs pentru studenii anului II, Contabilitate i informatic de gestiune, Universitatea din Bacu, 2004, http://bacau.inf.ro/bogdan/cursuri/pce 2. Bogdan Ptru -Aplicaii n Visual Basic, Editura Teora, Bucureti, 1998-2004 3. Luminita Fanaru, Ioan Brava Visual Basic. Primii pasi si urmatorii, Editura Polirom, Iasi, 2003 4. * * * - Ghidul programatorului in Visual Basic 6, Microsoft Press Teora, 1998 5. * * * - Microsoft Visual Basic Help, www.microsoft.com

166

You might also like