Sunteți pe pagina 1din 166

Bogdan Pătruţ (coordonator)

Andreea Schmidt • Anca Ioana Capră • Mirela Vărnav


Claudiu Căuneac • Cătălin Ciocoiu • Ionel Butucaru

PROGRAMAREA CALCULATOARELOR ELECTRONICE.


ÎNDRUMAR PENTRU LABORATOR

EduSoft 2005
Redactor: Iulian Marius FURDU

Descrierea CIP a Bibliotecii Naţionale a României


Programarea calculatoarelor electronice : îndrumar
pentru laborator / coord.: Bogdan Pătruţ ; Andreea
Schmidt, Anca Ioana Capra, .... - Bacău : EduSoft,
2005
Bibliogr.
ISBN 973-87496-1-1

I. Pătruţ, Bogdan (coord.)


II. Schmidt, Andreea
III. Capra, Anca Ioana

004.42

Copyright © 2005 Editura EduSoft


Toate drepturile asupra prezentei ediţii sunt rezervate Editurii EduSoft.
Reproducerea parţială sau integrală a conţinutului, prin orice mijloc, fără acordul
scris al Editurii EduSoft este interzisă şi se va pedepsi conform legislaţiei în vigoare.

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

ISBN 973-87496-1-1

2
Bogdan Pătruţ (coordonator)
Andreea Schmidt • Anca Ioana Capră • Mirela Vărnav
Claudiu Căuneac • Cătălin Ciocoiu • Ionel Butucaru

PROGRAMAREA
CALCULATOARELOR
ELECTRONICE
Îndrumar pentru laborator

- culegere de programe în Visual Basic -

EduSoft 2005
3
Bogdan Pătruţ
Bogdan a absolvit Facultatea de Informatica din Universitatea "Al. I. Cuza" Iaşi în
1994. Este lector drd. la Universitatea din Bacau, Catedra de Matematică-Fizică-
Informatică, unde ţine cursuri de Programarea calculatoarelor electronice, Sisteme
expert de gestiune şi Sisteme informatice de asistare a deciziei la studenţii de la
contabilitate şi informatică de gestiune. A publicat 11 cărţi (9 la Editura Teora), a
publicat peste 25 articole ştiinţifice de specialitate şi este coautor al unei invenţii
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 matematica-
informatica, 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 Căuneac


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 matematica-
informatica. 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

Mărturisire 6

Introducere in Visual Basic prin exemple (Bogdan) 7

1. Programe simple cu butoane de comanda şi casete de text (Andreea, Cătălin) 35

2. Programe simple (Mirela, Ionuţ, Cătălin) 38

3. Programe cu liste, casete de validare, butoane de opţiune şi tabele (Anca, Andreea) 70

4. Programe diverse (Anca, Cătălin, Ionuţ) 117

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

6. O aplicaţie concretă, pas cu pas (Andreea) 152

Bibliografie 166

5
Mărturisire

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 studenţii mei să lucreze (sau alteori ca să-i sperii puţin!), am spus la una dintre
întâlnirile mele cu studenţii anului II Contabilitate şi Informatică de Gestiune, 2005: "Nu vreţi să
mă ajutaţi să scriem o culegere de aplicaţii în Visual Basic? Cine mă ajută va lua 10 la examen.".

Nu (cred că) era prima dată când lansasem o asemenea invitaţie studenţilor mei, dar de fiecare
dată se întâmpla 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 aşa ceva
(mai ales că de abia începusem să predau materia respectivă), fie că nu credeau că mă voi ţine de
cuvânt, fie că nu le repetam sau nu le spuneam într-un mod convingător acest lucru. Nu ştiu dacă
eu însumi credeam că pot face o carte împreună cu studenţii mei. Mărturisesc faptul că nu credeam
că se poate aşa ceva în Universitatea Bacău. Dar iată că în anul II CIG din 2005 am avut surpriza
să întâlnesc tineri ambiţioşi, conduşi de dorinţa de a lua 10 (nu ştiu), sau de pasiunea pentru ceea
ce se întrezarea a fi programarea în Visual Basic (aş vrea să fie aşa). Cu ei am realizat această
culegere de probleme. Ea va servi, în primul rând, colegilor lor, nu puţini la număr, care au picat
examenul şi care au timp la dispoziţie o vară întreagă să o studieze. Ar putea fi considerat un gest
frumos din partea celor mai buni, pentru cei mai puţini buni.

De fapt, această culegere e scrisă de ei. Eu nu am făcut decât sî o tehnoredactez, să mai corectez pe
ici pe colo şi, fireşte, să coordonez acest colectiv tânăr. Aşa că, daţi-mi voie să mă numesc
coordonator al cărţii (în fond asta ar trebui să fie un profesor, nu-i aşa?).

În rest, autorii au 19-20 ani şi sunt tineri ca şi voi, cândva "luptători" cu programarea în Visual
Basic şi poartă nume obişnuite: Andreea, Anca, Mirela, Cătălin, Claudiu şi Ionel. Dar vă asigur
că sunt nişte tineri care mi-au făcut o impresie bună neobişnuită!

Bogdan Pătruţ,
martie 2005

6
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 iconiţa corespunzătoare, dacă există o asemenea iconiţă pe Desktop-ul
calculatorului ("masa de lucru")
2. Acţionând butonul Start din partea de stânga joc a ecranului, apoi opţiunea Programs, apoi
alegând grupul Microsoft Visual Basic 5 şi, în final, Microsoft Visual Basic 5.
La pornire veţi fi întâmpinat de un ecran precum cel din figura de mai jos şi, pentru a crea o
aplicaţie executabilă standard, deocamdată veţi alege "Standard exe" şi veţi acţiona butonul Open.

După aceasta, Visual Basic va arăta ca în figura următoare, în care am pus în evidenţă principalele
elemente care ne interesează pentru dezvoltarea unor aplicaţii simple.

7
1. Remarcaţi că sunteţi în faza de
2. Butoanele de
pornire şi

3 View Code şi View

4 Forma = programul tău


5 Structura proiectului tău

6. Controalele ce vor fi
amplasate pe forma ta şi vor 7. Tabelul cu proprietăţţile
fi programate de tine formei sau ale controalelor
de pe ea

Aşadar, urmăreşte cu atenţie cele 6 zone din mediul VB5, fiecare având importanţa ei şi mai târziu
vei înţelege mai bine la ce ajută fiecare.
Deocamdată îţi spun că un program (aplicaţie sau proiect) VB este compus din una sau mai multe
forme. Acestea sunt ferestre ca cele din Windows, aşa 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 tău 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
întâlnit în mai toate aplicaţiile din Windows (vezi zona 6). Vom numi aceste obiecte controale. Ele,
ca şi forma, dealtfel, pot fi personalizate, stabilind diferite valori pentru proprietăţile lor, precum
culoare, font, poziţie (vezi zona 7). Pentru ca ele să acţioneze în sensul dorit de tine, va trebui să le
ataşăm anumite proceduri sau subrutine, adică mici bucăţi de cod, adică de program, scrise în
Visual Basic.
Dacă vrei să faci trecerea de la vizualizarea interfeţei la vizualizarea codului şi înapoi, va trebui să
apeşi pe butoanele din zona 3.
Aplicaţia ta este deja funcţională, dacă o vei porni:vei avea o fereastră simplă, forma Form1, pe
care o poţi muta, redimensiona şi închide, ca orice fereastră din Windows. Deocamdată eşti în faza
de proiectare (design), iar de acest lucru îţi poţi da seama în mai multe feluri. În zona 1 apare scris,
printre altele, cuvântul "design". Pe de altă parte, Form1 are o serie de puncte pe ea, care nu sunt
altceva decât 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 seamănă cu butonul Play de la orice casetofon) este
activ, pe când celelalte două nu.
Dacă vrei să porneşti aplicaţia, trebuie să acţionezi pe butonul Start sau pe tasta F5. Cuvântul
"design" din zona 1 va fi înlocuit de cuvântul "run" (deci aplicaţia rulează), grila de pe Form1 va
dispărea, iar butonul Start va deveni inactiv, dar se vor activa celelalte două butoane (ne interesează

8
butonul End). Abia acum poţi muta sau redimensiona fereastra ta, iar dacă vrei să opreşti
programul, vei apăsa pe butonul End din zona 2 sau pe X-ul din colţul dreapta-sus al ferestrei
Form1.

2. Primul tău program


Ca să realizezi primul tău program în VB care să arate puţin altfel, să fie personalizat, şi să mai şi
facă ceva, trebuie să priveşti cu atenţie tabelul de proprietăţi din dreapta. Acolo sunt trecute
proprietăţile obiectului curent selectat, în cazul nostru Form1. În stânga tabelului sunt trecute
proprietăţile, î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 poţi
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 proprietăţi ş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 rulării programului tău.
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 apărea atât cu numele Command1, dar şi cu proprietatea Caption
având 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 proprietăţi a unui anumit obiect,
trebuie ca mai înainte să selectezi acel obiect, de exemplu printr-un simplu Click pe el.
Porneşte acum programul tău şi, deşi dacă apeşi pe butonul Command1 (pe care stă scris cuvântul
"Salut") nu se întămplă nimic, oricum arată mai bine!

Hai să facem ca atunci când apeşi pe butonul acesta să apară un mesaj, cu textul "Bună ziua!". Ei
bine, ca să determinăm calculatorul/programul să se comporte aşa, va trebui să ştii că atunci când
acţionezi într-un fel sau altul (de exemplu prin click de mouse) pe un control sau pe o formă, VB
înţelege că ai produs un anumit eveniment. Un asemenea eveniment se numeşte Click şi se produce
atunci când tu apeşi simplu cu mouse-ul pe butonul Command1. Pentru a-l face pe calculator să
reacţioneze 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 conţine o secvenţă de
instrucţiuni, prin care se precizează ce anume trebuie să execute calculatorul/programul, de fiecare
dată când 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 tău să fie oprit. Apoi vei alege din zona 2 primul buton (View
Code) şi vei face click pe el. Deasupra paginii albe care va apărea 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 apărea 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 reacţionează la apăsarea ta.

La apăsarea butonului, vei obţine următoarea casetă de mesaj (denumirea procedurii MsgBox
tocmai de acolo vine), în care vbInformation este o constantă numerică ce simbolizează semnul de
informaţie din casetă. Opreşte programul şi încearcă şi vbExclamation sau vbCritical pentru a vedea
efectul.

Dacă eşti în faza de proiectare şi vrei să ajungi mai repede la codul asociat unui anumit obiect, poţi
să faci dublu-click pe respectivul obiect; de exemplu, dacă ai dat View Object şi execuţi dublu-click
pe butonul Command1, vei ajunge la subrutina Command1_Click, fără să mai acţionezi tu pe View
Code (în zona 2).

10
3. Un salut special pentru tine!
Vom încerca să complicăm puţin exemplul anterior, astfel încât VB să te salute special pe tine sau
pe cineva, al cărui nume să fie scris într-o casetă de text. Hai să amplasăm, aşadar, sub butonul
nostru o casetă de text. Priveşte zona 6 şi alege de acolo simbolul care conţine un "ab" (TextBox).
Desenează caseta de text sub butonul Command1 şi apoi denumeşte această casetă Persoana,
modificând proprietatea (Name) (prima din lista lui Text1). Şterge apoi conţinutul 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 numeşte X şi el are o
proprietatea P, pentru a face referinţă la valoarea proprietăţii P a obiectului X va trebui să notezi
acest lucru, în programul tău, 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 "adăugat" sau,
mai bine zis, alipit (concatenat) salutului nostru, din subrutina Command1_Click. Aşadar, pentru ca
să primim un salut pentru persoana al cărei nume va fi scris în caseta Persoana (în timpul
funcţionării programului), va trebui să modificăm subrutina Command1_Click astfel:

Private Sub Command1_Click()


MsgBox "Buna ziua "+Persoana.Text+"!", vbInformation,
"Salutare"
End Sub

Ce se va obţine? Dacă porneşti programul şi scrii în caseta de text Diana, vei obţine, la apăsarea
butonului Command1 un salut special pentru Diana:

11
Aşadar, simbolul matematic + înseamnă, când 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 aştepta decât la un salut ca cel de mai înainte.
Astfel, Persoana.Text va fi considerat şirul vid (fără nimic în el) şi va avea valoarea notată prin "".

4. Un calculator cu operaţii aritmetice


Renunţă la proiectul vechi şi începe unul nou. Dacă vrei să renunţi, apeşi în meniu File->Remove
project şi ţi se va cere să-l salvezi. Va trebui să dai un nume atât pentru fişierul ce cuprinde forma ta
(interfaţa şi codul ei) Form1, căt şi un nume pentru proiectul în ansamblul său. Primul fişier va avea
extensia FRM, iar al doilea VBP. Dacă mai tărziu vei realiza un fişier ce va conţine m forme şi n
module (cod fără interfeţe), când va trebui să salvezi, vei da nume la m+n+1 fişiere, ultimul fiind
însuşi proiectul, adică un fişier în care se păstrează informaţii despre structura aplicaţiei tale.

De data aceasta, te rog să amplasezi pe forma ta trei casete de text (fără text în ele), fie ele
Operand1, Operand2 şi Rezultat (denumeşte-le aşa modificând proprietăţile Name de la fiecare),
precum şi patru butoane, pe care te rog să le denumeşti ButonPlus, ButonMinus, ButonOri şi
ButonSupra, pentru a avea nume mai sugestive pentru cele patru butoane corespunzătoare celor
patru operaţii aritmetice pe care vrem să le implementăm în programul nostru.
Modifică şi proprietăţile Caption de la fiecare din cele patru butoane, punând pe ele simbolurile +, -,
x şi :. Dacă ţi se pare că aceste simboluri sunt prea mici pentru butoanele pe care apar, nu ai decât să
te foloseşti de proprietatea Font şi să le măreşti sau să le evidenţiezi (cu Bold).

12
Ataşează primului buton, cel pentru adunare (ButonPlus) următoarea subrutină, care vrea să adune
numărul 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 porneşte programul, introdu un număr î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 atenţie, ele sunt considerate ca nişte texte care se "adună" precum textele, adică se
concatenează. Acest lucru este firesc, deoarece Visual Basic interpretează conţinuturile 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ă aşa cum ne-am propus, adică să adăugăm numere, va
trebui ca să convertim aceste texte la valorile numerice corespunzătoare, cu alte cuvinte să
"scoatem" ghilimelele de la "20" şi "45", pentru a obţine 20 şi 45, deci şi suma lor 65 şi nu 2045.
De "scoaterea" ghilimelelor se ocupă funcţia Val, iar de "punerea lor" se ocupă funcţia inversă ei,
numită Str. Corect ar fi să scriem aşa:
Rezultat.Text=Str(Val(Operand1.Text)+Val(Operand2.Text)), dar conversia de la valoarea
numerică la textul necesar casetei Rezultat se face automat, aşadar e suficient să înlocuim subrutina
greşită 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 rămâne decăt să realizăm şi celelalte trei subrutine asemănătoare, 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 aţi notat Caption-urile de pe cele două butoane pentru înmulţire şi împărţire, când va
trebui să scrieţi codul veţi folosi * pentru înmulţire şi / pentru împărţire.

Totul pare acum OK, dar încearcă să împarţi un număr oarecare la 0! Vei obţine un mesaj de eroare,
apoi apasă pe End (şi nu pe Debug!). E normal, deoarece nu are sens împărţirea la zero. Aşadar,
trebuie să testăm dacă nu cumva se încearcă o împărţire la zero, iar dacă împărţitorul ar fi 0 să nu se
mai realitzeze împărţirea, ci să afişăm un mesaj de eroare, într-o casetă de mesaj.

Aşadar, subrutina corectă pentru butonul de împărţire ar putea fi următoarea:

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 împărţirea la zero:

14
5. Butoane de opţiune şi cadre
Să începem un nou proiect, în care vom amplasa patru butoane de opţiune (Option Button):
Option1, Option2, Option3 şi Option4, ale căror Caption-uri vor fi respectiv feminin, masculin,
nefumator şi fumator. Dacă amplasaţi cele patru butoane de opţiune în cadrul formei, veţi observa,
la rularea programului, că nu puteţi alege două din ele simultan, cum ar fi feminin şi nefumător, dar
ar fi normal să se poată aşa ceva.

Atunci ştergeţi cele patru opţiuni şi desenaţi două cadre (Frame), în care veţi grupa căte două
opţiunile, iar cadrelor le veţi pune Caption-urile "Sex" şi respectiv "Fumator?", ca în figura
următoare. Mai mult, alegeţi 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
nefumătoare.. Mai adaugă şi un buton de comandă Command1 şi o casetă de text Text1, ca în figura
următoare:

15
Option Option

Option
Option
Command

Text1

Ne propunem în continuare să scriem subrutina care atunci când executăm click pe butonul
Command1 (cu Caption="Cel fel de om esti?") să primim răspunsul corespunzător în caseta de texte
Text1. De exemplu, pentru situaţia din figura anterioară ar trebui să obţinem "Esti o femeie
nefumatoare.".

Nu este greu, dacă folosim două instrucţiuni IF imbricate (una într-alta). De remarcat că primul
ELSE va corespunde ultimului IF ş.a.m.d.! Pentru a referi proprietatea Value pentru opţiunile
Option1, Option2 ş.c.l, vom scrie Option1.Value, Option2.Value etc. Acestea pot avea valori
boolene, deci pot fi True (adevărat) sau False (fals). Discuţia celor patru cazuri se va face mai întâi
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ă urmărim mai bine programul pe care l-am scris.

Iată un exemplu din timpul funcţionării acestui program:

16
6. Casete de validare
Următorul 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 păstrăm denumirile originale şi să le stabilim valorile pentru proprietăţile Caption ca fiind:
literatura, muzica, sportul şi, respectiv, excursiile. Completează forma cu un buton de comandă
(Command1, având Caption-ul "Ce pasiuni ai?"), precum şi cu o casetă de text Text1, fără text în
interiorul ei (Text=""). Caută proprietatea MultiLine pentru caseta de text Text1 şi stabileşte-i
valoarea la True, astfel încât textul va apărea acolo pe mai multe linii (dacă va fi cazul).

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

17
Vrem ca la apăsarea butonului de comandă să ne apară în caseta Text1 un text de forma: "Pasiunile
tale sunt literatura, sportul,". Sunt prea multe posibilităţi de a selecta sau nu cele patru pasiuni (mai
precis sunt 16 variante), ca să facem o discuţie cu IF-THEN-ELSE, aşa că vom folosi patru IF-uri
(fără 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, iniţial vid.

Subrutina va fi:

Private Sub Command1_Click()


T = ""
If Check1.Value = 1 Then T = T + Check1.Caption + ", "
If Check2.Value = 1 Then T = T + Check2.Caption + ", "
If Check3.Value = 1 Then T = T + Check3.Caption + ", "
If Check4.Value = 1 Then T = T + Check4.Caption + ", "
Text1.Text = "Pasiunile tale sunt " + T
End Sub

7. Vector de controale
Programul anterior are un mic dezavantaj evident: apar patru instrucţiuni foarte asemănătoare scrise
una sub alta, iar dacă am avea 20 de pasiuni Check1... Check20, ar trebui să scriem practic o
instrucţiune de 20 de ori, cu mici modificări de numere de la un rând 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 acelaşi fel, iar Visual Basic ne permite să grupăm
chiar şi controale de acelaşi fel (în principiu numerotarea indicilor se face de la zero şi se păstrează
în proprietatea Index a fiecărui control din vector, în parte). Cel mai simplu mod de a crea un vector
de controale este următorul:
amplasăm primul control şi-i dăm numele pe care vrem să-l aibă vectorul;
selectăm controlul şi îl copiem în Clipboard (Edit->Copy)
apoi readucem copia sa din Clipboard prin lipire (Edit->Paste) şi răspundem afirmativ la întrebarea
dacă vrem să creăm 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 întrebaţi aşa şi vom răspunde prin Yes:

Acum putem să adăugăm şi celelalte controale (butonul Command1 şi caseta Text1), iar codul
butonului, pentru evenimentul Click, va fi următorul, 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 proprietăţi vectori


Listele (simple) (ListBox), ca şi casetele combinate (ComboBox) au atăt proprietăţi de tipul celor cu
care ne-am obişnuit deja, având tipuri de date elementare, căt şi proprietăţi de tip vectori. Vom
discuta despre acestea mai târziu, când 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 rând. Aceste elemente vor fi nişte denumiri de fructe şi vor fi scrise în
proprietatea List, separate de Ctrl+Enter. La final, vei apăsa Enter.

Noi am scris următoarele valori: mere, pere, portocale, caise, ananas, visine,. cirese, prune, gutui,
zmeura, capsuni, piersici, dar lista ne afişează doar primele care încap şi automat creează o bară de
derulare, pentru a permite vizualizarea şi celorlalte elemente (itemi) din listă, în timpul rulării
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 apărea ordonate alfabetic (crescător) în timpul rulării programului. De
asemenea, dacă vrei să poţi alege mai multe fructe simultan, va trebui să schimbi valoarea
proprietăţii MultiSelect, de la 0 la 1 sau 2.

În continuare să facem un mic program care, la acţionarea listei prin click (mai precis a unui
element din ea, selectat sau nu), să ni se afişeze într-o casetă de text Text1 acel element. Trebuie să-
ţi spun că există proprietatea Text pe care o au listele şi care păstrează întotdeauna ultimul element
din listă pe care s-a făcut 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 micşorează puţin caseta de texte Text1, apoi amplasează între listă şi Text1 un buton
de comandă Command1, aşa cum se vede în figura de mai jos.

Şterge codul subrutinei List1_Click, apoi ataşează butonului Command1 şi evenimentului Click
următoarea 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 următorul: vei selecta mai multe fructe din listă, iar când vei apăsa pe buton, numărul
lor va apărea în caseta de text Text1.

21
Hai să-ţi explic cum funcţionează această subrutină. În primul rând, trebuie să ştii că numărul de
elemente dintr-o listă (de exemplu din lista Fructe) se stochează în proprietatea ListCount. Această
proprietate nu poate fi accesată în faza proiectării, din tabelul de proprietăţi, dar poate fi folosită de
programator în cod. Elementele listei se păstrează în proprietatea List, care este o proprietate de tip
vector (de şiruri de caractere) şi sunt numerotate începând de la 0. Aşadar, 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
numărul lor este Fructe.ListCount, ultimul va fi Fructe.List(Fructe.ListCount-1).

Similară proprietăţii List este şi proprietatea Selected, care este tot un vector, de valori logice
(boolene), Fructe.Selected(i) = True însemnând că fructul (elementul) respectiv este selectat, iar
Fructe.Selected(i) = False însemnând că nu. Subrutina anterioară parcurge cu instrucţiunea FOR
lista Fructe şi, de fiecare dată când găseşte un element selectat, creşte cu o unitate variabila n (iniţial
aceasta fiind 0), iar la final depune valoarea n în caseta de text Text1, n reprezentând acum câte
elemente s-au selectat.

9. Metode pentru liste


Aşa cum ai observat mai înainte, listele au tot felul de proprietăţi, fie că ele sunt simple sau
structurate (vectori). Dar atât listele, cât şi alte obiecte mai simple sau mai complexe mai au şi
metode. Acestea sunt nişte acţiuni (proceduri) ataşate obiectelor respective, de exemplu metoda
Clear a unei liste va elimina din listă toate elementele sale (o va "curăţa"). 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ă amplasăm o casetă de text Text2 şi vrem ca să fie adăugat 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ă amplasăm î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 Comman

noua listă
lista Fructe Salata

Comman Text1 Comman

Vrem ca la acţionarea 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 funcţionează 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ă realizăm un joc simplu, în care trebuie să omorâm, prin click de
mouse, nişte muşte care apar în cinci zone ale formei noastre (în cele patru colţuri şi în centru).
Muştele apar la un anumit interval de timp, iar dacă nu le "strivim", vor dispărea după acelaşi
interval de timp. Dacă, însă, vom executa click pe ele, cât timp stau vii pe ecran, le vom omorâ,
vom câştiga un punct şi apoi vor dispărea.

Pentru a implementa un asemenea joc, avem nevoie de următoarele noi controale: imagini (Image),
pentru a reprezenta muştele, şi cronometre (Timer) pentru a ţine evidenţa intervalelor de timp şi a
apariţiei/dispariţiei muştelor). De fapt, chiar dacă jucătorul va avea impresia că apar mai multe
muşte, noi vom folosi cinci controale de tip Image, în care vom avea fie imaginea unei muşte vii, fie
a unei muşte moarte, fie nimic, cu sensul că în zona respectivă nu a apărut în acel moment nici o
muscă. De asemenea, vom folosi proprietatea Tag pentru a stoca starea muştelor: 0 = lipsă, 1 = vie,
2 = moartă. Proprietatea Tag este comună tuturor controalelor şi este folosită pentru a stoca o
informaţie suplimentară asociată respectivului control.

Vom folosi două fişiere 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 încărcatî imaginea dintr-un fişier, folosind funcţia LoadPicture. Astfel,
dacă avem o muscă de indice Index, vom scrie Musca(Index).Picture =
LoadPicture(App.Path+"\muscav.jpg") pentru a încărca imaginea cu musca vie în Musca(Index).
App.Path semnifică calea aplicaţiei noastre, adică directorul în care am salvat proiectul nostru
Visual Basic.

Să începem proiectarea interfeţei jocului nostru: mai întâi amplasăm o imagine în centrul ecranului,
pe care o denumim Musca. Controlul de tip Image, respectiv cronometru arată astfel:

Apoi, aşa cum am multiplicat casetele de text dintr-o secţiune anterioară, vom multiplica imaginea
noastră, folosind Copy şi Paste, formând un vector de imagini, celelalte patru componente ale
vectorului fiind amplasate în colţurile formei. Astfel, prima imagine va avea Index-ul 0, iar celelalte
patru vor avea Index-ul 1, 2, 3 şi respectiv 4, aşa 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, creând un vector. Iată rezultatul:

Crono(1) Crono(2)

Crono(3) Crono(4)
Crono(0)

Aceste cronometre sunt un exemplu de controale "invizibile", în sensul că ele funcţionează fără ca
să ni se înfăţişeze în vreun fel anume, de aceea poziţia lor nici nu contează. Ele vor "dispărea"
imediat ce vom porni programul.

Cronometrele au o singură proprietate importantă numită Interval. Este intervalul de timp după care
intră în acţiune. După fiecare Interval milisecunde apare evenimentul Timer asupra cronometrulului
şi noi trebuie să spunem ce vrem ca să se întâmple la fiecare astfel de "tic" al cronometrului. Fireşte,
dacă musca asociată nu este pe ecran, atunci ea va apărea vie, iar dacă este (vie sau moartă) va
dispărea.

O altă subrutină pe care va trebui să o realizăm este asociată muştelor şi evenimentului Click, prin
care noi încercăm să omorâm muştele. Dacă facem click pe o muscă vie, atunci o omorâm, 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 muşte vii şi moarte, dar vom avea nevoie de cele două fişiere în care să le păstrăm
imaginile lor. Ori le desenăm 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 aplicaţiei noastre. În primul rând trebuie să scriem subrutina
Form_Load, care este lansată în execuţie la pornirea aplicaţiei, adică la încărcarea formei. Aici vom

25
face iniţializările 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. Deşi
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 întâmplă când se execută click pe o muscă. Dacă este vie va fi
omorâtă, iar dacă e deja moartă sau nu, nu se va întâmpla nimic. Dacă vrem ca să existe un punctaj
care să crească la fiecare muscă omorâtă, atunci va trebui să declarăm ca fiind globală variabila
punctaj. La (General)(Declarations) vom scrie:
Dim punctaj as Integer.

Restul modificărilor 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 "Aplicaţii în Visual Basic", apărută la Editura Teora,
Bucureşti, 1998-2003.

11. Tabele
Un control foarte util în dezvoltarea multor aplicaţii este Microsoft Flex Grid. Acest control nu
poate fi găsit de la bun început în bara de instrumente din partea stângă a mediului Visual Basic. El
trebuie adăugat în felul următor: din meniul VB alegi opţiunea Project, apoi Components... şi vei
obţine o listă de alte componente ce pot fi adăugate la Toolbox, pentru proiectul tău. Alege din listă
Microsoft Flex Grid şi bifează în dreptul acestei componente, apoi apasă pe butonul OK. În
Toolbox va apărea simbolul controlului acesta:

Apoi vei putea amplasa un tabel (care iniţial va fi denumit MSFlexGrid1, dar noi îl vom redenumi
T, de la tabel). Iniţial are două rânduri şi două coloane, dar putem modifica proprietăţile Rows şi
Cols pentru a modifica numărul de rânduri, respectiv de coloane. Te rog să alegi valoarea 10 pentru
Rows şi 5 pentru Cols. De fapt, rândurile sunt numerotate începând cu 0 şi până la T.Rows-1, iar
coloanele de la 0 la T.Cols-1. Observi că primul rând şi prima coloană sunt gri. Ele sunt, de fapt,
fixe, inaccesibile evenimentelor Click sau KeyPress. Şi numărul de rânduri, respectiv coloane fixe
se poate schimba, cu ajutorul proprietăţilor FixedRows şi FixedCols.

27
Proprietăţi foarte importante sunt Row = rândul curent, Col = coloana curentă şi Text = textul din
celula curentă. Dacă vrem să punem în celula (căsuţa) de pe rândul 2 şi coloana 3 informaţia (textul)
"ABC" vom scrie următoarea 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, acelaşi lucru se poate scrie mai simplu:
T.TextMatrix(2,3)="ABC".

Vei observa că toate rândurile au aceeaşi înălţime şi toate coloanele au aceeaşi lăţime. Cu
RowHeight şi ColWidth poţi să modifici valorile, aceste proprietăţi fiind vectori. De exemplu, prin
atribuirea T.ColWidth(0) = T.ColWidth(0) / 2 vom înjumătăţi grosimea primei coloane.
Proprietatea AllowUserResizing are diferite valori ce permit utilizatorului să redimensioneze
rândurile/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 studenţi, a căror 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) <> "" Then
x = Val(T.TextMatrix(i, 2))
y = Val(T.TextMatrix(i, 3))
T.TextMatrix(i, 4) = (x + y) / 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) = "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 studenţi. Pentru aceasta vom
folosi un alt control, pe care îl adăugăm în aceeaşi manieră ca şi pe FlexGrid. Se numeşte Microsoft
Chart Control şi are proprietăţi asemănătoare 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. Fireşte mai apar şi alte proprietăţi, dar te las să le descoperi singur.

Amplasează un control Ms Chart în forma ta, alături de tabelul T, alegând pentru acesta
Columns=3, Rows=9. Denumeşte graficul G şi modifică la True valoarea proprietăţii RandomFill.
Apoi amplasează butonul Command2 şi asociază-i codul de mai jos, care va reprezenta grafic datele
din tabelul T. Din păcate Ms Chart nu are o proprietate de genul lui TextMatrix, aşa că va trebui să
lucrăm 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. Fişiere text - să salvăm şi să restaurăm datele
Cu Open cale + nume fişier For Output as #număr putem crea/deschide pentru scriere un fişier text
cu numele şi calea precizate, asociindu-i numărul 1. Orice referire la acest fişier se va face prin
intermediul numărului 1. Pentru ca să operăm simultan cu un al doilea fişier, va trebui să folosim un
alt număr întreg.

Pentru a adăuga la datele existente altele, va trebui ca fişierul text să se deschidă prin:
Open cale + nume fişier For Append as #număr.

Pentru a deschide fişierul în vederea citirii de date din el se foloseşte:


Open cale + nume fişier For Input as #număr.

Închiderea unui fişier deschis pentru citire/scriere/adăugare se face prin Close #număr.

Scrierea de date se face cu Print #număr, expresiile_de_scris, iar citirea cu Input #număr,
variabilele_de_citit (pentru numere) sau cu Line Input #număr, variabilele_de_citit (pentru şiruri de
caractere).

31
Completând 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 fişierul 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 sfârşit, să adăugăm aplicaţiei noastre încă două butoane, unul pentru a ordona elevii alfabetic
(crecător după nume), iar unul pentru ordonarea descrescătoare după medii a elevilor. Ambele
subrutinte vor folosi metoda de ordonare prin selecţie directă. Detalii despre metodele de sortare pot
fi găsite î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 îmbunătăţit în mai multe moduri: pentru a permite un număr variabil de elevi,
pentru a cere utilizatorului numele fişierului î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, Cătalin)
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 d-
voastra 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 d-
voastra!"
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 d-
voastra 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 + Check1(0).Caption + ", "
If Check1(1).Value = 1 Then T = T + Check1(1).Caption + ", "
If Check1(2).Value = 1 Then T = T + Check1(2).Caption + ", "
If Check1(3).Value = 1 Then T = T + Check1(3).Caption + ", "
If Check1(4).Value = 1 Then T = T + Check1(4).Caption + ", "
If Check1(5).Value = 1 Then T = T + Check1(5).Caption + ", "
If Check1(6).Value = 1 Then T = T + Check1(6).Caption + ", "
If Check1(7).Value = 1 Then T = T + Check1(7).Caption + ", "
If Check1(8).Value = 1 Then T = T + Check1(8).Caption + ", "
If Check1(9).Value = 1 Then T = T + Check1(9).Caption + ". "
If T = "" Then
Text1.Text = "Culorile tale preferate nu sunt printre cele listate?"
Else
Text1.Text = "Culorile tale preferate sunt: " + T
End If
End Sub

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 nu exista in DEX-ul limbii romane.", vbCritical,
"Atentie!!!"
End If
End Sub

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 = "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 nu exista in DEX-ul limbii romane.", vbCritical,
"Atentie!!!"
End If
End Sub

Cătălin:

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 opţiune ş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 = "Tigru"
Case 3
Text1.Text = "Iepure"
Case 4
Text1.Text = "Dragon"
Case 5
Text1.Text = "Sarpe"
Case 6
Text1.Text = "Cal"
Case 7
Text1.Text = "Capra"
Case 8
Text1.Text = "Maimuta"
Case 9
Text1.Text = "Cocos"
Case 10
Text1.Text = "Caine"
Case 11
Text1.Text = "Porc"
End Select
End If
Next i

End Sub

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 "hectogram"
List1.AddItem "kilogram"
List2.Clear
List2.AddItem "decigram"
List2.AddItem "centigram"
List2.AddItem "miligram"
End Sub

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 2 3 4 5 6 7 8 9
A B C D E F G H I
J K L M N O P Q R
S T U V W X Y Z

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, Cătălin, 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 List1

Option1

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
Cătălin

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. Realizaţi un program care, pentru un număr 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 mouse-
ului.

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 Label3
Caption="")

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 aplicaţie concretă, pas cu pas (Andreea)
Paşii de urmat pentru crearea unui program în Visual Basic, pentru recomandarea
tratamentelor pentru diferite afecţiuni:

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
Rezolvări

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) / 2
M.ColWidth(1) = M.ColWidth(1) * 2
M.ColWidth(3) = M.ColWidth(3) * 2
M.ColWidth(4) = M.ColWidth(4) * 2
M.ColWidth(5) = M.ColWidth(5) * 2
End Sub

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 Pătruţ - Programarea calculatoarelor electronice, curs pentru studenţii


anului II, Contabilitate şi informatică de gestiune, Universitatea din Bacău, 2004,
http://bacau.inf.ro/bogdan/cursuri/pce

2. Bogdan Pătruţ -Aplicaţii în Visual Basic, Editura Teora, Bucureşti, 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

S-ar putea să vă placă și